본문 바로가기
Kotlin Spring/Kotlin Spring 강의 내용

10) Kafka 기반 도메인 분리 (2) 결제 시 쿠폰도메인을 완전하게 분리하기

by Bill Lab 2026. 1. 13.
반응형

1. 도메인 분리를 왜 해야할까?(feat. 트랜젝션 분리)

     1) 트랜잭션 범위가 커질수록 장애 전파가 기하급수적으로 증가

          - 배송 DB 장애 → 결제 실패

          - 결제 PG 지연 → 주문 생성 실패

          - 하나의 느린 컴포넌트가 전체를 멈춤

"하나만 죽어도 다 같이 죽는 구조”

 

     2) 긴 트랜젝션으로 인해 락 경쟁과 성능 저하

          - 오랜 락 유지(대기 시간 발생)

          - 동시성 감소

          - TPS 처리량 하락

"특히 결제·재고·배송 같은 핵심 도메인이 하나의 트랜잭션에 묶이면 성능상 병목지점 발생"

 

 

     

2. Kafka 를 이용한 도메인 분리방법은?

    1) 각 도메인은 각 도메인에서 처리해야할 것만 책임진다

         - 자기 제이터의 정합성을 책임진다

         - 자기 트랜젝션의 성공 실패 영역만 책임 진다

"Order" → Order 트랜잭션
"Payment" → Payment 트랜잭션
"Delivery" → Delivery 트랜잭션

 

    2) 이를 동기 호출로 처리 시 문제점

         - timeout 발생 시 처리결과에 대한 불확신

         - 긴 트랜젝션으로 인해 위와 같은 동일이슈 발생

         - 장애도 함께 전파됨

         - 결합도 상승

 

    3) Kafka 이용 시

         - 트랜젝션으로 묶지 않음

         - 성공/실패 여부를 강제하지 않는다  

         - 결과여부만 다음 또는 이전으로 전달한다

 

     4) 포기하고 가는 영역

         - 즉시 정합성(최후의 정합성만을 보장)

         - 한번의 처리만으로 성공보장

         - 간단한 소스코드

         

      

3. 추가로 처리해야할 사항은?

     - 최후의 정합성보장

     - 로직으로 트랜젝션 처리

반응형