<aside> <img src="attachment:8baa7f2e-4a62-4473-83a8-59bd9b0f34e9:ChatGPT_Image_2026년_6월_12일_오후_02_02_22.png" alt="attachment:8baa7f2e-4a62-4473-83a8-59bd9b0f34e9:ChatGPT_Image_2026년_6월_12일_오후_02_02_22.png" width="40px" />
</aside>
flowchart LR
subgraph Producer["Event Producer"]
RS[Reservation Service]
WS[Waiting Service]
RV[Review Service]
end
subgraph Outbox["Outbox Pattern"]
RO[p_reservation_outbox_events]
WO[p_waiting_outbox_events]
RVO[p_review_outbox_events]
end
subgraph Kafka["Kafka"]
RT[reservation.events.v1]
WT[waiting.events.v1]
RVT[review.events.v1]
end
subgraph Consumer["Event Consumer"]
NS[Notification Service]
SS[Store Service]
end
RS -->|예약 상태 변경| RO
WS -->|웨이팅 상태 변경| WO
RV -->|리뷰 생성/수정/삭제| RVO
RO -->|Outbox Publisher| RT
WO -->|Outbox Publisher| WT
RVO -->|Outbox Publisher| RVT
RT -->|예약 확정/취소/노쇼/방문| NS
WT -->|웨이팅 등록/호출/취소/입장/미입장| NS
RVT -->|평점 변경 이벤트| SS
NS --> NDB[p_notifications 저장]
NS --> SLACK[Slack 알림 발송]
SS --> STOREDB[p_stores 평점/리뷰 수 갱신]
SS --> REDIS[Redis 랭킹·캐시 갱신]
본 프로젝트의 Kafka 이벤트 연동은 중앙 Orchestrator가 전체 흐름을 제어하는 방식이 아니라, 각 서비스가 자신의 도메인 상태 변경 후 이벤트를 발행하고 필요한 서비스가 해당 이벤트를 구독하여 후속 작업을 수행하는 Choreography 방식으로 설계한다.
예를 들어 Reservation Service는 예약 확정·취소 이벤트를 발행하고, Waiting Service는 웨이팅 호출·취소·입장 완료 이벤트를 발행한다. Notification Service는 해당 이벤트를 구독하여 알림을 생성하고 Slack 알림을 발송한다. 이를 통해 예약·웨이팅 서비스는 알림 발송 성공 여부에 직접 의존하지 않고, 서비스 간 결합도를 낮출 수 있다.
Waiting Service
Reservation Service
Notification Service
Store Service
Review Service
User / Auth Service
주요 기능(발표)