CS/데이터베이스

트랜잭션 (Transaction)

조 수빈 2025. 3. 26. 23:53

🔍 트랜잭션(Transaction)이란?

트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
= 여러 개의 쿼리들을 하나로 묶는 단위 (데이터베이스에 접근하는 방법은 쿼리이므로)


🧬 트랜잭션의 4가지 특성: ACID

1️⃣ Atomicity (원자성)

트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징("all or nothing")

트랜잭션 내의 모든 작업은 하나의 단위로 실행되어야 함
중간에 오류가 발생하면 전체 작업이 ROLLBACK

ex) 은행에서 A 계좌 -> B 계좌, 10만원 이체 시

  1. A 계좌 잔액 조회
  2. A 계좌에서 10만원 출금
  3. B 계좌에 10만원 입금

이 세 작업 중 하나라도 실패하면, 전체 트랜잭션은 실패로 간주되어 모두 되돌려야

커밋과 롤백

커밋(commit)은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 의미함

롤백(rollback)은 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 것(취소)을 말함

구분 설명
COMMIT 모든 작업을 데이터베이스에 영구 반영
ROLLBACK 모든 작업을 수행 이전 상태로 되돌림

트랜잭션 전파

트랜잭션이 이미 진행 중인 상태에서, 또 다른 트랜잭션이 호출될 때 기존 트랜잭션과 어떻게 연결될지를 정의하는 방식

ex) Spring 프레임워크에서는 @Transactional 어노테이션을 통해 전파 방식을 설정할 수 있음
| 전파 수준 (Propagation) | 설명 |
|--------------------------|------|
| REQUIRED | 기존 트랜잭션이 있으면 참여, 없으면 새로 생성 |
| REQUIRES_NEW | 항상 새로운 트랜잭션 생성, 기존 트랜잭션은 일시 중단 |
| NESTED | 기존 트랜잭션 내부에서 중첩 트랜잭션 생성 (DB 지원 필요) |


2️⃣ Consistency (일관성)

트랜잭션 수행 전과 후에 데이터 무결성 제약조건(제약조건, 외래키 등)이 항상 만족되어야 함
= '허용된 방식'으로만 데이터를 변경해야 하는 것을 의미함
ex) 출금 후 잔액이 마이너스가 되면 안됨


3️⃣ Isolation (격리성)

동시에 여러 트랜잭션이 수행될 때, 각 트랜잭션이 다른 트랜잭션의 작업에 영향을 받지 않아야 함
= 트랜잭션 수행 시 서로 끼어들지 못하는 것을 말함

여러 사용자가 같은 데이터에 접근할 수 있어야 하기에 격리 수준(Isolation Level)을 설정함
=> 여러 개의 격리 수준으로 나뉘어 격리성을 보장함

추후 정리 예정
격리 수준에는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 등이 있음
격리 수준에 따라 Dirty Read, Non-repeatable Read, Phantom Read 같은 현상이 발생할 수 있음


4️⃣ Durability (지속성)

성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미함
=> 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함
ex) 체크섬, 저널링, 롤백 등


✅ 요약

항목 설명
트랜잭션 논리적인 작업을 하나의 단위로 묶는 것
COMMIT 트랜잭션의 변경사항을 DB에 확정 반영
ROLLBACK 트랜잭션의 변경사항을 모두 취소
ACID 트랜잭션이 만족해야 할 4가지 속성
원자성, 일관성, 격리성, 지속성
격리 수준 트랜잭션 간 간섭을 방지하기 위한 설정 단계