[내배캠 Spring TIL] Spring @Transactional
Spring
Java
2024년 8월 19일
트랜젝션에 대해 공부한 내용을 정리해보도록 하겠다.
트랜젝션 #
여러 작업이 하나의 단위로 실행되는 것을 의미한다. 이 작업들이 모두 성공해야만 최종적으로 데이터베이스에 반영된다. 만약 하나라도 실패하면, 모든 작업은 취소(rollback)된다.
사용 #
@Transactional
어노테이션을 메서드나 클래스 레벨에 선언하면, 해당 범위 내에서 트랜잭션이 적용된다.
@Transactional
public Todo createTodo(String content, String password, Long userId) {
// 서비스 로직
}
예외 처리와 롤백(rollback) #
기본적으로 @Transactional
은 RuntimeException
및 그 하위 클래스에서만 롤백이 발생한다.
특정 예외에서 롤백을 원할 경우 rollbackFor
속성을 사용하여 지정할 수 있다.
전파(Propagation) #
전파 옵션은 트랜잭션이 이미 존재하는지 여부에 따라 현재 메서드가 새 트랜잭션을 시작할지, 기존 트랜잭션에 참여할지 등을 결정한다.
주요 전파 옵션:
REQUIRED
: 기본값으로, 현재 트랜잭션이 없으면 새로운 트랜잭션을 시작하고, 있으면 기존 트랜잭션에 참여한다.REQUIRES_NEW
: 항상 새로운 트랜잭션을 시작하며, 기존 트랜잭션이 있으면 일시 중단된다.NESTED
: 현재 트랜잭션이 있으면 중첩 트랜잭션으로 실행되며, 없으면 새로운 트랜잭션을 시작한다.