IT이야기/데이터베이스

커밋(COMMIT): 데이터 무결성을 보장하는 트랜잭션 확정 기술

Chiba-in 2025. 2. 27. 10:34

🔹 커밋(COMMIT)이란?

1. 커밋(COMMIT)의 정의

커밋(COMMIT)은 데이터베이스 트랜잭션(Transaction)에서 수행된 모든 변경 사항을 영구적으로 저장하는 명령어입니다.
즉, 트랜잭션이 정상적으로 완료되었을 때, 변경된 데이터를 데이터베이스에 반영하여 확정하는 역할을 합니다.

커밋의 주요 목적:

  • 데이터 무결성(Integrity) 유지
  • 트랜잭션 성공 시 변경 사항을 영구 저장
  • 다중 사용자 환경에서 동시성을 보장
  • 데이터 복구를 위한 일관된 저장 상태 제공

📌 커밋을 수행하면 변경된 데이터는 영구적으로 저장되며, 이후 ROLLBACK으로 되돌릴 수 없음


🔹 커밋의 동작 방식

1. 커밋의 기본 동작 원리

  1. 트랜잭션 시작 (BEGIN TRANSACTION)
  2. SQL 실행 (INSERT, UPDATE, DELETE 등)
  3. 모든 작업이 정상적으로 완료되면 COMMIT 실행
  4. 변경 사항이 영구적으로 저장됨

✔️ 기본 커밋 예제 (SQL)

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 1002;
COMMIT;  -- 변경 사항을 영구 저장

📌 COMMIT을 실행하면 트랜잭션 내의 모든 변경 사항이 데이터베이스에 반영됨


2. 커밋과 롤백(ROLLBACK)의 차이

트랜잭션 명령어 설명
COMMIT 트랜잭션이 성공적으로 완료되면 변경 사항을 데이터베이스에 영구 저장
ROLLBACK 트랜잭션이 실패했을 때 모든 변경 사항을 취소하고 이전 상태로 복구

✔️ 커밋과 롤백 비교 예제

BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Shipped' WHERE OrderID = 101;

-- 오류 발생 시 롤백
IF @@ERROR <> 0 
    ROLLBACK;
ELSE 
    COMMIT;

📌 COMMIT을 실행하면 변경 사항이 영구 저장되며, ROLLBACK을 사용할 수 없음


3. 자동 커밋(Auto-Commit)과 수동 커밋(Manual Commit)

🔹 자동 커밋(Auto-Commit)

  • SQL 실행 후 자동으로 COMMIT이 수행됨
  • MySQL, PostgreSQL 등에서는 기본적으로 AUTO-COMMIT이 활성화되어 있음
  • 데이터 변경이 즉시 반영되므로, 실수로 인한 데이터 손실 가능성이 있음

✔️ 자동 커밋 모드 활성화/비활성화 (MySQL 예제)

-- 자동 커밋 활성화
SET AUTOCOMMIT = ON;

-- 자동 커밋 비활성화
SET AUTOCOMMIT = OFF;

📌 자동 커밋을 비활성화하면 명시적으로 COMMIT을 실행해야 변경 사항이 저장됨


🔹 수동 커밋(Manual Commit)

  • 트랜잭션을 직접 제어하여 원하는 시점에 COMMIT을 수행할 수 있음
  • 데이터 무결성을 보장하고 실수를 방지할 수 있음

✔️ 수동 커밋 예제

SET AUTOCOMMIT = OFF;
BEGIN TRANSACTION;
INSERT INTO Orders (OrderID, CustomerID, OrderDate) VALUES (102, 5, '2024-02-22');
COMMIT;

📌 수동 커밋을 사용하면, ROLLBACK을 통해 오류 발생 시 변경 사항을 취소할 수 있음


🔹 커밋의 실무 활용 사례

1. 은행 계좌 이체에서 트랜잭션 확정

📌 활용:

  • 송금 과정이 성공적으로 완료되면 변경 사항을 COMMIT으로 확정해야 함

✔️ SQL 코드:

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 1002;
COMMIT;

📌 송금이 완료되면 COMMIT을 실행하여 계좌 잔액을 영구적으로 변경


2. 온라인 쇼핑몰에서 주문 확정

📌 활용:

  • 고객이 결제를 완료했을 때, 주문 정보를 데이터베이스에 반영

✔️ SQL 코드:

BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Paid' WHERE OrderID = 101;
UPDATE Payments SET Status = 'Completed' WHERE OrderID = 101;
COMMIT;

📌 결제가 정상적으로 완료되면 COMMIT을 실행하여 주문 상태를 'Paid'로 확정


3. 재고 관리 시스템에서 입출고 반영

📌 활용:

  • 입고 및 출고가 동시에 발생하는 경우, 데이터 일관성을 유지하기 위해 COMMIT을 활용

✔️ SQL 코드:

BEGIN TRANSACTION;
UPDATE Inventory SET Stock = Stock - 5 WHERE ProductID = 5001;
INSERT INTO InventoryLog (ProductID, Change, Date) VALUES (5001, -5, NOW());
COMMIT;

📌 재고 수량이 정상적으로 차감되었을 때 COMMIT을 실행하여 변경 사항을 확정


📌 결론

커밋(COMMIT)은 데이터베이스 트랜잭션이 정상적으로 완료되었을 때 변경 사항을 영구적으로 저장하는 명령어이다.
트랜잭션이 성공적으로 수행되면 COMMIT을 실행하여 데이터 무결성을 유지해야 한다.
자동 커밋(Auto-Commit) 모드는 즉시 데이터를 반영하지만, 수동 커밋(Manual Commit)을 사용하면 데이터 안정성을 높일 수 있다.
은행 거래, 전자상거래, 재고 관리 시스템 등 데이터 신뢰성이 중요한 환경에서는 COMMITROLLBACK을 적절히 활용해야 한다.