T_era
@Transactional에 대하여 본문
@Transactional 어노테이션 정리
주요 목적:
- 하나의 논리적인 작업 단위 (Unit of Work) 정의
- 해당 작업 단위 내의 여러 데이터 접근 작업을 원자적으로 (Atomically) 관리
- 성공 시 커밋 (Commit): 모든 작업 성공 시 데이터베이스에 변경 사항 반영
- 실패 시 롤백 (Rollback): 하나라도 실패 시 모든 변경 사항 이전 상태로 복구 (데이터 일관성 유지)
예시:
- @Transactional 적용 메서드 내 2개 이상 DB 연산 시, 전체 성공 시 커밋, 하나라도 실패 시 전체 롤백
적용 위치:
- Service 계층 (일반적): 여러 데이터 접근 로직을 묶어 트랜잭션 관리 (예: 스케줄 생성 시 스케줄 저장 + 사용자 정보 업데이트)
핵심 원리:
- 원자성 (Atomicity): DB 연산을 불가분한 하나의 작업 단위로 취급
- 성공 아니면 실패 (All or Nothing): 모든 DB 변경 성공 시 커밋, 중간 실패 시 전체 롤백
단일 SQL 작업 시 사용 여부:
- 일반적으로 불필요: DB는 단일 SQL 쿼리에 대해 기본적인 원자성 보장
단일 SQL 작업 시 고려 사항 (사용할 수 있는 경우):
- 예외 처리 일관성: Spring의 데이터 접근 예외 변환 활용
- AOP 기반 공통 로직 적용: 로깅, 성능 측정 등
- 격리 수준 제어: 기본 격리 수준 외 다른 수준 설정 (@Transactional(isolation = Isolation.SERIALIZABLE))
- 읽기 전용 힌트: 조회 작업 성능 최적화 (@Transactional(readOnly = true))
'Programing > Spring' 카테고리의 다른 글
| Cookie와 Session (0) | 2025.05.15 |
|---|---|
| Validation과 예외 처리: 함께 하지 않아야 하는가? (0) | 2025.05.15 |
| JdbcTemplate.query에서 sql의 컬럼을 바인딩할 수 없는 이유 (0) | 2025.05.13 |
| @Valid와 BindingResult의 관계 및 처리 방법 (0) | 2025.05.13 |
| Service계층과 Repository계층에서의 로직 작성 (0) | 2025.05.08 |