Skip to content

[feat][queue-service] program 도메인 이벤트 처리 (Kafka Consumer) #27

Description

@rlaxxwls13

📌 개요

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 이벤트 발행으로 통합 테스트 통과.

🧩 작업 범위

  • Kafka 의존성 추가 (spring-kafka)
  • application.yml 의 Kafka Consumer 설정
  • 이벤트 도메인 모델 작성
    • ProgramCreatedEvent
    • ProgramTimeUpdatedEvent
    • ProgramCancelledEvent
  • Infrastructure 레이어 (Kafka Listener)
  • Application 레이어 (ProgramEventService)
  • 도메인 액션 구현
    • program.created: 메타 정보 기록 (큐 활성화 X)
    • program.time.updated: 메타 정보 갱신
    • program.cancelled: 활성 토큰 모두 정리 + admit 중단
  • Idempotency 보장 (Kafka offset 기반)
  • 통합 테스트

🏗️ 설계 요약

통신 흐름

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, 역인덱스)

🔗 참고 자료

  • 참고 자료 혹은 이미지 삽입 등이 필요한 경우, 이곳에 작성해주세요.

Metadata

Metadata

Assignees

Labels

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions