Spring/Spring

[Spring] 트랜잭션 전파 옵션

2022. 9. 7. 23:05
목차
  1. 트랜잭션 관련 포스팅
  2. 트랜잭션 전파 옵션
  3. 1) REQUIRED (default)
  4. 2) REQUIRES_NEW
  5. 3) SUPPORT
  6. 4) NOT_SUPPORT
  7. 5) MANDATORY
  8. 6) NEVER
  9. 7) NESTED
  10. 트랜잭션 전파와 옵션
  11. 참고

트랜잭션 관련 포스팅

  • [Spring] 트랜잭션 추상화 정리
  • [Spring] 트랜잭션 동기화 정리
  • [Spring] 트랜잭션 AOP 동작 흐름
  • [Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)
  • [Spring] 스프링 트랜잭션 전파와 롤백
  • [Spring] 트랜잭션 전파 옵션

 

 

트랜잭션 전파 옵션

  • 스프링은 다양한 트랜잭션 전파 옵션을 제공한다
  • 전파 옵션에 별도의 설정을 하지 않으면 REQUIRED가 기본으로 사용된다
  • 실무에서는 대부분 REQUIRED 옵션을 사용하고(+아주 가끔 REQUIRES_NEW), 나머지는 거의 사용하지 않는다
  • 나머지 옵션은 이렇게 있다는 사실만 알아두고, 필요할 때마다 찾아보자

 

1) REQUIRED (default)

  • 트랜잭션이 필수라는 뜻이다
    • 필수이기 때문에 없으면 만들고, 있으면 참여한다.
  • 가장 많이 사용하는 기본 설정으로서 기존 트랜잭션이 없으면 생성하고, 있으면 참여한다
  • 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
  • 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다

 

2) REQUIRES_NEW

  • 항상 새로운 트랜잭션을 생성한다
  • 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
  • 기존 트랜잭션 있음: 새로운 트랜잭션을 생성한다

 

3) SUPPORT

  • 트랜잭션을 지원한다는 뜻이다
  • 기존 트랜잭션이 없으면 없는대로 진행하고, 있으면 참여한다
  • 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
  • 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다

 

4) NOT_SUPPORT

  • 트랜잭션을 지원하지 않는다는 뜻이다
    • 지원하지 않을 뿐 기존 트랜잭션이 있다고 해서 예외를 발생시키진 않는다
  • 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
  • 기존 트랜잭션 있음: 트랜잭션 없이 진행한다(기존 트랜잭션은 보류한다)

 

5) MANDATORY

  • 트랜잭션이 반드시 있어야 한다
    • 말 그대로 트랜잭션이 의무사항이다
  • 기존 트랜잭션이 없으면 예외가 발생한다
  • 기존 트랜잭션 없음: IllegalTransactionStateException 예외 발생
  • 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다

 

6) NEVER

  • 트랜잭션을 사용하지 않는다는 의미이다
    • 기존 트랜잭션도 허용하지 않는 강한 부정의 의미로 이해하면 된다
  • 기존 트랜잭션이 있으면 예외가 발생한다
  • 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
  • 기존 트랜잭션 있음: IllegalTransactionStateException 예외 발생

 

7) NESTED

  • 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
  • 기존 트랜잭션 있음: 중첩 트랜잭션을 만든다
    • 중첩 트랜잭션은 외부 트랜잭션의 영향을 받지만, 중첩 트랜잭션은 외부에 영향을 주지 않는다
    • 중첩 트랜잭션은 롤백되어도 외부 트랜잭션은 커밋할 수 있다
    • 외부 트랜잭션이 롤백되면 중첩 트랜잭션도 함께 롤백된다
  • 참고
    • JDBC savepoint 기능을 사용한다(DB 드라이버에서 해당 기능을 지원하는지 확인이 필요하다)
    • 중첩 트랜잭션은 JPA에서 사용할 수 없다

 

트랜잭션 전파와 옵션

  • isolation, timeout, readOnly 옵션은 트랜잭션이 처음 시작될 때만 적용되고, 트랜잭션에 참여하는 경우에는 적용되지 않는다
  • 예를 들어 REQUIRED를 통한 트랜잭션 시작, REQUIRES_NEW를 통한 트랜잭션 시작 시점에만 적용된다

 

 

참고

스프링 DB 2편

저작자표시 비영리 (새창열림)

'Spring > Spring' 카테고리의 다른 글

[Spring] @Bean 애너테이션의 name 속성과 value 속성  (0) 2023.03.07
[Spring] 빈 중복 시 해결방법(@Autowired, @Qualifier, @Primary)  (0) 2022.12.19
[Spring] 스프링 트랜잭션 전파와 롤백  (0) 2022.09.07
[Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)  (0) 2022.09.01
[Spring] 테스트 코드를 작성할 때 @Transactional을 주의하라  (4) 2022.08.17
  1. 트랜잭션 관련 포스팅
  2. 트랜잭션 전파 옵션
  3. 1) REQUIRED (default)
  4. 2) REQUIRES_NEW
  5. 3) SUPPORT
  6. 4) NOT_SUPPORT
  7. 5) MANDATORY
  8. 6) NEVER
  9. 7) NESTED
  10. 트랜잭션 전파와 옵션
  11. 참고
'Spring/Spring' 카테고리의 다른 글
  • [Spring] @Bean 애너테이션의 name 속성과 value 속성
  • [Spring] 빈 중복 시 해결방법(@Autowired, @Qualifier, @Primary)
  • [Spring] 스프링 트랜잭션 전파와 롤백
  • [Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • BOJ
  • http
  • Git
  • Shortest Path
  • mysql
  • dp
  • 장고
  • fastapi
  • 그래프
  • atdd
  • 깊이 우선 탐색
  • 그래프 탐색
  • 브루트포스
  • 백준
  • 파이썬

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[Spring] 트랜잭션 전파 옵션
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.