메시지 큐 시스템을 다룰 때 중요하게 고민해야되는 부분 중 하나는 ‘메시지의 중복과 유실 문제’이다. 이와 관련된 메시지 큐 시스템의 ‘메시지 전달 보장 방식’과 ‘Kafka 에서 각각 어떻게 지원하는지’에 대해 알아보자. 메시지 전달 보장 방식(Message Delivery Semantics) 메시지 전달 보장 방식은 다음과 같은 3가지가 존재한...
Kafka 리밸런싱 방식과 파티션 할당 전략
Kafka에서 리밸런싱이란 컨슈머 그룹 내 컨슈머들의 파티션 할당이 변경되는 과정을 의미하며, 주로 다음과 같은 4가지 상황에서 발생한다. 1) 컨슈머 그룹에 새로운 컨슈머 추가 2) 기존 컨슈머가 컨슈머 그룹에서 제거 3) 구독중인 토픽에 새로운 파티션 추가 4) 컨슈머가 구독하는 토픽 변경 리밸런싱은 주로 애플리케이션 배포 시...
Transactional Outbox 패턴
이벤트 기반 아키텍처를 구현할때 고민해야될 포인트는 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에 대해 정리해보고자 한다. ...