1. 개요
이 보고서는 기존의 Spring 내장 이벤트 시스템을 사용하던 Reservation 도메인을 Kafka 기반의 이벤트 처리 구조로 전환한 리팩토링 과정을 정리한 문서이다.
이번 구조 개선의 핵심 목표는 다음과 같다.
- 비동기 이벤트 발행과 수신을 명확하게 분리하여 트랜잭션 경계를 명확히 한다.
- 서비스 간 결합도를 낮춰 MSA 환경으로의 이행 가능성을 확보한다.
- 향후 이벤트 저장소, 장애 복구, 메시지 재처리 등의 고도화를 위한 기초 인프라를 마련하는 데 있다.
이를 위해 Kafka의 Producer, Consumer, Topic 개념을 Reservation 도메인에 적용하였고 기존 구조와의 차이점, 장단점, 실제 로그 흐름 등을 문서화하였다.
2. Kafka란?
Apache Kafka는 대용량의 실시간 데이터를 빠르고 안정적으로 처리할 수 있도록 설계된 분산 스트리밍 플랫폼이다. 일반적인 메시지 큐 시스템과 유사한 구조를 가지고 있지만, 훨씬 더 강력한 처리 성능과 확장성, 복구 능력을 제공한다.
Kafka는 다음과 같은 특징을 갖는다:
- 고성능 : 초당 수십만 건 이상의 메시지를 처리할 수 있으며, 디스크 기반 로그를 사용하여 데이터 유실을 방지한다.
- 확장성 : 여러 노드로 구성된 클러스터로 수평 확장이 가능해, 트래픽 증가 시에도 안정적인 처리 성능을 유지할 수 있다.
- 내구성 및 복원력 : 메시지는 디스크에 저장되고, 브로커 간 복제를 통해 데이터 손실을 최소화한다.
- 비동기 메시징 : 발행자(Producer)와 구독자(Consumer)가 독립적으로 동작할 수 있어 느슨한 결합 구조를 형성한다.
- 다양한 소비 방식 : 단일 메시지를 여러 Consumer Group이 독립적으로 소비할 수 있어 유연한 아키텍처 설계가 가능하다.
2.1 Kafka의 주요 구성 요소