트랜잭션 정의
- 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미
- begin, commit을 자동으로 수행해줌
- 예외 발생 시 rollback 처리를 자동으로 수행해줌
- 일련의 단위들을 묶어서 한번에 처리
트랜잭션 처리 방법
- 스프링에서는 간단하게 어노테이션 방식으로 @Transactional을 메소드, 클래스, 인터페이스 위에 추가하여 사용하는 방식 👉 이 방식으로 선언적 트랜잭션이라 부르며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit혹은 rollback을 진행해줌
@Transactional 옵션
- isolation : 트랜잭션에서 일관성없는 데이터 허용 수준을 설정
- propagation : 트랜잭션 동작 도중 다른 트랜잭션 호출시, 어떻게 할 것인지 지정하는 옵션
- noRollbackFor : 특정 예외 발생 시 rollback 하지 않음
- rollbackFor : 특정 예외 발생 시 rollback 함
- timeout : 지정한 시간 내에 메소드 수행이 완료되지 않으면 rollback 함 (-1일 경우 timeout을 사용 안함)
- readOnly : 트랜잭션을 읽기 전용으로 설정
(rollbackFor = Exception.class)
- @Transactional은 기본적으로 Unchecked Exception Error만을 rollback하고 있음
- 그렇기 때문에 모든 예외에 대해서 rollback을 진행하고 싶은 경우 (rollbackFor = Exception.class)를 붙여야 한다는 것을 깨달음
참조 : https://velog.io/@kdhyo/JavaTransactional-Annotation-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-26her30h | kdhyo