198. COMMIT 명령어 - 트랜잭션 성공적 완료 디스크 반영 확정 TCL 영속성 보장 잠금 해제 트랜잭션 종료 동시성 제어 해제
핵심 인사이트: 회사 사장님 결재판에 기안서를 올렸다. 아무리 완벽하게 기안서를 썼고, 과장님 부장님 사인(연산)을 다 받아놨어도, 맨 마지막 장에 사장님이 "승인(COMMIT)" 빨간 도장을 안 찍어주면 그 서류는 쪼가리일 뿐 효력이 없다. DB도 똑같다! "야! 쿼리 10개 완벽하게 다 돌려서 램(메모리) 위에서 데이터 다 바꿔놨다고 신나 하지 마! 서버 전원 나가면 0.1초 만에 다 증발해서 없어지는 가짜 신기루야! 진짜 세상의 이치를 뜯어고치고 싶으면 마지막에 무조건 'COMMIT'이라고 쳐서 사장님 도장을 받아내! 도장이 찍히는 순간 메모리의 내용이 영원히 타지 않는 디스크 강철판에 박히고, 내가 쥐고 있던 자물쇠(Lock)도 풀려서 남들도 볼 수 있게 쫙 뿌려지는 거야!!" 되돌릴 수 없는 루비콘강을 건너는 궁극의 확인 버튼, COMMIT이다.
Ⅰ. 트랜잭션 제어어(TCL)의 1인자: COMMIT
- SQL 명령어 중 데이터를 조작하는 DML(INSERT, UPDATE, DELETE)을 썼다면, 그 변경 사항은 허공(메모리 캐시 버퍼)에만 떠 있는 가임시 상태입니다.
- COMMIT의 개념: 트랜잭션 덩어리 안에서 처리된 모든 연산들이 오류 없이 완벽하게 정상 종료되었음을 시스템에 알리고, 그동안 지지고 볶은 모든 데이터 변경 사항들을 비로소 데이터베이스 디스크(물리적 저장소)에 영구적으로 확정(Commit) 반영시키는 명령어입니다.
Ⅱ. COMMIT을 누르는 순간 뱃속에서 터지는 3가지 마법 🌟 핵심 🌟
1. 영속성(Durability, 196번)의 발동 - "이제부턴 불사조다"
- 내가 UPDATE 친 데이터가 진짜 하드디스크(.mdf 데이터 파일)에 쓰이거나, 아니면 최소한 196번에서 배운 'Redo 로그 파일'에 강제(Flush)로 쓰여서 디스크에 도장이 찍힙니다.
- 이 순간부터 데이터베이스 서버 전원 코드를 가위로 잘라버려도, 나중에 재부팅하면 무조건 내 데이터는 100% 무사히 복구되어 살아납니다.
2. 가시성 (Visibility)의 해방 - "남들에게도 짠!"
- 195번 격리성(Isolation) 때문에, 내가 COMMIT을 치기 전까지는 내가 바꾼 1만 원이라는 데이터를 나 혼자만 볼 수 있고 남들은 훔쳐보지 못했습니다(보이지 않는 밀실).
- COMMIT을 때리는 찰나! 밀실의 문이 활짝 열리며, 전 세계의 다른 수십만 접속자들의 모니터(세션)에도 방금 내가 바꾼 최신 잔액(1만 원)이 동시에 업데이트되어 확 뿌려집니다. 비로소 우주 전체의 진실이 됩니다.
3. 자물쇠 (Lock)의 반납 - "다음 분 들어오세요"
- 내가 작업하는 동안 다른 놈들이 못 끼어들게 레코드(Row)에 칭칭 감아뒀던 무식한 쇠사슬 자물쇠(Exclusive Lock)가, COMMIT과 동시에 스르륵 다 풀려 땅에 떨어집니다.
- 밖에서 발을 동동 구르며 줄 서 있던 10만 명의 다른 쿼리(대기 트랜잭션)들이 봇물 터지듯 밀려 들어와 다음 작업을 이어가게 됩니다. 시스템 트래픽의 변비(병목)가 시원하게 풀리는 순간입니다.
Ⅲ. 암묵적(Implicit) COMMIT의 무서움
초보 개발자들이 가장 많이 당하는 실수입니다.
- 개발자가
COMMIT이라고 텍스트를 안 쳤는데도, DB가 지 혼자 맘대로 도장을 쾅 찍어버리는 경우가 있습니다. - 오토커밋 (Auto-Commit) 모드: 쿼리(UPDATE)를 1줄 칠 때마다 지가 알아서 1줄씩 개별로 COMMIT을 때려버리는 설정입니다. 초보자 테스트용으론 좋지만, 트랜잭션 묶음(원자성)이 박살 나므로 실무 서버에선 무조건 끄고 써야 합니다.
- DDL의 습격: 트랜잭션으로 UPDATE 5개 치고 아직 COMMIT 안 한 상태인데, 갑자기 중간에 테이블 구조를 바꾸는
CREATE,ALTER,DROP같은 DDL(데이터 정의어) 명령어를 쳐버리면? - DB 엔진은 DDL을 만나는 순간 "어? 뼈대 바꾸네?" 하면서 이전까지 메모리에 있던 모든 UPDATE 작업들을 묻지도 따지지도 않고 강제로 암묵적 COMMIT(도장 쾅) 때려버립니다. 그래서 나중에 에러 나서 ROLLBACK 쳐봤자 시간 되돌리기가 먹히지 않아 데이터가 다 오염되는 대참사가 터집니다.
📢 섹션 요약 비유: COMMIT(승인) 명령어는 회사에서 **'사장님의 최종 빨간색 결재 도장'**입니다. 사원(트랜잭션)이 기안서를 쓰며 100만 원, 200만 원 숫자를 연필(메모리 RAM)로 썼다 지웠다 100번을 고쳐도, 이 서류는 아직 효력이 없는 가짜 임시 종이 쪼가리에 불과합니다(가시성 차단). 아무리 완벽하게 썼어도 바람이 불어 종이가 날아가면 끝입니다(정전 시 데이터 증발). 그런데 기안서를 사장님 책상에 올리고 사장님이 "결재 쾅!(COMMIT)" 도장을 찍는 순간, 기적의 연금술이 터집니다. 연필로 쓴 글씨는 절대 지워지지 않는 금강석(하드디스크 디스크 반영, 영속성)으로 변해 금고에 영원히 박제됩니다. 그리고 사내 게시판에 공문이 쫙 붙어서 전 직원이 이 바뀐 예산안을 비로소 다 같이 볼 수 있게 되며(가시성 개방), 기안서를 들고 있느라 독점했던 회의실 열쇠(Lock 자물쇠 반납)를 반납하고 다음 사람을 들여보내는, 가상의 고민을 현실의 진실로 100% 확정 지어버리는 우주 최고 권력의 쐐기 버튼입니다.