회사에서 사용하는 매퍼 중 이름 뒤에 XA가 붙은 것이 있는데, 해당 매퍼는 서로 다른 여러 DB에 대한 트랜잭션을 하나로 묶을 때 사용하고 있다.
이름 뒤에 XA가 무슨 뜻일지 궁금했다. 그래서 찾아봤다!!
분산 트랜잭션
- 여러 개의 노드 또는 다른 종류의 데이터베이스가 참여하는 하나의 트랜잭션을 말한다.
- Distributed Transaction
XA
- X/Open DTP(Distributed Transaction Processing) 규약
- XA는 Two-Phase commit을 이용하여 분산 트랜잭션을 처리한다.
Two-phase commit
- 분산 환경에서 트랜잭션의 무결성을 보장하기 위해서 사용하는 커밋 방법
- First Phase와 Second Phase가 있다.
- 사용자의 요청을 받아 트랜잭션을 시작한 노드를 코디네이터 노드라고 한다.
- 코드네이터 노드에서부터 시작해서 같은 특정 트랜잭션을 수행하는 각 노드들이 커밋할 수 있도록 한다.
First Phase
- Prepare Phase
- 커밋을 준비하는 단계
- 다음 두 단계로 세분화할 수 있다.
- send "prepare"
- reply "prepared"
- send "prepare": 코디네이터 노드로부터 각 노드는 커밋을 준비하라는 메시지를 받는다.
- reply "prepared": 각 노드는 커밋이 가능한지 검사 후 코디네이터 노드에게 커밋이 준비되었다는 메시지를 전달한다.
Second Phase
- Commit Phase
- 실제로 커밋한 기록을 저장하는 단계
- 다음 두 단계로 세분화할 수 있다.
- send "commit"
- reply "committed"
- send "commit": 코디네이터 노드가 모든 노드에서 커밋이 준비되었다는 메시지를 받았을 때, 실제로 커밋을 실행하라는 메시지를 각 노드에 보낸다.
- reply "committed": 각 노드는 커밋 후 커밋이 완료되었다는 메시지를 코디네이터 노드에 보낸다.
참고
https://heni.tistory.com/10
https://technet.tmaxsoft.com/upload/download/online/tibero/pver-20150504-000001/tibero_dev/ch04.html