이번 주의 핵심 목표는 핵심 도메인의 상태 전이를 기준으로 트랜잭션 경계를 재설계하고, 이벤트 기반으로 도메인 간 협업을 비동기화하여 실시간성과 복원력을 동시에 확보하는 구조를 구현 및 검증하는 것이었다.
이를 위해 다음과 같은 도메인 이벤트 체계와 상태 기반 설계를 적용하고, 이벤트 실패 보상 흐름까지 포함한 구조적 실험을 진행했다:
결제 성공 → 주문 CONFIRMED → 상품 랭킹 등록 → 외부 전송 까지 이벤트 체이닝 구현OrderConfirmationFailedEvent 로 보상 트리거 설계@TransactionalEventListener(AFTER_COMMIT) + @Async 기반 비동기 리스닝 구조 적용1. 결제 성공 시 → OrderConfirmedEvent 발행
2. 주문 CONFIRMED → ProductSalesRankRecordedEvent, OrderExportRequestedEvent 발행
3. 각 이벤트는 AFTER_COMMIT + Async 리스너에서 소비
4. 실패 시 OrderConfirmationFailedEvent 로 보상 이벤트 분리
Awaitility를 활용한 비동기 리스너 대기| 테스트명 | 검증 포인트 |
|---|---|
charge_shouldRecordBalanceHistory | 잔액 충전 → 이력 저장 도메인 이벤트 분리 검증 |
should_process_payment_successfully_and_confirm_order | 결제 성공 → 주문 상태 변경 → 통계/외부 전송 이벤트 체이닝 정상 동작 |
📌 통합 테스트 실행 로그에서 도메인 이벤트 등록, 리스너 실행 로그까지 추적
@TransactionalEventListener(AFTER_COMMIT) + @Async 구조는 핵심 트랜잭션과 후속 I/O 작업을 분리하면서도 흐름을 연결시켜준다.XXXFailedEvent를 별도 정의하고 로깅하는 방식은 Kafka가 없는 상황에서도 복원력을 확보하는 현실적인 대안이 될 수 있다.| 흐름 | 핵심 설계 | 기술 |
|---|---|---|
| 결제 성공 → 주문 확정 | 상태 기반 이벤트 트리거 | OrderConfirmedEvent |
| 주문 확정 → 통계/전송 | 이벤트 체이닝 | ProductSalesRankRecordedEvent, OrderExportRequestedEvent |
| 실패 보상 처리 | 실패 이벤트 발행 및 로깅 | OrderConfirmationFailedEvent |
| 트랜잭션 경계 최소화 | 핵심만 @Transactional, 나머지는 이벤트 리스너 | AFTER_COMMIT + @Async |
| 통합 테스트 | Awaitility 기반 이벤트 흐름 검증 | E2E 시나리오 |
지난 주 목표는 도메인 이벤트 기반 설계 적용 및 트랜잭션 경계 분리였으며, 아래 항목을 통해 실질적으로 달성했다.
OrderConfirmationFailedEvent) 도입다만 Kafka나 Outbox 기반의 실제 MSA 구조에서의 전파 설계는 아직 적용하지 못했다. 실패 이벤트를 DB 테이블에 저장하거나 Retry Queue를 활용한 자동 복구 설계는 향후 과제로 남는다.
안녕하세요 준영님 5팀 최은강입니다. 성지순례하다가 wil까지 찾아보게됐는데요. 와 과제도 벅찬데.. WIL까지 너무 꼼꼼하게 하신거같아서 wil을 등한시한 제자신을 반성하게되네요 ㅠㅠ.. 블로그글도 PR도 참 너무 잘쓰시고 고민이 깊은걸 느껴졌습니다. 경력이 1년6개월이라고하셨지만.. 정말 1년6개월 경력이 의심할정도로 너무 실력자셔서 놀랐습니다.
경력만으로 개발능력과 문제해결능력을 평가의 잣대로 할수없단걸, 준영님의 글과 PR, 코드를 통해 깨닫게됩니다.
준영님은 과제를 제출을떠나서 뭔가 해당주차의 본질을 파악하시는거같단 생각이들어서 감탄하면서 봤습니다.
과제통과에 BP에 집착한 제자신을 부끄러울정도네요. 과제 통과와 BP, 뱃지때문에 나를 갉아가면서 지쳐가던중에 나는 무엇을 위해서 뭔가 중요한게 빠진거같았고, 난 무엇을 위해 항해를 했지? 라는 생각이 절로들더군요.
wil를 보고서처럼 꾸준히 작성하신 성실함과 빠르게 수용하려는 집중력은 정말 부럽고 저도 닮아지고싶단 생각이 듭니다.
매번 해당주차에 대한 과정을 글로 기록하는모습이 인상깊어서 코멘트를 남겻네요.
저도 늦었지만 그래도 준영님글과 마인드를 참고하여 글을 작성해나가고싶어집니다.ㅎㅎ