이벤트 기반 아키텍처를 구현할때 고민해야될 포인트는 DB 트랜잭션과 이벤트(메시지) 발행의 원자성 보장이다. 이에 대한 해결 방법으로 Transactional Outbox 패턴에 대해 정리해보자. Transactional Outbox 패턴이란? 이벤트 기반 아키텍처를 적용할때 로컬 트랜잭션과 이벤트(메시지) 발행 간의 원자성 보장 문제를 해결하기 ...
데이터베이스 인덱스 조각화(Fragmentation)
데이터베이스 테이블의 인덱스를 활용한다해도 데이터가 계속 쌓이다보면 쿼리 속도가 느려질 수 있다. 이와 관련된 인덱스 조각화(Fragmentation) 문제와 해결 방법 및 이를 지연시킬 수 있는 방법에 대해 정리해보자. 1. 인덱스 조각화(Fragmentation)란? MySQL(MariaDB)에서 인덱스 페이지가 비효율적으로 배치되는 현상을 말...
Kafka DeadLetter 관리
MSA 환경에서 이벤트 기반 아키텍처(EDA)를 적용할때 Kafka가 주로 사용되곤 한다. 카프카 Consumer 메시지 처리 실패시 dead-letter를 어떻게 관리하고 재시도 전략을 수립하면 좋을지 깊게 고찰해보자. (잘못된 내용 및 피드백은 코멘트로 남겨주시면 최대한 빠르게 확인해보겠습니다😃) 가장 간단하게는 spring-kafka에서 제공...
Redis 특징
Redis는 Remote Dictionary Server를 뜻하며 key-value 기반의 인메모리 데이터 저장소이다. 대용량 트래픽을 처리하기 위해 자주 사용되는 Redis의 대표적인 특징들을 알아보자. 1. key-value 구조의 비관계형 데이터베이스 RDB와는 다르게 관계가 없는 비정형 데이터를 관리한다. 2. 싱글 스레드 기반 Redis...
Redis 동작 원리
Redis는 실무에서 캐싱, 동시성 문제 해결을 위한 분산 락, Rate Limit, 이벤트 Pub/Sub 모델 기반 브로드캐스팅 등 다양하게 활용되고 있다. 인메모리(RAM) 기반의 key-value 구조로 하드디스크로부터 조회하는 것에 비해 뛰어난 조회 성능을 가지고 있다. 또한, 싱글 스레드 기반으로 하나의 명령씩 실행이 가능하기에 동시성 문제...
MSA 환경에서의 분산 트랜잭션 관리
MSA 환경에서 고민해야되는 포인트는 도메인별로 분산된 DB를 가질때의 트랜잭션 관리다. 단일 DB에서 제공하는 트랜잭션을 활용할 수 없다보니 전체적인 데이터 일관성과 무결성을 보장하기 위한 고민이 필요하다. 이를 해결하기 위한 대표적인 방식인 2PC 프로토콜(2Phase Commit)과 Saga Pattern에 대해 알아보자. 2PC(2Phas...
Spring Data JPA Batch Insert의 사실과 오해
SpringBoot + JPA + MariaDB(10.6 이상) 환경에서 JPA 엔티티 ID 생성 전략을 IDENDITY를 적용하면 batch insert를 사용할 수 없다는 내용은 구글링을 통해 쉽게 찾을수 있다. IDENTITY 전략은 auto-increment로 PK 값을 자동으로 DB 에 의존하여 채번하는 방식이다. JPA 엔티티를 ...
DB Lock 알아보기 1편
제품을 운영하다보면 Deadlock found when trying to get lock, Lock wait timout exceeded와 같은 DB 동시성 이슈를 마주할 수 있게 된다. 보통 여러 트랜잭션이 동시에 동일 데이터에 대한 select, update 작업들을 수행할때 발생하게 되는데 이와 관련해서 DB Lock에 대해 정리해보고자 한다. ...
Kafka 기반 대규모 데이터 동시성 최적화: Request-Reply 패턴 활용 사례
우아콘24의 ‘Kafka 기반 대규모 데이터 동시성 최적화: Request-Reply 패턴 활용 사례’’ 에 대한 학습 내용을 정리하기 위한 목적의 TIL 포스팅입니다.🙆♂️ 도입 배경 주문이 급증하는 지역에 소수의 라이더가 존재한다고 가정했을때 고객들의 배송이 지연되는 현상이 발생하게 됨 이때 시스템에선 ‘주문수 대비 라이더가 너...
[Java] Virtual Thread
우아한 테크 세미나 ‘Java의 미래, Virtual Thread’ 학습 내용을 정리하기 위한 포스팅입니다😀 1. 일반 Thread 모델 일반 스레드 모델은 다음과 같은 특징을 가진다. 플랫폼 스레드 OS에 의해 스케줄링 커널 스레드와 1대1 매핑 작업 단위 Runnable 애플리케이션은 커널 영역(OS), 유저 영역(...