[Spring] @Transactional 정리

2022. 4. 3. 20:54Dev/Spring

📌 @Transactional 이란

스프링에서 지원하는 트랜젝션 처리 방식이다. @Transactional을 메소드, 클래스, 인터페이스 위에 추가하면 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit 혹은 rollback을 진행해준다.

 

📌 @Transactional의 속성

속성 설명
propagation Tx의 경계(boundary)를 설정하는 방법을 지정
isolation Tx의 isolation level을 지정. DEFAULT, READ_UNCOMMITED, READ_COMMITED,REPEATABLE_READ,
SERIALIZABALE
readOnly Tx이 데이터를 읽기만 하는 경우, true로 지정하면 성능이 향상
rollbackFor 지정된 예외가 발생하면, Tx을 rollback
RuntimeException과 Error는 자동 rollback
noRollbackFor 지정된 예외가 발생해도, Tx을 rollback하지 않음
timeout 지정된 시간(초) 내에 Tx이 종료되지 않으면, Tx를 강제 종료

 

📌 propagation 속성

설명
REQUIRED Tx이 진행중이면 참여하고, 없으면 새로운 Tx 시작(default)
REQUIRES_NEW Tx이 진행중이든 아니든, 새로 Tx 시작
NESTED Tx이 진행중이면, Tx의 내부 Tx로 실행
MANDATORY 반드시 진행 중인 Tx내에서만 실행가능. 아니면 예외 발생
SUPPORTS Tx이 진행중이든 아니든 상관없이 실행
NOT_SUPPORTED Tx없이 처리. Tx이 진행중이면 잠시 중단
NEVER Tx없이 처리. Tx이 진행중이면 예외 발생

 


개인 학습 기록용이기 때문에 오류가 있을 수 있습니다.

양해 부탁드립니다🙂

 

📚 참고

패스트캠퍼스 강의 <스프링의 정석: 남궁성과 끝까지 간다>