트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적 작업 단위를 말한다. 여러 개의 SQL 문장이 하나의 묶음으로 처리되어야 할 때, 그 전체 과정을 하나의 트랜잭션으로 간주한다.
예를 들어 “A 계좌에서 B 계좌로 1000원을 송금하는 과정”은 출금과 입금이 함께 성공하거나, 모두 실패해야 한다. 이처럼 데이터의 일관성을 보장하기 위한 최소 단위가 트랜잭션이다.
1. 트랜잭션의 특성 (ACID)
트랜잭션은 네 가지 주요 특성(ACID)을 만족해야 한다.
| Atomicity (원자성) | 모두 수행되거나 전혀 수행되지 않아야 함 | 트랜잭션 내 모든 작업이 하나의 단위로 처리되어야 함 |
| Consistency (일관성) | 전후의 데이터 일관성 유지 | 트랜잭션 수행 전후 데이터베이스의 무결성 제약조건이 유지되어야 함 |
| Isolation (격리성) | 동시에 실행되는 트랜잭션 간 간섭 방지 | 한 트랜잭션의 작업이 다른 트랜잭션에 영향을 주지 않도록 보장 |
| Durability (지속성) | 커밋된 결과는 영구히 보존 | 트랜잭션 완료 후 시스템 오류가 나더라도 결과는 데이터베이스에 반영되어야 함 |
이 네 가지 특성은 데이터베이스의 신뢰성을 유지하는 핵심 원칙이다.
2. TCL (Transaction Control Language)
TCL은 트랜잭션을 제어하는 SQL 명령어들의 집합이다.
트랜잭션의 시작과 종료, 취소를 명시적으로 제어할 수 있다.
2.1 주요 TCL 명령어
| COMMIT | 트랜잭션의 변경 내용을 데이터베이스에 영구 반영 |
| ROLLBACK | 변경 내용을 취소하고 마지막 COMMIT 시점으로 되돌림 |
| SAVEPOINT | 트랜잭션 내에서 특정 지점을 저장 (부분 롤백 가능, 표준 SQL 아님) |
2.2 TCL 예제
BEGIN TRANSACTION;
-- SQL 문장들 실행
SAVEPOINT sp1;
-- 추가 SQL 문장 실행
ROLLBACK TO sp1;
COMMIT;
위 예제는 sp1이라는 중간 저장점을 만들어 이후 일부만 되돌릴 수 있도록 한다.
ROLLBACK TO sp1은 해당 지점 이후의 변경만 취소한다.
3. 트랜잭션 관리의 중요성
트랜잭션 관리는 데이터의 무결성과 일관성을 유지하는 핵심 요소다.
다수의 사용자가 동시에 DB를 조작할 때 다음을 보장한다.
- 데이터 손실 방지
- 일관된 상태 유지
- 오류 시 복구 용이
- 비정상 종료로 인한 문제 최소화
적절한 트랜잭션 제어는 안정적인 데이터베이스 운영의 필수 요소다.
4. 실습 예제 – 은행 계좌 이체
-- 트랜잭션 시작
BEGIN TRANSACTION;
-- 출금 계좌에서 1000원 차감
UPDATE accounts
SET balance = balance - 1000
WHERE account_id = 'A001';
-- 입금 계좌에 1000원 추가
UPDATE accounts
SET balance = balance + 1000
WHERE account_id = 'B001';
-- 이체 내역 기록
INSERT INTO transactions (from_account, to_account, amount, transaction_date)
VALUES ('A001', 'B001', 1000, CURRENT_TIMESTAMP);
-- 모든 연산 성공 시 커밋
COMMIT;
-- 오류 발생 시 롤백
-- ROLLBACK;
위 시나리오에서 세 SQL 문장은 하나의 트랜잭션으로 묶여야 한다.
중간에 오류가 발생하면 ROLLBACK으로 전체 작업을 취소하고,
정상적으로 완료되면 COMMIT으로 결과를 영구 저장한다.
5. 트랜잭션 관련 고급 주제
- 동시성 제어 (Concurrency Control)
여러 사용자가 동시에 데이터를 조작할 때, 데이터 충돌을 방지하는 기법이다.
→ 잠금(Lock)과 격리 수준(Isolation Level)로 제어. - 교착 상태 (Deadlock)
두 트랜잭션이 서로의 자원을 기다리며 영원히 대기하는 상태.
→ 교착 상태 탐지 및 해제 알고리즘으로 해결. - 분산 트랜잭션 (Distributed Transaction)
여러 데이터베이스 서버에 걸쳐 수행되는 트랜잭션으로,
2-Phase Commit 프로토콜 등을 이용해 일관성 유지.
ㅇ 정리
트랜잭션은 데이터베이스의 신뢰성과 일관성을 보장하는 기본 단위이며,
TCL은 이를 제어하기 위한 명령어 집합이다.
트랜잭션 개념을 정확히 이해하고 적절히 활용하면
안정적이고 복구 가능한 데이터베이스 시스템을 설계할 수 있다.
'DBMS > 개념' 카테고리의 다른 글
| 18_ 조인(Join)과 서브쿼리(Subquery) (0) | 2025.10.14 |
|---|---|
| 17_ 뷰(view) (0) | 2025.10.11 |
| 15_ 인덱스(Index) (0) | 2025.10.07 |
| 14_ NULL과 NVL() 함수 (0) | 2025.10.05 |
| 13_ 시퀀스 (0) | 2025.10.03 |