-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
✅ PR
#12
📝 Description
배경
- 현재 Redis Lua Script를 통해 동시성 제어에는 성공했으나, 요청 처리 과정에서 DB Insert(I/O)가 동기적으로 수행되어 트래픽 급증 시 응답 지연 및 DB 커넥션 고갈 현상이 나타남
- 시스템 장애 시 요청 유실 가능성이 존재
목표
- 비동기 처리: 쿠폰 발급 요청을 Kafka 토픽으로 발행(Publish)하고 즉시 응답하여 Throughput을 극대화
- 부하 분산: DB 쓰기 작업을 Consumer가 처리하게 하여, 트래픽 피크 시에도 DB가 다운되지 않도록 보호 (Backpressure 역할)
- 데이터 정합성: 최소 한 번 전송 특성을 가진 Kafka 환경에서 멱등성 패턴을 도입하여 중복 발급을 원천 차단
구현 시나리오
- Producer: Redis 재고 감소 성공 시, Event를 Kafka로 전송
- Consumer: Kafka에서 메시지를 읽어 실제 DB에 쿠폰 정보를 저장
- Idempotency: Consumer가 메시지를 처리하기 전, 이미 처리된 메시지인지 확인
📝 Todo
1. 인프라 설정
- Apache Kafka 및 KRaft Docker Compose 환경 구성
- Kafka Topic 생성 (예: coupon-issue-topic) 및 Partition 수 설정 (확장성 고려)
2. Producer 구현 (Web Layer)
- 기존 CouponService 로직 분리: DB 직접 저장 로직 제거
- Redis Lua Script 성공 시 Kafka Message 발행 로직 구현 (KafkaTemplate 활용)
- Kafka 발행 실패 시 예외 처리 (Fallback)
3. Consumer 구현 (Worker Layer)
- @KafkaListener를 사용한 Consumer 구현
- Event 객체를 받아 DB에 Coupon 저장
4. 멱등성 보장
- 메시지 중복 수신 시 방어 로직 구현
Metadata
Metadata
Assignees
Labels
No labels