● 스프링 트랜잭션 개요
트랜잭션
- 전체 로직이 모두 다 반영되거나 도무 반영되지 않은 논리적인 작업의 묶음 (All or Nothing)
- 작업 완료를 커밋, 작업 취소를 롤백 이라 함
- 트랜잭션 기본 원칙
-> 원자성, 일관성, 고립성, 지속성
트랜잭션 경계
- 프리젠테이션 층과 비지니스 층 사이
- 프리젠테이션 층에 공개된 서비스의 메서드가 트랜잭션 시작과 종료

● 스프링 트랜잭션
스프링 트랜잭션 관리
- aop로 서비스에 트랜잭션 처리를 구현한 어드바이스 적용
- 트랜잭션 관리자와 트랜잭션 어드바이스 이용
스프링 트랜잭션 메니저
- 트랜잭션 관리자 : 데이터베이스에 연동 기술에 상관없이 동일한 방식으로 트랜잭션 관리 기능 제공
- PlatformTrandactionManager : 스프링 트랜잭션 처리 중심 인터페이스
- 대표적인 트랜잭션 구현 클래스 : 트랜잭션 시작,종료,롤백 등 정의 정보를 설정

트랜잭션 정의 정보
- 전파 속성 : 기존 트랜잭션 있는 상태에서 새로운 트랜잭션 별도로 생성하거나 포함시켜 실행하는 설정
- 독립성 수준 : 하나의 트랜잭션을 수행시 다른 트랜잭션 작업 끼어들지 못하는 정도
- 만료시간 : 트랜잭션 취소되는 시간
- 읽기 전용 상태 : 트랜잭션 내의 처리가 읽기 전용
전파속성 (propagation)
- Mandatory : 기존 트랜잭션 존재하면 포함, 존재않하면 예외 발생
- Nested : 기존 트랜잭션 존재하면 포함, 없으면 새로운 트랜잭션 생성
- Never : 기존 트랜잭션 존재하면 예외 발생, 없으면 트래잭션 없이 실행
- Supports : 기존 트랜잭션 존재하면 포함해서 실행, 없으면 트랜잭션 없이 실행
- not_supported : 트랜잭션 없이 실행
- required : 기존 트랜잭션 존재하면 트랜잭션에 포함, 없으면 새로운 트래잭션 생성
- required_new : 항사 새로운 트랜잭션 생성
격리 수준 속성 (Isolation)
- Default : db 설정을 따름, 기본 격리 수준
- Read_uncommited : 다른 트랜잭션에 의해 커밋되지 않은 데이터를 읽을 수 있다.
- Read_commited : 다른 트랜잭션에 의해 커밋된 데이터를 읽을 수 있다.
- Repeatable_read : 트랜잭션 내에서 동일 필드에 대해 처음 읽어 온 데이터와, 두번째 데이터 동일 보장
- Serializable : 가장 높은 격리 수준, 동일한 데이터에 대해 동시에 2개 이상의 트랜잭션이 수행될 수 있다.
트랜잭션 기능 사용법
- 트랜잭션 처리 방법
-> 선언적 트랜잭션 처리 : xml 설정, 애노테이션 설정
-> 명시적 트랜잭션 처리 : 소스 코드상 트랜잭션 처리 메서드를 호출 (복잡, 가독성 떨어짐)
'Spring' 카테고리의 다른 글
| [프로젝트] dto, mapper 개념 (0) | 2023.10.27 |
|---|---|
| [스프링] Security (0) | 2023.08.05 |
| [스프링] AOP (0) | 2023.08.02 |
| [스프링] MyBatis (0) | 2023.08.01 |
| [스프링] REST 아키텍처 (0) | 2023.08.01 |