본문 바로가기

전체 글

(227)
[ASM][Util]TraceClassVisitor/고수준 코드 출력하기[InteliJ] Java ASM 라이브러리의 TraceClassVisitor는 Java 바이트코드를 분석하고 조작하기 위한 도구 중 하나이다. ASM 라이브러리는 Java 클래스 파일을 직접 읽고 쓰며, 이를 통해 런타임에 클래스의 구조를 변경하거나 분석할 수 있는 기능을 제공한다. TraceClassVisitor는 ASM의 방문자(visitor) API 중 하나로, 클래스 파일의 내용을 분석하고 이해하기 쉬운 형태로 출력하는 데 사용된다. 1. 개념 TraceClassVisitor는 ASM 라이브러리에서 제공하는 클래스 방문자 중 하나로, 방문한 바이트코드 구조(클래스, 메소드, 필드 등)를 사람이 읽을 수 있는 형식으로 출력하는 기능을 한다. 이 클래스는 ClassVisitor 인터페이스를 구현하며, 방문자 패턴을 ..
[A Java bytecode engineering library] - [Tree API] 9.Metadata 이번 파트는 상대적으로 짧은 편이다. 9. 메타데이터(Metadata) 이 장에서는 컴파일된 자바 클래스의 메타데이터(예: 애너테이션)에 대한 트리 API를 소개한다. 이 메타데이터는 이미 4장에서 소개되었고, 해당 코어 API를 알고 나면 트리 API가 간단하기 때문에 이 장은 매우 짧다. 9.1. 제네릭(Generics) 트리 API는 제네릭 타입에 대한 지원을 제공하지 않는다! 실제로 제네릭 타입을 코어 API에서와 같이 시그니처로 표현하지만, SignatureVisitor에 해당하는 SignatureNode 클래스를 제공하지 않으며, 비록 가능하지만(실제로는 타입, 메소드, 클래스 시그니처를 구분하기 위해 여러 Node 클래스를 사용하는 것이 편리할 것이다). 9.2. 애너테이션(Annotatio..
[ASM] Label 기본 개념 및 if/for/while 제어문 바이트코드 조작 개요 Label의 기본 개념 Label 객체는 코드 내 특정 위치를 가리키는 마커 역할을 한다. 이 위치는 다른 지점에서 점프하거나 분기할 때 참조될 수 있다. ASM에서는 메서드의 바이트 코드를 생성하거나 수정할 때, Label을 사용하여 조건문, 반복문, try-catch 블록 등의 흐름 제어 구조를 구현한다. Label은 MethodVisitor 인터페이스를 통해 메서드의 코드를 방문할 때 사용되며, visitLabel(Label label) 메소드를 사용하여 코드 상의 특정 위치를 정의한다. Label 사용 방법 Label 객체 생성: 먼저, Label 객체를 생성한다. 이 객체는 코드 내의 특정 위치를 나타낸다. Label start = new Label(); Label 위치 정의: 메서드 바이..
[A Java bytecode engineering library] - [Tree API] 8. Method Analysis 8. Method Analysis 이 장에서는 메소드의 코드를 분석하는 ASM API를 소개한다. 이 API는 트리 API를 기반으로 한다. 코드 분석 알고리즘 소개로 시작하여, 해당 ASM API와 일부 예시를 제시한다. 8.1. 소개 코드 분석은 매우 광범위한 주제이며, 코드를 분석하기 위한 많은 알고리즘이 존재한다. 여기서 모두를 소개하는 것은 불가능하며 이 문서의 범위를 벗어난다. 사실 이 섹션의 목적은 단지 ASM에서 사용되는 알고리즘에 대한 개요를 제공하는 것이다. 이 주제에 대한 더 나은 소개는 컴파일러에 관한 책에서 찾을 수 있다. 다음 섹션에서는 데이터 흐름과 제어 흐름 분석이라는 두 가지 중요한 코드 분석 기술을 소개한다: 데이터 흐름 분석( data flow analysis )은 메소..
개발 진행 : Springboot DataSource 동적 Proxy 테스트 https://csg1353.tistory.com/179 개발 진행 : 메서드 변조(MethodVisitor, ClassVisitor), 로깅 PrepareStatement Search transformer를 통해 prepareStatement를 조회해보자. public class MyClassTransformer implements ClassFileTransformer { //이 인터페이스의 구현체(transform)은 JVM이 존재하는 클래스를 로드할 때마다 호 csg1353.tistory.com 이전 문제의 한계를 극복하고, 실 sql 쿼리 요청에 대해 성공적으로 로그를 출력(최종적으로는 데이터 파싱) 해야 한다. 이를 위해 몇가지 방법을 찾아보았다. 제시안 1. Java Agent를 통한 드라이버..
[비공개][포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 1 핀포인트(Pinpoint)의 경우 문서가 길어져 분리하였다. 다음 링크를 참조할 것 : https://csg1353.tistory.com/169 [포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 2 현재 문서는 Pinpoint의 설치 가이드이다. Scouter의 경우 이전 문서에 존재한다. 다음 링크를 참조할 것 : https://csg1353.tistory.com/168 [포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 1 핀 csg1353.tistory.com 이번 포스팅에서는, Scouter와 Pinpoint를 Linux 환경에 구축하는 메뉴얼을 작성하였다. 환경 사양의 경우 다음과 같다. 구축 환경 Diagram과 Flow 설..
flink - java.net.UnknownHostException / 이름 혹은 서비스를 알 수 없습니다. 오류 2024-01-30 13:20:21,373 INFO org.apache.flink.runtime.metrics.MetricRegistryImpl - No metrics reporter configured, no metrics will be exposed/reported. 2024-01-30 13:20:21,379 INFO org.apache.flink.runtime.blob.PermanentBlobCache - Created BLOB cache storage directory /tmp/blobStore-72b3400e-84af-4cf4-819b-f7518e863576 2024-01-30 13:20:21,382 INFO org.apache.flink.runtime.blob.TransientBlobCa..
[Scouter paper] Web API, UI 적용 불가 해결( javax.servlet.ServletException: org.glassfish.jersey.servlet.ServletContainer-6a2d68f6@28a35f7d==org.glassfish.jersey.servlet.ServletContainer,jsp=null,order=1,inst=false) 오류 로그 20240124 19:26:10 Scouter Server Version 2.20.0 2023-05-29 05:14 GMT 20240124 19:26:10 [PID]3306 ____ _ / ___| ___ ___ _ _| |_ ___ _ __ \___ \ / __/ \| | | | __/ _ \ '__| ___) | (_| (+) | |_| | || __/ | |____/ \___\___/ \__,_|\__\___|_| Open Source S/W Performance Monitoring Scouter version 2.20.0 20240124 19:26:14 Scouter Server Version 2.20.0 2023-05-29 05:14 GMT 20240124 19:26:14 [PID]3..