반응형
1. 도메인 분리를 왜 해야할까?(feat. 트랜젝션 분리)
1) 트랜잭션 범위가 커질수록 장애 전파가 기하급수적으로 증가
- 배송 DB 장애 → 결제 실패
- 결제 PG 지연 → 주문 생성 실패
- 하나의 느린 컴포넌트가 전체를 멈춤
"하나만 죽어도 다 같이 죽는 구조”
2) 긴 트랜젝션으로 인해 락 경쟁과 성능 저하
- 오랜 락 유지(대기 시간 발생)
- 동시성 감소
- TPS 처리량 하락
"특히 결제·재고·배송 같은 핵심 도메인이 하나의 트랜잭션에 묶이면 성능상 병목지점 발생"
2. Kafka 를 이용한 도메인 분리방법은?
1) 각 도메인은 각 도메인에서 처리해야할 것만 책임진다
- 자기 제이터의 정합성을 책임진다
- 자기 트랜젝션의 성공 실패 영역만 책임 진다
"Order" → Order 트랜잭션
"Payment" → Payment 트랜잭션
"Delivery" → Delivery 트랜잭션
2) 이를 동기 호출로 처리 시 문제점
- timeout 발생 시 처리결과에 대한 불확신
- 긴 트랜젝션으로 인해 위와 같은 동일이슈 발생
- 장애도 함께 전파됨
- 결합도 상승
3) Kafka 이용 시
- 트랜젝션으로 묶지 않음
- 성공/실패 여부를 강제하지 않는다
- 결과여부만 다음 또는 이전으로 전달한다
4) 포기하고 가는 영역
- 즉시 정합성(최후의 정합성만을 보장)
- 한번의 처리만으로 성공보장
- 간단한 소스코드
3. 추가로 처리해야할 사항은?
- 최후의 정합성보장
- 로직으로 트랜젝션 처리
반응형
'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
| 10) Kafka 기반 도메인 분리(3) - Saga 패턴이란? (0) | 2026.01.14 |
|---|---|
| 10) Kafka 기반 도메인 분리 (4) Transactional Outbox 패턴이란? (0) | 2026.01.13 |
| 10) Kafka 기반 도메인 분리 (1) Kafka 란? (0) | 2026.01.13 |
| 9) Spring 캐시 (4) Redis 로 캐싱 관리 (0) | 2025.09.20 |
| 9) Spring 캐시 (3)redis란? (1) | 2025.09.20 |