티스토리 뷰
트랜잭션이란?
여러 과정을 하나의 행위로 묶을 때 사용됩니다
여러 단계를 수행했을때, 하나라도 실패하면 모두 취소되어야 합니다. 이렇게 함으로써 데이터의 무결성을 보장합니다
스프링에서 사용방법
@Transactional을 클래스 또는 메소드 레벨에 명시하면 해당 메써드 호출시 지정된 트랜잭션이 작동하게 됩니다
단, 같은 빈 내에서 @Transactional이 명시된 다른 메소드를 호출해도 작동하지 않습니다Spring Framework는 내부적으로 AOP를 통해 해당 어노테이션을 인지하여 프록시를 생성하여 트랜잭션을 자동 관리하기 때문입니다
하지만 스프링부트에서는 바이트 코드를 수정(CGLIB)이 기본으로 변경 되었습니다
전파옵션(Propagation)
▶ REQUIRED
- 디폴트 속성, 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성합니다.
▶ SUPPORTS
- 이미 시작된 트랜잭션이 있으면 참여하고 그렇지 않으면 트랜잭션 없이 진행하게 만듭니다.
▶ MANDATORY
-
REQUIRED와 비슷하게 이미 시작된 트랜잭션이 있으면 참여합니다.
-
반면에 트랜잭션이 시작된 것이 없으면 새로 시작하는 대신 예외를 발생시킵니다.
-
혼자서는 독립적으로 트랜잭션을 진행하면 안 되는 경우에 사용합니다.
▶ REQUIRES_NEW
-
항상 새로운 트랜잭션을 시작합니다.
-
이미 진행 중인 트랜잭션이 있으면 트랜잭션을 잠시 보류시킵니다.
▶ NOT_SUPPORTED
-
트랜잭션을 사용하지 않게 합니다.
-
이미 진행 중인 트랜잭션이 있으면 보류시킵니다.
▶ NEVER
-
트랜잭션을 사용하지 않도록 강제합니다.
-
이미 진행 중인 트랜잭션도 존재하면 안된다 있다면 예외를 발생시킵니다.
▶ NESTED
-
이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션을 시작합니다.
-
중첩 트랜잭션은 트랜잭션 안에 다시 트랜잭션을 만드는 것입니다.
-
하지만 독립적인 트랜잭션을 만드는 REQUIRES_NEW와는 다릅니다.
'Spring' 카테고리의 다른 글
[Spring] 트랜잭션(Transaction) 동작 원리 (0) | 2020.12.05 |
---|---|
[Spring] 영속성 컨텍스트(Persistence Context)란? (0) | 2020.11.24 |
[Spring] Jackson이란? (0) | 2020.11.23 |
- Today
- Yesterday
- template method
- exception
- Effective JAVA
- Design Pattern
- LAMBDA
- JMeter
- Spring
- 영속성
- Serializable
- gslb
- Concurrecy
- reactive
- observable
- 디자인패턴
- iterable
- template
- reactive stream
- nosql
- jdk11
- Redis
- strategy
- 부하테스트
- object
- in-memory
- 메인보드#asrock b650m #조립pc #후기이벤트
- concurrency
- Java
- jvm
- Serialize
- Observer Pattern
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |