📌 개요
program-service 의 도메인 이벤트를 queue-service 가 Kafka 로 수신해 처리한다.
program 의 생명주기 (생성 / 시각 변경 / 취소) 에 따라 queue-service 의 대기열 상태가 일관되게 유지되어야 한다. 직접 호출 (REST) 대신 Kafka 이벤트로 느슨한 결합을 유지한다.
🎯 완료 기준
- Kafka 이벤트 3 종의 Consumer 가 구현되어 있다.
- program.created
- program.time.updated
- program.cancelled
- 각 이벤트 처리 시 queue-service 의 도메인 액션이 정상 동작한다.
- 같은 이벤트의 중복 수신 시 idempotency 보장 (Kafka offset 기반).
- mock 이벤트 발행으로 통합 테스트 통과.
🧩 작업 범위
🏗️ 설계 요약
통신 흐름
program-service → Kafka (program.* topics)
↓
Kafka Listener (Infrastructure)
↓
ProgramEventService (Application)
↓
도메인 액션 (Domain)
이벤트 페이로드
// program.created
{ "programId": "uuid", "openAt": "...", "closeAt": "...", "status": "DRAFT" }
// program.time.updated
{ "programId": "uuid", "openAt": "...", "closeAt": "..." }
// program.cancelled
{ "programId": "uuid", "status": "CANCELLED" }
도메인 액션
| 이벤트 |
queue-service 액션 |
| program.created |
program 의 메타 정보 (openAt, closeAt, status) Redis 에 기록 |
| program.time.updated |
메타 정보 갱신 |
| program.cancelled |
program 의 활성 토큰 모두 정리 (Sorted Set / Hash / 역인덱스) + admit 중단 |
Idempotency
Kafka 의 Consumer offset 기반 (Spring Kafka 표준 처리). 별도 eventId 검출 X (MVP).
미래 운영 단계: 페이로드에 eventId 추가 + Redis 의 처리 이력 저장.
Redis 키 추가
queue:program:{programId}:meta = JSON ({ openAt, closeAt, status })
기존 키:
- queue:program:{programId} (Sorted Set, 대기열)
- queue:token:{tokenId} (Hash, 토큰 데이터)
- queue:user:{userId}:program:{programId} (String, 역인덱스)
🔗 참고 자료
- 참고 자료 혹은 이미지 삽입 등이 필요한 경우, 이곳에 작성해주세요.
📌 개요
program-service 의 도메인 이벤트를 queue-service 가 Kafka 로 수신해 처리한다.
program 의 생명주기 (생성 / 시각 변경 / 취소) 에 따라 queue-service 의 대기열 상태가 일관되게 유지되어야 한다. 직접 호출 (REST) 대신 Kafka 이벤트로 느슨한 결합을 유지한다.
🎯 완료 기준
🧩 작업 범위
🏗️ 설계 요약
통신 흐름
이벤트 페이로드
도메인 액션
Idempotency
Kafka 의 Consumer offset 기반 (Spring Kafka 표준 처리). 별도 eventId 검출 X (MVP).
미래 운영 단계: 페이로드에 eventId 추가 + Redis 의 처리 이력 저장.
Redis 키 추가
queue:program:{programId}:meta = JSON ({ openAt, closeAt, status })
기존 키:
🔗 참고 자료