250. 코디네이터 (Coordinator)와 참여자 (Participant) - 2단계 커밋 2PC 분산 트랜잭션 관리자 단일 장애점(SPOF) 글로벌 커밋 롤백 노드 통신
핵심 인사이트: (249번 2PC의 무대 뒤 배우들) "야! 249번 2단계 커밋에서 명령 내리는 놈이랑 복종하는 놈이 있다고 했지? 이 놈들의 이름을 정확히 불러줘! 정중앙에서 확성기 들고 '1단계 장전해! 2단계 쏴!' 라며 생사여탈권을 쥐고 흔드는 절대 권력의 독재자를 **사령관(코디네이터 Coordinator)**이라 부른다! 그리고 사령관의 무전을 듣고 직접 쇳덩어리 디스크에 땀 뻘뻘 흘리며 데이터를 쑤셔 박고, 사령관이 '죽어!' 하면 즉시 롤백 치며 할복자살해야 하는 불쌍한 노예 노드들을 **참여자(파티시펀트 Participant)**라 부른다!! 룰은 하나야. 사령관(코디네이터) 1명이 뻗으면 참여자 100만 명은 스스로 아무 결정도 못 내리고 사령관이 예토전생할 때까지 숨도 못 쉬고 자물쇠를 꽉 쥔 채로 피 말려 죽는 구조다!!" 분산 트랜잭션을 굴리는 절대 독재자와 수동적인 기계 부품들의 슬픈 관계학이다.
Ⅰ. 분산 환경의 분업 체계
- 분산 트랜잭션(MSA 등)은 수십 개의 독립된 데이터베이스가 맞물려 돌아갑니다.
- 10개의 DB가 서로 "네가 해라" 하며 평등하게 싸우면(P2P 구조) 배가 산으로 갑니다.
- 무조건 교통정리를 해주는 '단 1명의 절대 지휘관'과, 명령을 수행하는 '다수의 병사' 구조로 역할을 찢어놔야 원자성(Atomicity)이 지켜집니다.
Ⅱ. 코디네이터 (Coordinator) 🌟 "절대 권력의 사령관" 🌟
- 역할: 분산 트랜잭션의 시작과 끝을 주관하며, 모든 참여자에게 1단계(Prepare)와 2단계(Commit/Rollback) 메시지를 쏘고, 투표 결과를 취합해 **글로벌 최종 결정을 내리는 단일 통제 센터(Transaction Manager)**입니다.
- 특권: 참여자들이 보낸 "나 준비됐어(Ready)!" 99표와 "나 죽었어(Abort)!" 1표를 받아들고, 단 1표라도 Abort가 섞여 있으면 주저 없이 [글로벌 롤백(Global Rollback)] 버튼을 눌러버리는 최종 심판관입니다.
Ⅲ. 참여자 (Participant) 🌟 "결정권이 없는 쇳덩어리 병사" 🌟
- 역할: 코디네이터의 명령을 무전으로 받아, 자기가 맡은 구역의 데이터베이스(서울 DB, 뉴욕 DB) 쇳덩어리에 진짜로 쿼리를 때리고 엑셀을 덮어쓰는(Resource Manager) 놈들입니다.
- 슬픈 운명 (수동성):
- 코디네이터가 "야! 1단계 엑셀에 적을 준비해(Prepare)!" 라고 합니다.
- 참여자
T1은 엑셀을 다 세팅하고 자물쇠(Lock)를 꽉 잠근 뒤 **"나 준비 완료(Ready)!"**라고 무전을 칩니다. - 절대 룰: 이
Ready무전을 코디네이터에게 쏘고 난 찰나의 순간부터, 참여자T1은 자기 스스로 독단적으로 COMMIT을 치거나 ROLLBACK을 칠 권한을 100% 영구 박탈당합니다!! 코디네이터가 "야 2단계! 이제 쏴라(Commit)!" 라고 허락 무전이 떨어질 때까지, 아무리 밖에서 고객들이 아우성을 쳐도 자물쇠(Lock)를 쥔 채로 영원히 뻗정다리로 멈춰 서서 기다려야 하는 노예 신세입니다.
Ⅳ. 코디네이터의 치명적 독: 단일 장애점 (SPOF) 🌟 핵심 기출 🌟
- SPOF (Single Point of Failure): 코디네이터 1명이 뻗으면 시스템 전체가 박살 나는 구조적 취약점.
- 재앙의 타임라인:
- 참여자 100명이 엑셀에 피 터지게 자물쇠(Lock)를 걸어놓고 사령관에게 "준비 완료(Ready)!" 무전을 쐈습니다.
- 사령관이 무전을 취합해서 "오케이 100명 다 찬성했군! 2단계 글로벌 COMMIT 발령!" 이라고 무전기의 마이크 스위치를 누르는 바로 그 찰나의 순간!! 사령관이 심장마비(서버 다운)로 죽어버렸습니다!!
- 참여자 100명은 사령관의 마지막 허락(Commit)을 듣지 못했습니다.
- 참여자들은 자물쇠를 풀 수 있을까요? 2PC 룰에 의해 절대 못 풉니다. 사령관이 살아나서 "야 아까 하던 거 COMMIT 쳐!" 라고 확인사살 해줄 때까지, 참여자 100명이 물고 있는 전 세계 은행의 100개의 데이터베이스 자물쇠(Lock)가 무기한 정지(무한 블로킹 Blocking)되어 글로벌 쇼핑몰 전체가 하얗게 멈춰버리는 지옥이 펼쳐집니다. (이 문제를 해결하려고 251번 3PC가 나오게 됩니다.)
📢 섹션 요약 비유: 코디네이터와 참여자의 관계는 오케스트라 무대의 **'독재자 지휘자와 눈가리개를 한 연주자들'**입니다. 2PC라는 끔찍한 교향곡을 연주할 때, 각 악기 연주자(참여자 Participant)들은 자기 악기(로컬 DB)만 연주할 줄 알지 옆 사람이 무슨 음을 내고 있는지 전혀 못 듣는 맹인들입니다. 연주자 100명이 활을 줄 위에 올려놓고 준비 동작을 끝내면(Prepare 단계 완료), 100명 모두가 숨을 죽인 채 정중앙 단상에 서 있는 지휘자(코디네이터 Coordinator)의 손끝만 미친 듯이 뚫어지라 쳐다봅니다(Ready 무전 송신 후 무한 대기). 지휘자는 100명이 다 준비된 걸 확인하고 허공에 지휘봉을 팍! 내려치며 "연주 시작(글로벌 Commit)!"을 외칩니다. 그제야 100명이 동시에 현을 긁어냅니다. 만약 1명이라도 줄이 끊어져서 낑낑대면(Abort), 지휘자는 지휘봉을 꺾으며 "전체 연주 중단(글로벌 Rollback)!"을 선언해 완벽한 하모니(원자성)를 통제합니다. 하지만 이 구조의 가장 무서운 점은, 연주자 100명이 땀을 뻘뻘 흘리며 활을 올려놓은 그 찰나의 1초(Lock 점유 대기 상태)에, 정중앙의 지휘자가 심근경색으로 픽 쓰러져 죽어버린다면?! 연주자 100명은 누구 하나 "야 그냥 우리끼리 연주하자"라고 나서지 못하고(결정권 0%), 지휘자가 응급실에서 심폐소생술로 살아 돌아와 다시 지휘봉을 들 때까지 무대 위에서 영원히 굳어버린 동상(무한 블로킹)이 되어버리는 무자비한 상명하복의 비극적 통제 구조입니다.