There are 11 posts.

Mysql InnoDB 엔진 아키텍처

August 05, 2024

Mysql 8.0 버전 부터 MySQL 서버의 모든 기능을 InnoDB 스토리지 엔진만으로 구현할 수 있게 되었다. 빠른 읽기 성능에서 큰 장점을 보였던 MyISAM엔진은 InnoDB 엔진의 성능이 개선되며 도태되어가는 상황이며, 이후 버전에서는 MyISAM 스토리지 엔진은 없어질것으로 예상된다. 따라서 InnoDB 스토리지 엔진의 아키텍처를 이해하는 것…


Spring batch 성능 개선 part3 - custom reader 성능 테스트

July 12, 2024

지난 글에서 직접 커스텀하여 만들었던 커스텀 reader를 JpaPagingItemReader와 비교했을때 어느 정도 성능 차이를 보여주는지 테스트 해보려고 한다. 테스트는 로컬 환경에서 진행했으며, 테스트 설정 환경은 다음과 같다. 하나의 하나의 step 안에 , 로 구성 writer는 실제 비즈니스 로직이 아닌 없이 단순히 로그 찍는 용도로 대체하…


Spring batch 성능 개선 part2 - ZeroOffsetItemReader 본격 개발

July 05, 2024

지난 글에서 페이징 방식을 채택하는 기존의 가 가지는 태생적 문제점을 살펴봤다. 이제 남은 것은 문제의 솔루션인 페이징 방식으로 동작하는 를 개발하는 것이다. 사실 이라고 하는 거창한 단어가 무색한 것이, 기존에 이미 검증된 페이징 가 존재하므로 이들 중 하나를 골라 새로운 클래스를 만들어 복붙한 후 수정해 나가는 방향으로 작업을 했다. 0. 기존 …


Spring batch 성능 개선 part1 - 페이징 기반 ItemReader의 문제점

June 28, 2024

스프링 배치 어플리케이션의 퍼포먼스를 향상시키는 여러 주안점 중 가장 크게 고려 되어야할 부분은 병목 지점을 파악하여 개선하는 것이라고 생각한다. 배치 어플리케이션은 하나의 내부에서 크게 데이터를 읽어 들이는 와 수정 혹은 삽입등을 수행하는 로 나뉘어진다. 하나의 배치 어플리케이션은 보통 연속된 파이프라인으로 여러 으로 구성되므로 와 의 성능은 곧 배…


Java ArrayBlockingQueue 구현 코드로 알아보는 ReentrantLock과 Condition

May 15, 2024

자바 5부터 제공되는 java.util.concurrent 패키지는 멀티스레드 환경에서 안전하게 사용할 수 있는 컬렉션 프레임워크를 제공한다. 그중에는 ReentrantLock, Condition, Semaphore, CountDownLatch, BlockingQueue 등 다양한 클래스와 인터페이스가 있다. 오늘은 BlockQueue 인터페이스를 구현한…


G1(Garbage First) GC 개요 및 동작방식

May 01, 2024

자바 개발자는 JVM에서 메모리의 할당과 해제를 모두 관리하는 가비지 컬렉션 덕분에 메모리 관리 이외의 관심사에 더 집중할 수 있다. 한편으론 메모리 문제가 터졌을때, 개발자가 해결할 수 있는 범위가 제한적이라는 단점도 분명히 존재한다. 가비지 컬렉션을 가장 처음 사용한 언어는 1960년대에서 개발된 "리스프"이다. 그로부터 반세기가 지난 현재의 가비지…


Spring batch - JpaPagingItemReader 사용시 dirty checking 비정상 작동 현상

April 16, 2024

스프링 배치의 step을 구성할때 reader로 어떤 것을 사용할 지 고민이 될 때가 많다. 이때 데이터 접근 기술로 jpa를 사용할 때, 가장 쉽게 고려되는 것 중 하나가 JpaPagingItemReader이다.(Spring-data-jpa를 사용할 시 RepositoryItemReader도 유용하게 쓰인다.) 하지만 쉬운 사용법과 별개로 가끔 우리의 …


Java 싱글톤 DCL(double-checked-locking) 기법에서 volatile의 역할

March 20, 2024

디자인 패턴 중 싱글톤 패턴을 학습하다보면 구현 방법 중 DCL 기법을 접하게 된다. 현재는 싱글톤 패턴이 안티패턴이다라는 의견도 나오고 있는 상황이라 그냥 기법의 형식 정도만 봐두고 지나 갈 수도 있었지만, volatile 키워드, 객체 초기화등 여러 개념이 섞여있어 그냥 지나 칠수 만은 없었다. 이글에서는 어리석게도 사소한 것에 집착하는 한 개발자 …


Hikari CP의 getConnection 동작 방식과 설정값

January 25, 2024

Hikari CP란? 는 DB Connection Pool을 구현하는 오픈소스 라이브러리 중 하나로, 성능, 효율성, 안정성 측면에서 우수한 결과를 보여주어 많은 개발자들에게 선호되고 있다. 스프링 부트 버전 2에서 정식으로 지원하는 라이브러리로 채택되었다. DB Connection Pool(DBCP)이란? 미리 데이터베이스와의 TCP통신을 통해 일정 …


Java 제네릭(Generic)의 이해 part2 - Type erasure

January 15, 2024

제네릭은 1.5 버전에서 등장하였고, 하위 버전과의 호환성을 위한 추가적인 작업이 필요하였다. 어떤 작업이 필요할까? Type erasure란? 제네릭은 JDK 1.5 버전에 처음 도입 되었다. 그렇다면 이전 버전에서는 제네릭이 도입되기전의 자바 버전의 코드들과의 호환성을 위해 컴파일시에 타입 안정성을 체크한 후 제네릭 타입을 소거한다. 이것을 라고 한…