은행 계좌 이체 중 시스템에 오류가 발생한다면 어떻게 될까? 돈은 출금되었으나 입금되지 않는 대참사를 막기 위해 데이터베이스는 ‘트랜잭션(Transaction)’이라는 논리적 작업 단위를 사용한다.
트랜잭션의 상태 제어
트랜잭션은 “전부 성공하거나, 아예 없었던 일로 하거나”를 보장하는 메커니즘이다.
- Commit: 모든 작업이 성공하여 데이터베이스에 영구적으로 반영하는 상태다.
- Rollback: 작업 중 오류 발생 시 트랜잭션 시작 전의 상태로 되돌리는 상태다.
신뢰의 기반: ACID 특성
트랜잭션의 안전성을 보장하기 위한 4가지 설계 원칙이다.
- 원자성 (Atomicity): 작업 단위 내의 모든 명령은 반드시 한꺼번에 처리되어야 한다.
- 일관성 (Consistency): 완료 후에도 데이터베이스의 무결성 제약 조건은 유지되어야 한다.
- 격리성 (Isolation): 동시 실행되는 트랜잭션들이 서로의 중간 상태를 볼 수 없게 차단한다.
- 지속성 (Durability): 성공적으로 완료된 결과는 시스템 장애 시에도 영구적으로 보존된다.
동시성 제어의 중요성
수많은 사용자가 동시에 데이터를 수정하는 환경에서 트랜잭션 격리 수준(Isolation Level) 설정은 정확성과 성능 사이의 균형을 잡는 핵심적인 요소다.
P.S
트랜잭션은 데이터 무결성을 지키는 최후의 보루다.
ACID 특성을 준수하는 설계는 견고한 데이터 중심 애플리케이션 구축의 필수 요건인 것 같다.