1. 데이터베이스 신뢰성의 근간, 트랜잭션의 개요
정의: 데이터베이스의 상태를 변화시키기 위해 수행하는 하나의 논리적 기능을 수행하기 위한 작업의 단위.
필요성: 시스템 장애 시 복구(Recovery)의 기준점이 되며, 다수 사용자의 동시 접근(Concurrency) 상황에서도 데이터의 일관성을 유지하기 위함.
2. 트랜잭션의 4가지 핵심 특징 (ACID)
트랜잭션은 원자성, 일관성, 고립성, 영속성이라는 4가지 필수 요건을 만족해야 합니다.
| 특징 | 영문 명칭 | 상세 내용 및 보장 메커니즘 |
| 원자성 | Atomicity | 트랜잭션 내의 연산은 전체가 완료(Commit)되거나 전체가 취소(Rollback)되어야 함 (All or Nothing). ※ 보장: Log, Checkpoint |
| 일관성 | Consistency | 트랜잭션 수행 전과 후에 데이터베이스는 항상 고유한 상태(무결성 제약조건 등)를 유지해야 함. ※ 보장: Integrity Constraint, Trigger |
| 고립성 | Isolation | 수행 중인 트랜잭션은 완료될 때까지 다른 트랜잭션이 참조하거나 간섭할 수 없음. ※ 보장: Locking, MVCC, Isolation Level |
| 영속성 | Durability | 성공적으로 완료된 트랜잭션의 결과는 시스템 장애가 발생하더라도 영구적으로 보존되어야 함. ※ 보장: REDO Log, Database Archive |
3. 트랜잭션의 상태 전이도
트랜잭션은 실행 과정에 따라 5가지 상태로 전이됩니다.
Active (활동): 트랜잭션이 실행 중인 상태.
Partially Committed (부분 완료): 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태.
Committed (완료): 트랜잭션이 성공적으로 종료되어 변경 내용이 DB에 반영된 상태.
Failed (실패): 실행 중 오류가 발생하여 중단된 상태.
Aborted (철회): 실패 후 Rollback 연산을 수행하여 트랜잭션 이전 상태로 복구된 상태.
4. 고립성(Isolation) 유지를 위한 고립 수준(Isolation Level)
고립성을 엄격히 적용하면 성능이 저하되므로, 목적에 따라 4단계로 운영합니다.
| Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read | 특징 |
| Read Uncommitted | 발생 | 발생 | 발생 | 커밋 전 데이터도 읽음 (성능 최고) |
| Read Committed | 방지 | 발생 | 발생 | 커밋된 데이터만 읽음 (Oracle 기본) |
| Repeatable Read | 방지 | 방지 | 발생 | 트랜잭션 내 동일 결과 보장 (MySQL 기본) |
| Serializable | 방지 | 방지 | 방지 | 완전한 직렬화 가능 (성능 최저) |
5. 기술사적 제언: 마이크로서비스(MSA) 환경에서의 트랜잭션 관리
Distributed Transaction의 한계: 분산 환경에서 2PC(2-Phase Commit)는 성능 병목과 장애 전파 위험이 크므로 지양해야 함.
Saga 패턴 도입: 보상 트랜잭션(Compensating Transaction)을 활용하여 각 서비스의 로컬 트랜잭션을 연결하는 최종 일관성(Eventual Consistency) 전략 권고.
결언: 트랜잭션은 단순한 기능 단위를 넘어 서비스의 '신뢰'를 결정짓는 핵심 아키텍처 요소임. 기술사는 비즈니스 요건에 따라 성능(Availability)과 데이터 일관성(Consistency) 사이의 CAP 이론적 트레이드오프를 최적화할 수 있어야 함.