본문 바로가기

프로젝트

(77)
MySQL 데이터를 Psql로 마이그레이션하기 프로젝트 과정에서 데이터를 마이그레이션할 상황이 발생했다. MySQL 기반 데이터를 psql에 적용시켜보자. 먼저, Data Export를 통해 dump.sql 파일이 존재함을 가정한다. 1. NotePad++ 설치 및 데이터 변환 (심플) https://notepad-plus-plus.org/downloads/ Downloads | Notepad++ notepad-plus-plus.org 일단 최신 버전의 NotePad를 다운로드하자. 만일 리눅스 환경이라면 sed -i -e 's/DEFAULT CHARACTER SET [a-z]*\s*//g' dump.sql 을 통해 간편하게 변환할 수도 있다. NotePad를 통해 psql에서 사용할 수 없는 데이터를 전부 변환처리 해야 한다. Ctrl + H를 통..
[HikariCP][ASM] JDBC 쿼리 로깅하기(ProxyConnection) ProxyConnection ProxyConnection은 java.sql.connection 인터페이스를 구현한 프록시 클래스이다. 그럼 실제 Connection을 하는 객체는? Springboot 등에서 실제 Connection 구현체는 사용하는 데이터베이스와 JDBC Driver에 따라 달라진다. 예를 들어, MySQL을 사용한다면 com.mysql.cj.jdbc.ConnectionImpl이 될 수 있으며, PostgreSQL을 사용한다면 org.postgresql.jdbc.PgConnection이 될 수도 있다. 스프링 부트는 자동 구성(DataSource를 생성하는 기본 로직과 유사하게)을 통해 데이터 소스를 설정하고, 애플리케이션에서 사용하는 구체적인 JDBC 드라이버에 맞는 Connectio..
[HikariCP][Delegate]ProxyPreparedStatement 타깃 코드 다음 코드의 동작과 흐름을 확인해보자. public abstract class ProxyPreparedStatement extends ProxyStatement implements PreparedStatement { ProxyPreparedStatement(ProxyConnection connection, PreparedStatement statement) { super(connection, statement); } public boolean execute() throws SQLException { this.connection.markCommitStateDirty(); return ((PreparedStatement)this.delegate).execute(); } public ResultSe..
[TroubleShooting][ASM][HikariCP] HikariCP 기반 Springboot 트랜잭션 로그 수집 - 1 개요 HikariCP는 고성능 JDBC 커넥션 풀 라이브러리로, Spring Boot에서 널리 사용되며, DB 연결 관리를 최적화하기 위해 설계되었다. Spring Boot는 HikariCP를 기본적인 DataSource 구현체로 사용한다. (Spring Boot 2.0 이상 버전부터 HikariCP가 기본 Connection Pool로 설정되어 있다.) 이는 Spring Boot의 자동 구성 메커니즘을 통해 제공되며, 특별한 설정 없이도 HikariCP를 사용할 수 있게 해준다. 사용자는 application.properties 또는 application.yml 파일에서 HikariCP에 대한 세부 설정을 조정할 수 있다. HikariCP는 JDBC의 javax.sql.DataSource 인터페이스를 ..
[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 )은 메소..