✅ 트랜잭션(Transaction) 이란?
트랜잭션이란 데이터베이스에서 하나의 논리적인 작업 단위를 말합니다. 즉, 여러 SQL 작업을 하나로 묶어서 모두 성공하거나 모두 실패해야 하는 단위입니다.
예를 들어, 은행 계좌 이체 시:
- A 계좌에서 10만원 출금
- B 계좌에 10만원 입금
이 두 작업이 동시에 성공하거나, 동시에 실패해야 데이터 일관성이 보장됩니다.
▶ 트랜잭션의 특징: ACID
트랜잭션은 아래의 네 가지 속성(ACID)을 만족해야 합니다.
명령어 | 설명 |
Atomicity (원자성) | 모든 작업이 전부 수행되거나, 전혀 수행되지 않아야 함 |
Consistency (일관성) | 트랜잭션 전후에 데이터의 무결성이 유지되어야 함 |
Isolation (고립성) | 동시에 실행되는 트랜잭션들이 서로 영향을 주지 않아야 함 |
Durability (지속성) | 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 함 |
✅ 트랜잭션의 제어 명령어
트랜잭션은 일반적으로 다음 명령어로 제어됩니다:
명령어 | 설명 |
BEGIN / START TRANSACTION | 트랜잭션 시작 |
COMMIT | 트랜잭션 성공 → 변경사항 저장 |
ROLLBACK | 트랜잭션 실패 → 변경사항 모두 취소 |
SAVEPOINT | 중간 저장 지점 설정 |
ROLLBACK TO SAVEPOINT | 특정 저장 지점까지 롤백 |
예시:
START TRANSACTION;
UPDATE account SET balance = balance - 10000 WHERE name = 'A';
UPDATE account SET balance = balance + 10000 WHERE name = 'B';
COMMIT;
✅ 병행 제어(Concurrency Control)
여러 사용자가 동시에 데이터에 접근하거나 수정할 경우 발생할 수 있는 충돌이나 오류를 방지하기 위해 병행 제어가 필요합니다.
▶ 대표적인 문제점들
문제 | 설명 |
Dirty Read | 다른 트랜잭션의 아직 커밋되지 않은 데이터를 읽음 |
Non-repeatable Read | 같은 쿼리를 두 번 실행했는데 결과가 달라짐 (다른 트랜잭션이 중간에 데이터를 수정) |
Phantom Read | 처음 쿼리에는 없던 새로운 데이터가 다음 쿼리에서 나타남 |
✅ 트랜잭션 격리 수준 (Isolation Level)
병행 제어 문제를 해결하기 위해, DBMS는 격리 수준을 설정할 수 있게 해줍니다. 격리 수준이 높을수록 데이터의 일관성은 높아지지만 성능은 낮아질 수 있습니다.
격리 수준 | 설명 | 방지 가능 문제 |
READ UNCOMMITTED | 커밋되지 않은 데이터도 읽음 | 없음 |
READ COMMITTED | 커밋된 데이터만 읽음 | Dirty Read |
REPEATABLE READ | 동일한 SELECT 결과 유지 | Dirty + Non-repeatable Read |
SERIALIZABLE | 가장 엄격한 수준. 트랜잭션을 순차적으로 실행 | Dirty + Non-repeatable + Phantom Read |
✅ 잠금(Lock) 메커니즘
DBMS는 데이터 무결성을 지키기 위해 락(Lock) 을 사용합니다. 잠금은 트랜잭션 간의 충돌을 방지하는 핵심 메커니즘입니다.
Lock 종류 | 설명 |
Shared Lock (S Lock) | 읽기 전용. 다른 트랜잭션도 읽을 수 있음 |
Exclusive Lock (X Lock) | 쓰기 가능. 다른 트랜잭션은 읽거나 쓸 수 없음 |
Table Lock | 테이블 전체 잠금 |
Row Lock | 특정 행만 잠금 |
💡 정리: 트랜잭션과 병행 제어는 왜 중요한가?
- 사용자 수가 많고, 데이터 변경이 잦은 환경에서는 반드시 트랜잭션과 병행 제어가 필요합니다.
- 이것이 없다면 데이터 무결성, 신뢰성, 안정성이 보장되지 않아 시스템 전체에 큰 혼란을 초래할 수 있습니다.
- 특히 실무에서는 격리 수준과 성능 간의 적절한 균형이 중요합니다.
📝 마무리 요약
- 트랜잭션: 데이터베이스 작업의 논리적 단위 (ACID 만족)
- 트랜잭션 제어: BEGIN, COMMIT, ROLLBACK, SAVEPOINT
- 병행 제어: 여러 트랜잭션 간 충돌 방지
- 격리 수준: READ UNCOMMITTED → SERIALIZABLE (높을수록 안전, 느림)
- 락: 데이터 잠금으로 충돌 방지 (Shared, Exclusive, Row, Table)
'프로그래밍' 카테고리의 다른 글
SQL 튜닝 개요 및 전략|실무에서 바로 쓰는 성능 향상 기법 (3) | 2025.08.07 |
---|---|
실무 SQL 튜닝 기법 완벽 정리 (3) | 2025.08.07 |
인덱스와 성능 향상 전략 – SQLD 필수 개념 정리 (2) | 2025.08.05 |
서브쿼리와 인라인 뷰 – SQLD 필수 개념 정리 (2) | 2025.08.05 |
GROUP 함수와 집계 처리 – SQLD 완벽 정리 (2) | 2025.08.05 |