1️⃣ 트랜잭션이란?
트랜잭션은 데이터베이스에서 여러 작업을 하나의 단위로 묶어 처리하는 것
이때 여러 작업이 하나의 트랜잭션으로 처리되어야 하며,모두 성공하거나 모두 실패해야 함
✅ 트랜잭션의 특징
- 원자성(Atomicity): 트랜잭션은 하나의 단위로 처리되며, 모든 작업이 성공하거나 모두 실패
- 일관성(Consistency): 트랜잭션의 실행 전후로 데이터베이스는 일관성 있는 상태를 유지
- 격리성(Isolation): 동시에 실행되는 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행
- 지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 반영
2️⃣ 트랜잭션 전파 속성(Propagation)
트랜잭션 전파 속성은 트랜잭션이 다른 트랜잭션을 호출할 때 어떻게 동작할지를 정의
✅ 전파 속성 종류
1. REQUIRED (기본값)
- 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 시작
- 대부분의 경우 이 속성을 사용
2. REQUIRES_NEW
- 항상 새로운 트랜잭션을 시작합니다. 기존 트랜잭션이 있더라도, 현재 메서드는 새로운 트랜잭션을 시작하고 이전 트랜잭션과 독립적으로 동작
3. NESTED
- 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션 내에서 중첩된 트랜잭션을 생성합니다. 중첩된 트랜잭션은 독립적으로 커밋하거나 롤백할 수 있음
- 주 트랜잭션이 커밋될 때 중첩된 트랜잭션도 함께 커밋되거나 롤백
4. SUPPORTS
- 현재 트랜잭션이 있으면 그 트랜잭션을 사용하고, 없으면 트랜잭션 없이 실행
5. NOT_SUPPORTED
- 트랜잭션 없이 실행됩니다. 만약 이미 트랜잭션이 진행 중이라면 이를 일시적으로 중단하고 트랜잭션 없이 실행
6. MANDATORY
- 반드시 기존의 트랜잭션이 존재해야 합니다. 트랜잭션이 없으면 예외를 발생
7. NEVER
- 트랜잭션이 존재해서는 안 됩니다. 트랜잭션이 존재하면 예외를 발생
3️⃣ 트랜잭션 격리 수준(Isolation)
트랜잭션 격리 수준은 동시 실행되는 트랜잭션들이 서로 간섭하지 않도록 보장하는 방법을 정의
격리 수준에 따라 Dirty Read, Non-repeatable Read, Phantom Read 등의 현상이 발생
✅ 격리 수준 종류
1. READ_UNCOMMITTED
- 가장 낮은 격리 수준으로, 다른 트랜잭션이 커밋하지 않은 데이터도 읽을 수 있다.
- Dirty Read 현상이 발생할 수 있다.
2. READ_COMMITTED
- 커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션이 커밋한 데이터만 읽음
- Non-repeatable Read 현상이 발생할 수 있음
3. REPEATABLE_READ
- 트랜잭션 내에서 한 번 읽은 데이터는 다시 읽을 때 동일한 값이 보장됩니다. 다른 트랜잭션이 값을 수정할 수 없음
- Phantom Read 현상이 발생할 수 있음
4. SERIALIZABLE
- 가장 높은 격리 수준으로, 트랜잭션들이 순차적으로 실행되는 것처럼 보입니다. 다른 트랜잭션이 값을 수정하거나 추가 X
- Phantom Read도 방지
4️⃣ 트랜잭션 롤백 규칙(Rollback Rules)
트랜잭션이 실패할 경우, 트랜잭션을 롤백하여 이전 상태로 되돌려야 합니다. @Transactional 어노테이션은 롤백 규칙을 설정할 수 있다.
- 기본 롤백 규칙: 트랜잭션이 런타임 예외(RuntimeException)가 발생하면 롤백
- 롤백 예외 지정: rollbackFor 속성을 사용하여 특정 예외에 대해서 롤백을 지정할 수 있음
@Transactional(rollbackFor = Exception.class)
public void methodL() throws Exception {
// 예외가 발생하면 롤백
}
'SPRING' 카테고리의 다른 글
| [SPRING] @EventListener (3) | 2025.05.14 |
|---|---|
| [SPRING] @TransactionalEventListener (0) | 2025.05.13 |
| [SPRING] Java vs Kotlin - 코틀린 기초 정리 (1) | 2025.05.08 |
| [SPRING] 조건 검색 개선 (인덱싱, 파티셔닝, 분리 조회) (3) | 2025.05.02 |
| [SPRING] 파티셔닝(Partitioning) (1) | 2025.05.02 |