Diary

XA Transaction :

윤듀2 2025. 3. 24. 00:32

개요

XA Transaction을 관리하는 일은 어렵다.. 여러 개의 resource들을 하나의 논리적 트랜잭션으로 묶어 관리할 때 XA Transcation을 사용한다. 보통 쓰는 Local Transaction과 달리 트랜잭션 매니저(TM)가 세션을 맺게 되는데 보통 XA 프로토콜을 지원하는 트랜잭션 매니저(TM)로는  JTA(Java Transaction API), Bitronix, Atomikos, Narayana이 있다. 

Mule에서는 Bitronix Transaction Manager를 사용한다. Bitronix 사용하면 application 재시작시 중단된 트랜잭션을 자동으로 복구과정을 실행한다.

 

XA vs Local Transaction 비교

구분 XA (Global Transaction) non-XA (Local Transaction)
트랜잭션 범위 여러 개의 DB, 서비스, 시스템을 하나의 트랜잭션으로 묶음 (Global Transaction) 단일 DB 내에서만 트랜잭션 관리 (Local Transaction)
Transaction Manager 사용 여부 Transaction Manager이 트랜잭션을 조정하고, XA 인터페이스를 통해 DB와 통신 Transaction Manager 없이 AP가 직접 DB와 트랜잭션을 관리
서비스 호출 구조 tx_begin()
→ xa_start()
→ xa_commit() 또는 xa_rollback()
BEGIN TRANSACTION
→ COMMIT() or ROLLBACK()
클라이언트 트랜잭션 조정 클라이언트에서 여러 서비스 호출을 하나의 트랜잭션으로 묶을 수 있음 (tpbegin() 사용) 개별 서비스 단위로만 트랜잭션을 관리할 수 있음
주요 특징 - 트랜잭션이 여러 시스템(DB, MQ 등)에 걸쳐 동작 가능
- All-or-Nothing 보장 (전체 성공이거나 실패거나)
- 2PC (Two-Phase Commit) 사용
- 하나의 서비스 안에서만 트랜잭션 처리
- 성능이 빠름 (오버헤드 적음)
장점 ✅ 여러 시스템에 걸친 트랜잭션을 하나로 관리
✅ 클라이언트가 트랜잭션을 조정할 수 있음
✅ 트랜잭션 일관성 보장 (데이터 정합성 유지)
✅ 성능이 빠름 (XA 대비 25% 정도 TPS 향상)
✅ 오버헤드가 적음 (TMS를 거치지 않음)
✅ 단순한 구조로 운영이 쉬움
단점 ❌ 성능 저하 (약 25% 감소, TPS 감소)
❌ 설정이 복잡함 (TMS, XA 인터페이스 필요)
❌ 추가적인 리소스(GTT, TLOG) 필요
❌ 트랜잭션 범위가 개별 서비스로 제한됨
❌ 여러 개의 서비스 호출을 하나의 트랜잭션으로 묶을 수 없음
사용 사례 - 여러 DB, 서비스, 메시지 큐(RabbitMQ, Kafka) 등을 하나의 트랜잭션으로 묶어야 할 때
- 클라이언트가 직접 트랜잭션을 관리해야 할 때
- timeout이 필요한 트랜잭션
- 단일 DB 내에서만 트랜잭션을 수행할 때
- 성능이 중요한 경우
- 단순한 트랜잭션 관리가 필요한 경우

 

출처 : https://blog.naver.com/darkturtle/50032805306