192. 트랜잭션의 ACID 특성 - Atomicity Consistency Isolation Durability 데이터베이스 무결성 신뢰성 병행제어 회복 서술형 단골

핵심 인사이트: (191번 복습) 10만 줄짜리 코드를 짜서 은행 송금 시스템(트랜잭션)을 만들었다. 근데 서버가 정전되거나 해커가 동시에 접속해도 내 통장 잔고가 100% 안전하다고 어떻게 장담할까? "야! 수십 년 전 DB 천재 선배들이 '이 4가지 절대 규칙(ACID)'만 기계적으로 100% 지켜지게 소프트웨어를 짜놓으면, 운석이 떨어져도 데이터베이스는 절대 망가지지 않는다고 수학적으로 증명해 놨어!! 이 4개의 철칙이 바로 현대 모든 RDBMS(오라클, MySQL)가 세상의 돈줄(데이터)을 쥐고 흔들 수 있는 신뢰의 뿌리야!!" DB의 존재 이유이자 알파와 오메가, ACID다.

Ⅰ. ACID의 탄생과 의미

  • 1983년 안드레아스 로이터(Andreas Reuter) 등이 정립한, 데이터베이스 내에서 일어나는 모든 트랜잭션(작업 묶음)이 안전하게 수행되고 100% 신뢰할 수 있음을 보장하기 위해 반드시, 무조건적으로 충족해야 하는 4가지 핵심 속성의 약자입니다.
  • 이 4가지가 하나라도 깨지는 순간, 은행 잔고에 마이너스가 뜨고 데이터가 날아가는 파멸이 터집니다.

Ⅱ. ACID의 4대 철칙 완벽 해부 (면접/기출 100% 출제) 🌟 핵심 🌟

(각 항목의 자세한 원리와 구현 마법은 193~196번 문서에서 1개씩 깊게 팝니다.)

1. A (Atomicity, 원자성) - "모 아니면 도 (All or Nothing)"

  • 규칙: 트랜잭션 덩어리 안에 있는 10개의 연산(SQL 쿼리)은 모두 100% 완벽하게 성공(COMMIT)하여 반영되거나, 단 1개라도 에러가 나면 10개 전부가 하나도 실행되지 않은 상태로 아예 취소(ROLLBACK) 되어야 합니다.
  • "반쯤 성공했다(부분 완료)"는 말은 DB 사전엔 존재하지 않습니다. 물질을 쪼갤 수 없는 최소 단위인 '원자(Atom)'처럼 쪼갤 수 없는 하나의 운명 공동체라는 뜻입니다.

2. C (Consistency, 일관성) - "게임의 룰은 절대 깨지지 않는다"

  • 규칙: 트랜잭션이 시작되기 전에 데이터베이스가 정상(무결성 제약 조건 만족)이었다면, 트랜잭션이 지지고 볶고 끝나고 난 뒤에도 데이터베이스는 무조건 100% 룰에 맞는 정상 상태를 유지해야 합니다.
  • 예시: "계좌 잔고는 0원 미만이 될 수 없다"는 법(제약조건)을 걸어놨다면, 어떤 미친 출금 트랜잭션이 돌아가도 끝난 뒤에 잔고가 -10원(모순 상태)이 되는 일은 우주가 무너져도 막아내야 합니다.

3. I (Isolation, 격리성/고립성) - "너흰 나 없는 사람 취급해"

  • 규칙: 철수가 송금(트랜잭션 A)을 진행하고 있는 그 찰나의 중간 과정(연산 도중)에, 영희(트랜잭션 B)가 절대로 난입해서 철수가 만지고 있는 데이터를 훔쳐보거나 값을 바꿔치기할 수 없도록 완벽하게 투명 인간 격리(Lock) 처리해야 합니다.
  • 수백만 명이 동시에 접속해도, DB 입장에서는 마치 세상에 나 혼자만 접속해서 여유롭게 순서대로 일 처리(직렬화)하는 것처럼 느껴지게 만들어 줍니다.

4. D (Durability, 영속성/지속성) - "도장 찍었으면 영원하다"

  • 규칙: 트랜잭션이 "나 완료됐어!(COMMIT)"라고 성공 도장을 쾅 찍는 순간, 0.001초 뒤에 서버에 벼락이 떨어져 하드디스크가 타버리고 건물이 무너져도, 그 성공한 데이터(내 잔고 1억)는 지구 끝까지 영구적으로(Permanently) 보존되어 살아남아야 합니다. (하드디스크와 백업 로그의 마법).

Ⅲ. 이 4대 규칙을 지켜내는 수호자들 (DBMS 내부 모듈)

  • **원자성(A)**과 영속성(D) ➜ 기계가 꺼져도 되살려내는 **'회복 관리자(Recovery Manager)'**가 목숨 걸고 지킵니다. (로그 파일의 힘)
  • 격리성(I) ➜ 남들 못 들어오게 쇠사슬을 채우는 **'병행 제어 관리자(Concurrency Control)'**가 지킵니다. (자물쇠 Lock의 힘)
  • 일관성(C) ➜ 프로그래머가 짠 **'무결성 제약조건'**과 위의 **'병행제어'**가 합쳐져서 지켜냅니다.

📢 섹션 요약 비유: 트랜잭션의 ACID 특성은 세상에서 가장 완벽한 **'다이아몬드 금고 배달 작전'**의 4대 수칙입니다. **원자성(A)**은 배달부가 금고를 고객 손에 '완벽히 쥐여주거나', 가는 길에 사고가 나면 아예 처음 출발지 창고로 '완벽히 되돌려 놓거나' 둘 중 하나만 존재해야지, 길바닥에 금고를 흘려두는 짓(부분 완료)을 절대 용납하지 않는 규칙입니다. **일관성(C)**은 출발할 때 다이아몬드 개수가 10개(정상 상태)였다면, 배달이 끝난 뒤에 고객이 열어봐도 무조건 10개(무결성 유지)여야 한다는 불변의 법칙입니다. **격리성(I)**은 배달부가 금고를 들고 뛰어가는 그 찰나의 시간 동안, 길거리의 소매치기나 오토바이 족(다른 트랜잭션)이 절대 배달부를 건드리거나 훔쳐볼 수 없도록 보이지 않는 방탄 캡슐을 씌워 홀로 배달하게 만드는 투명 인간 보호막입니다. **영속성(D)**은 마침내 고객이 수령 확인증에 '사인(COMMIT)'을 한 그 1초 뒤에 배달 회사가 파산하고 지구가 멸망해도, 고객 손에 들어온 금고 소유권 기록은 우주가 끝날 때까지 영원히 지워지지 않고 보존된다는 궁극의 영원불멸 약속입니다.