🔹 트랜잭션(Transaction)이란?
1. 트랜잭션의 정의
트랜잭션(Transaction)이란 데이터베이스에서 하나 이상의 SQL 작업을 묶어서 실행하는 단위로, 데이터의 무결성을 보장하는 중요한 개념입니다.
즉, 트랜잭션은 일련의 SQL 작업을 하나의 논리적 작업 단위로 처리하며, 모든 작업이 성공해야 트랜잭션이 완료(Commit)되고, 하나라도 실패하면 이전 상태로 되돌려야(Rollback) 합니다.
✅ 트랜잭션의 주요 목적:
- 데이터 일관성(Consistency) 유지
- 데이터 무결성(Integrity) 보장
- 시스템 장애 발생 시 데이터 복구 가능
- 여러 사용자가 동시에 데이터에 접근할 때 동시성 제어(Concurrency Control) 지원
📌 트랜잭션은 은행 계좌 이체, 전자상거래 주문 처리, 재고 관리 등에서 필수적으로 사용됨
🔹 트랜잭션의 핵심 원칙 (ACID 특성)
트랜잭션은 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 만족해야 합니다.
✅ 1. 원자성(Atomicity) – "All or Nothing"
- 트랜잭션의 모든 작업이 성공해야 하고, 하나라도 실패하면 전체 작업이 취소되어야 함
- 예: 은행 계좌 이체에서 한 계좌에서 돈이 출금되었지만 다른 계좌에 입금되지 않으면 전체 취소해야 함
✔️ 원자성 예제 (SQL)
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 2002;
COMMIT; -- 모든 작업이 성공하면 커밋
📌 만약 두 번째 UPDATE
문이 실패하면 ROLLBACK
이 되어야 함
✅ 2. 일관성(Consistency) – "데이터 무결성 유지"
- 트랜잭션 실행 전후의 데이터는 항상 일관성을 유지해야 함
- 예: 주문 처리에서 고객 계정에 충분한 잔고가 있어야 주문이 완료됨
✔️ 일관성 유지 예제
BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Completed' WHERE OrderID = 101;
UPDATE Accounts SET Balance = Balance - (SELECT TotalAmount FROM Orders WHERE OrderID = 101);
COMMIT;
📌 잔고가 부족한 경우 ROLLBACK
을 실행하여 데이터베이스의 일관성을 유지해야 함
✅ 3. 격리성(Isolation) – "동시 실행되는 트랜잭션 간 간섭 방지"
- 여러 개의 트랜잭션이 동시에 실행될 때, 다른 트랜잭션에 영향을 주지 않도록 보장
- 트랜잭션 격리 수준(Isolation Level)에 따라 동시성 문제가 해결됨
✔️ 격리 수준 설정 예제
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
📌 가장 엄격한 격리 수준으로, 동시 실행되는 트랜잭션이 완전히 독립적으로 실행됨
✅ 4. 지속성(Durability) – "트랜잭션 완료 후 데이터 영구 저장"
- 트랜잭션이 성공적으로 완료되면, 변경된 데이터가 영구적으로 저장되어야 함
- 시스템 장애가 발생하더라도 트랜잭션 완료 데이터는 손실되지 않아야 함
✔️ 트랜잭션 완료 후 데이터 저장 (Commit)
COMMIT;
📌 트랜잭션이 커밋되면 데이터는 영구 저장됨
🔹 트랜잭션의 동작 방식 (Commit & Rollback)
✅ 1. COMMIT – "트랜잭션 완료 및 저장"
- 트랜잭션 내의 모든 SQL 작업이 성공하면, 변경된 데이터를 영구 저장함
✔️ COMMIT 예제
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2;
COMMIT;
📌 두 개의 UPDATE
가 모두 성공하면 COMMIT
을 실행하여 데이터 저장
✅ 2. ROLLBACK – "트랜잭션 취소 및 원래 상태로 복구"
- 트랜잭션 내에서 오류가 발생하면 모든 변경 사항을 취소하고 이전 상태로 되돌림
✔️ ROLLBACK 예제
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 1;
UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 2;
-- 오류 발생
ROLLBACK;
📌 트랜잭션이 실패하면 ROLLBACK
을 실행하여 데이터 변경 사항을 취소
🔹 트랜잭션의 격리 수준 (Isolation Levels)
SQL에서는 4가지 격리 수준을 제공하여 동시 실행되는 트랜잭션 간 충돌을 방지합니다.
격리 수준 | 설명 | 문제 발생 가능성 |
---|---|---|
READ UNCOMMITTED | 다른 트랜잭션의 미완료 데이터를 읽을 수 있음 | Dirty Read 발생 가능 |
READ COMMITTED | 커밋된 데이터만 읽을 수 있음 | Non-Repeatable Read 발생 가능 |
REPEATABLE READ | 트랜잭션 내에서 동일한 데이터를 계속 읽을 수 있음 | Phantom Read 발생 가능 |
SERIALIZABLE | 트랜잭션을 직렬화하여 실행 | 성능 저하 가능성 있음 |
📌 격리 수준 설정 예제
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
🔹 트랜잭션의 실무 활용 사례
1. 은행 계좌 이체 트랜잭션
📌 활용:
- 송금 시 한 계좌에서 출금되고 다른 계좌에 입금되지 않으면 전체 트랜잭션을 취소해야 함
✔️ SQL 코드:
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1001;
UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 1002;
COMMIT;
2. 전자상거래 주문 처리 트랜잭션
📌 활용:
- 고객이 주문을 완료했을 때, 주문 상태를 업데이트하고 재고를 차감하는 작업을 하나의 트랜잭션으로 처리
✔️ SQL 코드:
BEGIN TRANSACTION;
UPDATE Orders SET Status = 'Completed' WHERE OrderID = 101;
UPDATE Inventory SET Stock = Stock - 1 WHERE ProductID = 5001;
COMMIT;
📌 결론
✅ 트랜잭션(Transaction)은 데이터베이스에서 일관성과 무결성을 유지하기 위해 반드시 필요한 개념이다.
✅ 트랜잭션은 원자성, 일관성, 격리성, 지속성(ACID)을 만족해야 한다.
✅ 트랜잭션의 격리 수준을 설정하면 동시성 문제를 방지할 수 있다.
✅ 전자상거래, 금융, 물류 관리 등 다양한 분야에서 트랜잭션은 데이터 안정성을 보장하는 필수적인 기술이다.
'IT이야기 > 데이터베이스' 카테고리의 다른 글
배타 제어(Exclusive Control): 동시성 충돌을 방지하는 데이터 관리 기법 (0) | 2025.02.28 |
---|---|
ACID 특성: 데이터베이스 트랜잭션의 무결성을 보장하는 핵심 원칙 (0) | 2025.02.28 |
제3정규형(3NF): 데이터 무결성을 보장하는 정규화 단계 (0) | 2025.02.28 |
제2정규형(2NF): 데이터베이스 무결성을 강화하는 정규화 단계 (0) | 2025.02.28 |
제1정규형(1NF): 데이터베이스의 기본적인 정규화 단계 (0) | 2025.02.28 |