-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
배경
Flash Sale 재고는 Redis에서 먼저 처리되므로, 영속 저장소와 운영 조회를 위해 별도의 event log와 projection이 필요하다.
이벤트는 at-least-once 전송을 전제로 하고, 컨슈머에서 멱등하게 처리해야 한다.
구현 내용
1. 이벤트 스키마 정의
필수 필드:
eventIdeventType(RESERVED,CONFIRMED,RELEASED,EXPIRED)skuIdorderId(nullable)reservationIdqtyversionoccurredAt
2. event log 테이블 구현
예시:
inventory_event_logevent_iduniquesku_idreservation_idorder_idevent_typeqtyversionoccurred_at
3. projection 테이블 구현
예시:
inventory_projectionsku_idavailablereservedsoldlast_version
4. Consumer 구현
- Stream/Kafka에서 이벤트 consume
- DB transaction 내에서:
- event log insert 시도
- 이미 존재하면 중복 이벤트로 간주
- 없으면 projection 갱신
- DB commit 후 ack
5. 순서 보장/버전 검증
version이 뒤집힌 이벤트 감지last_version보다 낮은 이벤트는 무시 또는 별도 보관- 순서 꼬임 케이스 로깅
체크리스트
- 이벤트 스키마 정의
-
inventory_event_log테이블 생성 -
inventory_projection테이블 생성 - consumer 구현
- eventId 멱등 처리 구현
- version 검증 로직 구현
- commit 후 ack 처리 구현
- 중복 이벤트 테스트 작성
- 순서 역전 테스트 작성
의존관계
선행
- Flash Sale reservation 구현
- Flash Sale confirmation/release 구현
후행
- reconciliation / rebuild / 운영 대응 구현
작업 순서
- 이벤트 스키마 확정
- event log / projection 테이블 생성
- consumer 구현
- 멱등/버전 처리 추가
- 테스트 작성
완료 조건
- Redis 처리 결과가 RDB event log 및 projection에 반영된다.
- 중복 소비에도 projection이 깨지지 않는다.
- version 기반으로 순서 문제를 감지할 수 있다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels