문제 상황 슬랙 클론 프로젝트는 MSA(Microservice Architecture)로 구성되어 있습니다. workspace-service에서 워크스페이스를 생성하면, Kafka를 통해 이벤트를 발행하여 interaction-service가 기본 채널을 생성하는 구조입니다. 이때, interaction-service의 채널 생성 로직이 실패할 경우, 워크스페이스는 생성되었지만 채널은 없는 데이터 불일치(Inconsistency) 상태에 빠지게 됩니다.
구현 목표
- 여러 서비스에 걸친 비즈니스 로직의 최종적 데이터 일관성을 보장합니다.
- 단순히 실패 처리에서 끝나는 것이 아니라, 일시적인 장애에 대응할 수 있는 자동 재시도 메커니즘을 구현하여 시스템의 회복탄력성(Resilience)을 높입니다.
- 실패한 데이터가 사용자에게 노출되지 않도록 하여 안정적인 사용자 경험을 제공합니다.
1단계: 상태 기반 트랜잭션 관리 도입
가장 먼저, 워크스페이스의 생성 과정을 추적하기 위해 status 필드를 도입합다.
Workspace
엔티티에 status
및 retryCount
필드 추가
2단계: 보상 트랜잭션 처리를 위한 Kafka 컨슈머 구현
interaction-service의 처리 결과를 수신하여 Workspace의 상태를 업데이트합니다.
InteractionChannelStatusUpdate
DTO 생성
InteractionChannelEventConsumer
생성
3단계: 자동 재시도 메커니즘 구현 (Spring Scheduler)
일시적인 장애에 대응하기 위해, 실패한 트랜잭션을 자동으로 재시도하는 스케줄러를 구현합니다.
WorkspaceRetryScheduler
생성