본문 바로가기
📔개발자 일기 | | TIL

[20220328] 개발자 일기 & TIL

by 캔 2022. 3. 28.

집안 사정으로 인해 지난주에 TIL을 하지 못했다. 지지난주부터 조짐이 있었는데 일이 터져버리는 바람에 어쩔 수가 없었다. 이번 주부터는 열심히 다시 시작해보려고 한다.

 

스프링 @Transactional 애너테이션의 propagation 옵션

Propagation.REQUIRED: 기본값. 부모 트랜잭션 있으면 부모 트랜잭션 내에서 실행. 없으면 새로운 트랜잭션 생성.

자식 트랜잭션 내 예외 발생 시 부모 트랜잭션도 롤백.

 

Propagation.REQUIRED_NEW: 항상 새로운 트랜잭션 생성.

부모 트랜잭션과 자식 트랜잭션이 독립적이므로, 자식 트랜잭션 내에서 예외 발생 시 자식 트랜잭션만 롤백되고 부모 트랜잭션은 롤백 안 됨.

 

Propagation.NESTED: 해당 메서드가 부모 트랜잭션에서 진행될 경우 별개로 커밋되거나 롤백될 수 있다.

둘러싼 부모 트랜잭션이 없을 경우 Propagation.REQUIRED와 동일하게 작동한다. 차이점은 SAVEPOINT를 지정한 시점까지 부분 롤백이 가능하다.(SAVEPOINT 지원 데이터베이스만 사용 가능)

 

Propagation.MANDATORY: 부모 트랜잭션이 있을 경우에만 실행. 그렇지 않으면, 예외 발생.

-> 혼자서는 사용 불가.

 

Propagation.SUPPORTS: 부모 트랜잭션이 있으면 부모 트랜잭션으로 동작하고, 그렇지 않으면 non-transactional로 동작.

-> 자식 트랜잭션으로서만 사용, 그 외에는 트랜잭션을 사용하지 않음.

 

Propagation.NOT_SUPPORT: non-transactional로 실행, 부모 트랜잭션이 존재하면 일시 정지.

-> 트랜잭션을 사용하지 않음. 사용하면 일단 보류.

 

Propagation.NEVER: non-transactional로 실행, 부모 트랜잭션이 존재하면 예외 발생.

-> 트랜잭션을 사용하지 않음. 사용하면 예외.

'📔개발자 일기 | | TIL' 카테고리의 다른 글

[20220330] 개발자 일기  (0) 2022.03.30
[20220329] 개발자 일기 & TIL  (0) 2022.03.29
[20220321] 개발자 일기 & TIL  (0) 2022.03.21
[20220317] 개발자 일기&TIL  (0) 2022.03.17
[20220316] 개발자 일기 & TIL  (0) 2022.03.16