193. 원자성 (Atomicity) - All or Nothing 모두 반영되거나 모두 취소 회복(Recovery) 관리자가 보장 부분 완료의 금지

핵심 인사이트: (192번 ACID 심화) 내가 쿠팡에서 100만 원짜리 맥북을 결제 버튼 눌렀다. 서버 안에서 내 카드 100만 원이 까졌다(성공). 근데 쿠팡 DB 서버가 갑자기 뻗어서 '배송 준비 중'으로 상태 업데이트를 못 했다(실패). 며칠 뒤 내 돈만 100만 원 날아가고 맥북은 안 온다! 빡쳐서 고소한다. "야! 결제(돈 빼기)랑 배송(주문 상태 변경)은 묶여있는 한 덩어리(트랜잭션)잖아! 반쪽만 성공해서 내 돈만 빼가면 어떡해! 서버가 뻗었으면 0.1초 만에 시간 여행(ROLLBACK)해서 내 카드 돈 빼간 것도 아예 무효로 돌려버려야지!!" 부분적인 성공이라는 최악의 끔찍한 오염 상태를 원천 차단하는 DB의 시간 되돌리기 마법, 원자성이다.

Ⅰ. 부분 완료(Partial Commit)의 재앙적 결과

  • 데이터베이스 쿼리는 1줄에 0.001초씩 순서대로 실행됩니다.
  • 트랜잭션 안에 5개의 UPDATE 쿼리가 있습니다. 3개까지 성공하고 4번째에서 문법 에러나 전원 차단(System Crash)이 발생합니다.
  • 만약 이 상태 그대로 멈춰버린다면? 데이터 앞부분은 2026년 데이터인데 뒷부분은 2025년 데이터가 섞여 있는 끔찍한 좀비 상태(데이터 무결성 붕괴)가 되어 영원히 복구할 수 없는 쓰레기 DB가 됩니다.

Ⅱ. 원자성 (Atomicity)의 절대 정의 🌟

  • 개념: All or Nothing. 트랜잭션을 구성하는 모든 연산은 데이터베이스에 '전부 다 남김없이 완벽하게 반영(COMMIT)'되거나, 아니면 애초에 아무 일도 일어나지 않았던 것처럼 '전부 싹 다 100% 취소(ROLLBACK)' 되어야 한다는 성질입니다.
  • 물리학에서 더 이상 쪼갤 수 없는 가장 작은 단위인 '원자(Atom)'처럼, 5개의 쿼리 묶음이 절대 쪼개지지 않고 운명을 함께하는 하나의 덩어리임을 뜻합니다.

Ⅲ. 원자성을 수호하는 자: 회복 관리자 (Recovery Manager) 🌟 핵심 🌟

DB 서버가 꺼졌다 켜졌을 때, 어떻게 에러 난 부분을 알고 시간을 되돌릴(ROLLBACK) 수 있을까요?

로그 파일 (Log / Journal)의 꼼꼼한 일기장

원자성의 핵심 흑마법은 **'모든 일은 실행하기 전에 무조건 일기장(Log)에 먼저 쓴다(WAL, Write-Ahead Logging)'**는 원칙에 있습니다.

  • 실행 전 기록: "나 지금부터 철수 통장에서 1만 원 뺀다!"라고 디스크의 블랙박스 로그(Log) 파일에 먼저 기록합니다.
  • 실행 및 에러: 기록 후 진짜로 통장 잔액을 UPDATE 하려는 순간 서버 전원이 확 나갑니다.
  • 부활 후 시간 여행 (UNDO): 서버가 다시 켜집니다. **회복 관리자(Recovery Manager)**가 벌떡 일어나 일기장(Log)부터 까봅니다. "어? 일기장에는 철수 돈 1만 원 뺀다고 적어놨는데, 뒤에 끝났다(COMMIT)는 도장이 없네? 이 트랜잭션은 중간에 터진 실패(Abort) 놈이구나!"
  • 회복 관리자는 즉시 로그에 적혀있던 '변경 전 과거 데이터 값(Before Image)'을 끄집어내어 DB에 그대로 덮어씌워 버립니다(UNDO 연산). 철수의 통장이 0.1초 만에 완벽하게 에러 나기 전 과거 시점으로 타임머신을 타고 되돌아갑니다.

Ⅳ. 원자성이 주는 개발자의 평화

  • 이 원자성 덕분에, 웹 서버 백엔드 개발자들은 수천 줄짜리 복잡한 송금 코드를 짤 때 "중간에 서버 죽으면 어떡하지?" 하고 고민하며 롤백 코드를 일일이 짤 필요가 없습니다.
  • 그냥 앞에 START TRANSACTION 적고, 맨 뒤에 COMMIT 하나 적어두면 끝입니다. 에러 나면 DB 엔진이 알아서 자기가 만든 더러운 흔적을 100% 완벽하게 지워주고 청소해 주어(원자성 보장), 개발자는 맘 편히 비즈니스 로직에만 집중할 수 있습니다.

📢 섹션 요약 비유: 데이터베이스의 **원자성(Atomicity)**은 외과 의사의 **'목숨을 건 심장이식 수술의 절대 규칙'**입니다. 수술(트랜잭션)은 [환자의 가슴을 열고 ➜ 낡은 심장을 떼어내고 ➜ 새 심장을 넣고 ➜ 가슴을 다시 꿰매는] 4개의 동작으로 이루어집니다. 원자성이란, 이 4개의 동작이 '100% 완벽하게 처음부터 끝까지 다 성공하여 환자가 걸어 나가거나(COMMIT)', 만약 두 번째 단계(낡은 심장 떼어내기)에서 병원 전기가 나갔다면 0.1초 만에 영화처럼 시간을 거꾸로 되감아서 **'애초에 환자 가슴에 칼을 대기 전 상태로 상처 하나 없이 100% 되돌려놓아라(ROLLBACK)'**라는 무서운 강박증 룰입니다. "가슴을 열어둔 채 수술 멈춤(부분 완료)" 상태로 환자를 방치해 죽게 만드는 일은 우주가 멸망해도 허락하지 않는, 데이터베이스 생명 유지의 절대 안전장치입니다.