커밋(COMMIT): 데이터 무결성을 보장하는 트랜잭션 확정 기술
🔹 커밋(COMMIT)이란?
1. 커밋(COMMIT)의 정의
커밋(COMMIT)은 데이터베이스 트랜잭션(Transaction)에서 수행된 모든 변경 사항을 영구적으로 저장하는 명령어입니다.
즉, 트랜잭션이 정상적으로 완료되었을 때, 변경된 데이터를 데이터베이스에 반영하여 확정하는 역할을 합니다.
✅ 커밋의 주요 목적:
- 데이터 무결성(Integrity) 유지
- 트랜잭션 성공 시 변경 사항을 영구 저장
- 다중 사용자 환경에서 동시성을 보장
- 데이터 복구를 위한 일관된 저장 상태 제공
📌 커밋을 수행하면 변경된 데이터는 영구적으로 저장되며, 이후 ROLLBACK
으로 되돌릴 수 없음
🔹 커밋의 동작 방식
✅ 1. 커밋의 기본 동작 원리
- 트랜잭션 시작 (
BEGIN TRANSACTION
) - SQL 실행 (
INSERT
,UPDATE
,DELETE
등) - 모든 작업이 정상적으로 완료되면
COMMIT
실행 - 변경 사항이 영구적으로 저장됨
✔️ 기본 커밋 예제 (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)을 사용하면 데이터 안정성을 높일 수 있다.
✅ 은행 거래, 전자상거래, 재고 관리 시스템 등 데이터 신뢰성이 중요한 환경에서는 COMMIT
과 ROLLBACK
을 적절히 활용해야 한다.