### ✅ 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. 멱등성 보장 - [ ] 메시지 중복 수신 시 방어 로직 구현
✅ PR
#12
📝 Description
배경
목표
구현 시나리오
📝 Todo
1. 인프라 설정
2. Producer 구현 (Web Layer)
3. Consumer 구현 (Worker Layer)
4. 멱등성 보장