11/18

졸용·2025년 11월 18일

TIL

목록 보기
116/144

🔹 분산 트랜잭션이란?

분산 트랜잭션(Distributed Transaction)은 여러 개의 독립된 시스템이나 데이터베이스에 걸쳐 하나의 트랜잭션을 일관성 있게 처리하는 기술을 말한다.

즉, 여러 서비스나 DB에서 각각 작업이 수행되더라도, 전체가 하나의 논리적 단위로서 모두 성공하거나 모두 롤백되어야 하는 상황에서 사용된다.

  • 트랜잭션(Transaction): 하나의 논리적 작업 단위로, ACID(Atomicity, Consistency, Isolation, Durability)를 만족해야 함

  • 분산 트랜잭션: 이 트랜잭션이 여러 시스템(서버, DB, 마이크로서비스 등) 에 걸쳐 수행되는 경우

    • 예시 상황:

      주문 서비스(OrderService) → 결제 서비스(PaymentService) → 재고 서비스(InventoryService)
      이 3개 서비스가 각각 다른 DB를 사용할 때,
      주문 생성 + 결제 승인 + 재고 차감이 모두 성공해야 “주문 완료” 상태로 일관성 있게 처리됨.



🔹 처리 방식 (2PC, 3PC)

🔸 2PC (Two-Phase Commit)

전통적인 분산 트랜잭션 프로토콜

  • Coordinator(조정자)Participant(참여자) 개념

  • 단계:

    1단계 – Prepare Phase

    • Coordinator가 모든 참여자에게 “준비됐는가?” 물어봄
    • 각 참여자는 로컬 트랜잭션을 준비 상태로 두고 “OK” 또는 “Fail” 응답

    2단계 – Commit Phase

    • 모든 참여자가 “OK” 응답 시 → Commit 명령
    • 하나라도 “Fail” 응답 시 → Rollback 명령

➡️ 장점: 일관성 보장
➡️ 단점: 성능 저하, Coordinator 장애 시 교착 위험, 네트워크 지연 시 대기 상태 발생


🔸 3PC (Three-Phase Commit)

2PC의 단점을 보완하려는 확장 버전
“Prepare → Pre-Commit → Commit” 3단계로 나누어 장애 대응 향상

하지만 복잡하고 실무에서 거의 사용되지 않음.



🔹 현대 MSA 환경에서의 대안

MSA(Microservice Architecture)에서는 2PC를 거의 사용하지 않는 것 같다.
이유는 다음과 같다:

  • 마이크로서비스는 독립 배포, 독립 DB를 원칙으로 하기 때문에
    DB 간 글로벌 트랜잭션 관리가 어렵고 성능 저하가 심함
  • 분산 락(Distributed Lock)이나 XA 트랜잭션은 확장성 저하

➡️ 그래서 다음과 같은 대체 패턴을 사용한다 👇

🔸 대체 패턴 (현대적 접근)

패턴설명사용 예
Saga Pattern전체 트랜잭션을 여러 로컬 트랜잭션으로 나누고, 실패 시 보상(Compensation) 트랜잭션으로 되돌림주문 생성 → 결제 → 재고 차감 → 실패 시 “결제 취소”, “주문 취소”
Eventual Consistency (최종 일관성)완전한 동기 일관성이 아니라, 시간차를 두고 일관성 유지Kafka, RabbitMQ 기반 이벤트 전달
Outbox Pattern로컬 DB에 이벤트 로그(Outbox 테이블)를 기록 후 별도 프로세스로 브로커에 전달JPA + Kafka 조합
TCC (Try-Confirm-Cancel)예약 기반 트랜잭션, 사전 예약(Try) → 확정(Confirm) → 취소(Cancel) 단계로 제어금융 거래, 항공 예약 등


🔹 정리

구분전통적 방식현대적 방식
트랜잭션 관리2PC (XA 트랜잭션)Saga, Outbox, TCC
일관성 모델강한 일관성 (ACID)최종 일관성 (BASE)
장점데이터 완전 일관성확장성, 성능 우수
단점확장성 낮음, 복잡복잡한 보상 로직 필요

🔸 핵심 요약

분산 트랜잭션 = 여러 시스템에서 하나의 트랜잭션처럼 처리하려는 시도

전통적 방법: 2PC (Coordinator 기반)

현대적 방법: Saga / Outbox / TCC 패턴으로 “보상 트랜잭션 + 최종 일관성” 방식 사용

profile
꾸준한 공부만이 답이다

0개의 댓글