Yun Blog

기술 블로그

Elasticsearch APM 기본설정

Elasticsearch은 모니터링 시스템으로 APM을 지원해 주고 있습니다. Spring 기반 웹서버에서 편리하게 구성할 수 있게 Elastic APM Agent를 제공하고 있습니다. 해당 포스팅에서는 스프링 기반의 웹서버를 Elasticsearch, Kibana를 이용해서 APM 연결하는 내용입니다. APM의 자세한 내용은 다음 포스팅에서 진행해보......

Redis Getting Started

해당 코드는 Github 공개되어 있습니다. Redis에 대한 내용을 최대한 간략하게 설명한 포스팅입니다. Redis 설치 (Docker) 123456789version: '3.7'services: redis: image: redis:6.2 command: redis-server --requirepass 1234 --......

Isolation Repeatable Read을 보장 하기 위한 JPA JPQL의 동작 원리

JPA로 살펴보는 Isolation 동작 방식

JPQL 조회 방식 findById() 같은 경우는 영속성 컨텍스트를 먼저 찾고 영속성 컨텍스트에 해당 엔티티가 있으면 그 값을 바로 리턴합니다. 이를 1차 캐시라고 말합니다. 반면 JPQL은 영속성 컨텍스트를 먼저 조회하지 않고 데이터베이스에 Query 하여 결과를 가져옵니다. 그리고 아래와 같은 흐름으로 영속성 컨텍스트를 저장을 시도합니다. J......

Spring Batch Reader 성능 분석 및 측정 part 2

HibernateCursorItemReader 측정 및 분석

Spring Batch Reader 성능 분석 및 측정 part 1 이어지는 글입니다. HibernateCursorItemReader HibernateCursorItemReader를 이해하기 앞서 JDBC를 이용하여 대량의 데이터를 가져오는 방에 대해서 이야기해보겠습니다. 이론적인 설명은 Real MySQL을 보고 정리했습니다. MySQL를 사용 중이......

Spring Batch Reader 성능 분석 및 측정 part 1

JpaPagingItemReader, QueryDslNoOffsetPagingReader 측정 및 분석

스프링 배치 애플리케이션에서 데이터베이스의 대량의 데이터를 처리할 때 Reader에 대한 성능 분석과 성능에 대한 측정을 정리한 포스팅입니다. 조회 대상 1234567891011121314# created_at 인덱스CREATE TABLE `payment`( `id` bigint(20) NOT NULL AUTO_INCREME......

Kotlin 기반 경량 ORM Exposed

Jetbrains Kotlin ORM Exposed

Exposed 포스팅 Kotlin 기반 경량 ORM Exposed Kotlin 기반 경량 ORM Exposed 추가 정리 part 2 Kotlin 기반 경량 ORM Exposed 추가 정리 part 3 해당 코드는 Github 공개되어 있습니다. Exposed 란 ? Exposed는 JetBrains에서 만든 Kotlin 언어 기반의 ORM 프......

Spring 레플리케이션 트랜잭션 처리 방식

대부분의 서비스에서는 데이터베이스를 Master, Slave 구조로 Master에서는 Create, Update, Delete 업무를 진행하고 Slave에서 Read 업무를 진행하는 구조로 설계합니다. Spring의 Master, Slave 환경에서의 트랜잭션에 대해서 포스팅해보겠습니다. 레플리케이션 MySQL 레플리케이션 MySQL은 위와 같은 구......

Kotlin으로 Spring 개발할 때

코틀린 기반으로 스프링 프레임워크를 사용하는 경우 다양한 플러그인의 도움으로 보다 쉽게 개발을 진행할 수 있습니다. 어떤 플러그인이 있고 그것이 어떤 역할을 하는지에 대해서 정리해 보았습니다. Kotlin Plugin 1234plugins { kotlin("plugin.spring") version "1.4.32" kotlin("p......

Ktlint 코드 스타일 검사

ktlint는 Kotlin의 공식 가이드 기반으로 코드 스타일을 검사해 주는 도구입니다. gradle plugin을 통해서 보다 쉽게 설정할 수 있는데 해당 부분에 대해서 포스팅하겠습니다. ktlint-gradle jlleitschuh-ktlint-gradle 그레이들 플러그인 중에서 가장 많이 사용하는 jlleitschuh-ktlint-gradle으......

Batch Insert 성능 향상기 2편 - 성능 측정

JPA + MySQL + GenerationType.IDENTITY 조합으로는 Batch Insert를 사용할 수 없습니다. 자세한 내용은 Batch Insert 성능 향상기 1편 - With JPA에서 자세하게 정리했습니다. JPA의 단일 insert와, batch insert의 성능적인 차이가 얼마나 발생하는지 측정해보고 batch insert를 ......