🔹 롤백(Rollback)이란?
1. 롤백(Rollback)의 정의
롤백(Rollback)은 데이터베이스 트랜잭션에서 오류가 발생했을 때, 변경된 데이터를 이전 상태로 되돌리는 기능입니다.
즉, 트랜잭션이 정상적으로 완료되지 않으면 해당 트랜잭션에서 실행된 모든 SQL 작업을 취소하고, 데이터베이스를 변경 전 상태로 복구합니다.
✅ 롤백의 주요 목적:
- 데이터 무결성(Integrity) 유지
- 오류 발생 시 안전한 데이터 복구
- 잘못된 데이터 입력 방지
- 동시성 제어 및 충돌 방지
📌 롤백은 은행 거래, 전자상거래 주문 처리, 예약 시스템 등 데이터 신뢰성이 중요한 시스템에서 필수적인 기능
🔹 롤백의 동작 방식
롤백은 트랜잭션이 시작된 이후 변경된 데이터를 COMMIT
전까지 되돌리는 역할을 합니다.
✔️ 롤백의 기본 동작 흐름
- 트랜잭션 시작 (
BEGIN TRANSACTION
) - SQL 실행 (
INSERT
,UPDATE
,DELETE
등) - 문제 발생 (시스템 오류, 조건 불만족, 충돌 등)
- ROLLBACK 실행 → 데이터 변경 이전 상태로 복구
✔️ 기본 롤백 예제 (SQL)
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 1002;
ROLLBACK; -- 오류 발생 시 모든 변경 사항 취소
📌 트랜잭션이 완료되기 전(COMMIT
이전)에 ROLLBACK
이 실행되면, 데이터는 변경되지 않음
🔹 롤백과 커밋(COMMIT) 비교
트랜잭션 제어 명령어 | 설명 |
---|---|
ROLLBACK | 트랜잭션이 실패했을 때 모든 변경 사항을 취소하고 이전 상태로 복구 |
COMMIT | 트랜잭션이 성공적으로 완료되었을 때 변경 사항을 데이터베이스에 영구적으로 저장 |
✔️ COMMIT과 ROLLBACK 비교 예제
BEGIN TRANSACTION;
UPDATE Products SET Price = Price * 1.1 WHERE Category = 'Electronics';
-- 오류 발생 시 롤백
IF @@ERROR <> 0
ROLLBACK;
ELSE
COMMIT;
📌 오류가 발생하면 ROLLBACK
, 성공하면 COMMIT
을 실행하여 변경 사항을 반영
🔹 자동 롤백과 수동 롤백
✅ 1. 자동 롤백 (Implicit Rollback)
- 트랜잭션이 비정상적으로 종료되면 자동으로 롤백됨
- 예: 서버 장애, 네트워크 끊김, 디스크 오류 등
✔️ 자동 롤백 예제
BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Shipped' WHERE OrderID = 101;
-- 네트워크 오류 발생 → 자동 ROLLBACK
📌 트랜잭션이 정상적으로 종료되지 않으면 변경된 데이터가 자동으로 롤백됨
✅ 2. 수동 롤백 (Explicit Rollback)
- 사용자가 직접
ROLLBACK
명령을 실행하여 데이터 변경을 취소 - 예: 비즈니스 로직 조건 불충족, 데이터 충돌 등
✔️ 수동 롤백 예제 (SQL)
BEGIN TRANSACTION;
UPDATE Inventory SET Stock = Stock - 1 WHERE ProductID = 5001;
-- 재고가 0보다 작아지는 경우 롤백
IF (SELECT Stock FROM Inventory WHERE ProductID = 5001) < 0
ROLLBACK;
ELSE
COMMIT;
📌 조건을 확인하여 데이터 정합성이 깨지는 경우 롤백 처리
🔹 롤백의 실무 활용 사례
1. 은행 계좌 이체에서 오류 발생 시 롤백
📌 활용:
- 송금 과정에서 중간에 오류가 발생하면 계좌 잔액을 원래대로 되돌려야 함
✔️ SQL 코드:
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 1002;
-- 계좌 잔액이 음수가 되면 롤백
IF (SELECT Balance FROM Accounts WHERE AccountID = 1001) < 0
ROLLBACK;
ELSE
COMMIT;
📌 출금 계좌의 잔액이 부족하면 ROLLBACK
을 실행하여 데이터 오류 방지
2. 온라인 쇼핑몰에서 결제 오류 발생 시 롤백
📌 활용:
- 결제 승인 중 오류가 발생하면 주문 상태를 원래대로 돌려야 함
✔️ SQL 코드:
BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Paid' WHERE OrderID = 101;
UPDATE Payments SET Status = 'Approved' WHERE OrderID = 101;
-- 결제 승인 실패 시 롤백
IF (SELECT Status FROM Payments WHERE OrderID = 101) <> 'Approved'
ROLLBACK;
ELSE
COMMIT;
📌 결제 오류 발생 시 주문 상태를 원래 상태로 되돌려야 함
3. 재고 관리 시스템에서 초과 주문 방지
📌 활용:
- 주문 수량이 재고보다 많으면 롤백하여 초과 주문 방지
✔️ SQL 코드:
BEGIN TRANSACTION;
UPDATE Inventory SET Stock = Stock - 5 WHERE ProductID = 5001;
-- 재고가 부족하면 롤백
IF (SELECT Stock FROM Inventory WHERE ProductID = 5001) < 0
ROLLBACK;
ELSE
COMMIT;
📌 재고 부족 시 롤백하여 데이터 정합성을 유지
📌 결론
✅ 롤백(Rollback)은 데이터베이스 트랜잭션에서 오류 발생 시 데이터를 이전 상태로 복구하는 기능이다.
✅ 트랜잭션이 정상적으로 완료되지 않으면, 자동 또는 수동으로 ROLLBACK
을 실행하여 데이터 무결성을 유지한다.
✅ ROLLBACK과 COMMIT을 적절히 활용하면, 금융 시스템, 전자상거래, 재고 관리 등에서 데이터 정합성을 보장할 수 있다.
✅ 트랜잭션 오류 감지를 위한 IF
문과 결합하여 ROLLBACK
을 활용하면 비즈니스 로직을 더욱 안정적으로 관리할 수 있다.
'IT이야기 > 데이터베이스' 카테고리의 다른 글
데드락(Deadlock): SQL에서 교착 상태를 방지하는 최적의 해결책 (0) | 2025.02.27 |
---|---|
ER 모델(Entity-Relationship Model): 데이터베이스 설계의 핵심 개념 (0) | 2025.02.27 |
SQL 뷰(VIEW): 데이터 관리와 보안 강화를 위한 가상 테이블 활용법 (0) | 2025.02.27 |
SQL 인덱스(INDEX): 데이터베이스 성능을 높이는 핵심 기술 (1) | 2025.02.27 |
커밋(COMMIT): 데이터 무결성을 보장하는 트랜잭션 확정 기술 (1) | 2025.02.27 |