Database
[DB] 트랜잭션과 무결성
mooni_
2025. 5. 20. 18:47
트랜잭션(Transaction)이란?
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 여러 개의 쿼리들을 하나로 묶어 일괄 처리할 수 있도록 함
- 모든 쿼리가 정상적으로 실행되어야만 전체 트랜잭션을 확정(commit)하며, 하나라도 실패하면 전부 취소(rollback) 가능
ACID: 트랜잭션의 4대 특징
1. 원자성 (Atomicity)
- 트랜잭션 내 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함
- 일부만 실행된 상태로 남아선 안 됨
관련 명령어
- 커밋(commit): 트랜잭션 내 쿼리들이 정상적으로 완료되었음을 확정하고 변경 내용을 영구 반영
- 롤백(rollback): 트랜잭션 처리 중 문제가 발생했을 때 변경 내용을 전부 취소하고 되돌림
➡ 커밋과 롤백은 데이터 무결성을 지키기 위한 핵심 도구
2. 일관성 (Consistency)
- 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태로 유지되어야 함
- 제약 조건, 트리거, 규칙 등을 어기지 않는 범위 내에서만 변경 가능
예: 외래 키 제약 조건 위반 없이 참조 무결성이 유지되어야 함
3. 격리성 (Isolation)

- 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 함
- 결과적으로 마치 순차적으로 실행된 것처럼 보여야 함
트랜잭션 병행성 문제 (Anomaly)
- 더티 리드 (Dirty Read): 커밋되지 않은 데이터를 다른 트랜잭션이 읽음
- 반복 불가능한 조회 (Non-repeatable Read): 같은 데이터를 두 번 조회했는데 결과가 다름
- 팬텀 리드 (Phantom Read): 같은 조건의 SELECT 쿼리 결과가 트랜잭션 중간에 다르게 나옴
격리 수준 (Isolation Level)
수준 | 설명 | 방지되는 문제 |
SERIALIZABLE | 가장 엄격, 모든 트랜잭션을 순차 실행 | 팬텀 리드까지 방지 |
REPEATABLE READ | 같은 행에 대한 반복 조회 보장 | 더티 리드, 반복 불가능 조회 방지 |
READ COMMITTED | 커밋된 데이터만 읽기 허용 | 더티 리드 방지 (기본값인 경우 많음) |
READ UNCOMMITTED | 커밋되지 않은 데이터도 읽기 가능 | 성능은 좋으나 가장 위험 |
4. 지속성 (Durability)
- 트랜잭션이 커밋되면 그 결과는 영구적으로 보존되어야 함
- 시스템 장애가 발생해도 변경된 데이터는 손실 없이 복구되어야 함
주요 기술
- 체크섬 (Checksum): 데이터 전송 중 오류를 검출하기 위한 중복 검사 기법
- 저널링 (Journaling): 변경 사항을 반영하기 전 로그를 기록해 복구 가능하게 함
- 롤백 세그먼트 / Undo Log: 롤백을 위한 트랜잭션 복구 정보 보관
무결성
- 데이터의 정확성, 일관성, 유효성을 유지하는 것
- 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생김
무결성의 종류
1) 개체 무결성 : 기본키로 선택된 필드는 빈 값을 허용하지 않음
2) 참조 무결성 : 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야함
3) 고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가짐
4) NULL 무결성 : 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약 조건
트랜잭션은 데이터베이스의 신뢰성을 유지하는 가장 중요한 메커니즘입니다. ACID 원칙은 트랜잭션의 일관된 처리와 무결성을 보장하며, 동시에 여러 사용자가 DB를 안전하게 사용할 수 있도록 합니다.
현대의 RDBMS에서는 대부분 이 네 가지 속성을 다양한 수준에서 보장하고 있으며, 실무에서는 트랜잭션 범위 설정과 격리 수준의 조절을 통해 성능과 무결성 간의 균형을 맞추는 것이 중요합니다.