전체 글
-
JVM 클래스로더 알아보기Java 2025. 1. 11. 02:34
JVM 클래스로더를 알아보자.Goal클래스로더의 역할 및 개요에 대한 학습클래스로더가 클래스를 로딩하는 과정 알아보기클래스로더JVM이 클래스 로딩을 하는 과정은 크게 로딩 - 링크 - 초기화 단계로 이루어진다.클래스 로더는 로딩 과정에서 클래스파일을 JVM 내부로 읽어들이는 역할을 한다. 클래스 로더의 종류는 크게 다음과 같다.부트스트랩 클래스로더(Bootstrap ClassLoader)확장 클래스로더(Extension ClassLoader)애플리케이션 클래스로더 또는 시스템 클래스 로더(System ClassLoader)클래스 로더의 특징은 다음과 같다.유일성같은 클래스라도 클래스로더 마다 로드한 결과는 다르다.하나의 클래스를 두개의 서로 다른 클래스로더로 로딩을 하면 결과 값은 동일한 결과가 아니게 ..
-
JVM 클래스 로딩 과정 알아보기Java 2025. 1. 9. 03:50
JVM 클래스 로딩 과정은 어떤 식으로 진행되는 지 살펴보자GoalJVM 의 클래스 로딩 과정을 알아보며 동작 원리를 이해하기얕게 알고 있던 동작 과정을 정확히 설명할 수 있는 수준으로 이해하기클래스 로딩 과정로딩클래스로더가 클래스의 이름으로 바이트 코드를 찾고 해당 바이트 코드의 내용을 읽어 바이트 스트림으로 가져온다.다양한 위치에서 바이트 코드를 읽어올 수 있다. (jar, 네트워크, 동적 생성 등)바이트 코드를 JVM 메모리의 Method 영역에 런타임 데이터 구조로 변환하여 저장한다.Method 영역에 저장을 한 뒤java.lang.Class 객체를 생성하여 힙 메모리에 저장한다.힙 메모리에 저장된 이 Class 타입을 통해 리플렉션을 사용할 수 있다.링크링크는 검증(Verify), 준비(Prep..
-
JVM 바이트코드 알아보기Java 2025. 1. 4. 02:35
바이트코드자바는 익히 알려진대로 자바 가상 머신(JVM) 위에서 실행되는 프로그래밍 언어이다.동작 구조는 다음과 같다. 1. 자바 소스 코드를 작성2. 컴파일하여 바이트 코드로 변환3. 바이트 코드를 JVM에 로딩4. 로드된 바이트 코드를 인터프리터 혹은 JIT 컴파일러를 통해 실행 개발자가 작성하는 자바 코드는 컴파일된 .class 파일, 바이트코드가 되어 JVM에게 전달된다.JVM이 이해하는 바이트코드는 어떤 구조로 되어있는 지 살펴보며, 간략한 동작 과정들을 이해해보았다. 바이트코드는 특정한 구조를 가진 이진 스트림 형태로 자바 가상 머신 명세에 ClassFile 이라는 구조로 정의되어 있다.ClassFile.java 파일을 자바 컴파일러로 컴파일한 .class 파일의 구조JVM(자바 가상 머신)이..
-
MySQL Binlog CDC 구현(2) - Binlog 변환개발 2024. 12. 26. 06:14
지난 포스팅에 이어 Binlog 를 파싱하여 이벤트를 발행하는 과정입니다. Binlog는 크게 다음과 같은 정보를 가지고 있습니다.- 어떠한 EventType의 Binlog 인지- 몇번째 컬럼의 데이터인지를 나타내는 Bitset- 데이터 정보 등등 컬럼명에 대한 정보가 없으니 원본 데이터로 파싱하기란 불가능합니다.따라서 MySQL의 Metadata를 통해 컬럼의 인덱스와 컬럼명을 알고 있어야 적절히 컬럼명과 데이터를 매핑할 수 있습니다.초기화 @PostConstruct public void init() throws SQLException { try (Connection connection = jdbcTemplate.getDataSource().getConnection()) { Resul..
-
MySQL Binlog CDC 구현(1) - Binlog 읽기개발 2024. 12. 5. 04:28
Binlog란?Binlog는 Binary Log라고도 불리며, 데이터베이스에서 발생하는 변경 사항(예: 테이블 생성, 데이터 변경 등)을 기록한 이벤트(Event)를 포함하는 로그 파일입니다.아래는 MySQL 공식 문서에서 발췌한 설명입니다:The binary log contains “events” that describe database changes such as table creation operations or changes to table data.(출처: MySQL 8.4 Reference Manual)이처럼, Binlog는 데이터베이스의 변경 작업을 이벤트로 기록하며, 데이터 복구와 복제(Replication)와 같은 중요한 작업에서 핵심적인 역할을 합니다.Binlog를 활용한 CDC 구현저..
-
JOOQ 테스트 환경 분리하기개발 2024. 9. 25. 16:07
jooq는 DSL을 사용하여 자바 코드를 쿼리로 변환하여 데이터베이스 작업을 한다.여기서 사용되는 DSL 코드는 실제 데이터베이스의 테이블 정보를 컴파일 시점에 읽고 생성하여 런타임 시에 사용되는 구조이다.프로젝트를 진행하며 테스트 환경 분리가 필요했다.기존의 테스트는 데이터베이스를 사용하는 테스트를 진행하기 위해서는 실제 데이터베이스를 실행해야하는 수고스러움이 있었다. 만약 데이터베이스를 실행하지 않고 테스트를 실행하면 DSL 코드를 생성할 테이블 정보를 읽지 못해 에러가 발생한다. 이를 해결하고자 testContainer 를 도입하여 테스트 환경에서 컨테이너를 띄워 테스트의 환경을 격리 시키기로 했다.문제점jooq 는 위 설명처럼 빌드 시 데이터베이스에 접근해 메타데이터를 기반으로 DSL 코드를 생성..