@Transactional 어노테이션

쌍제이(JJVoiture)·2024년 12월 18일
0

@Transactional 어노테이션은 Spring 프레임워크에서 제공하는 트랜잭션 관리를 위한 기능이다. 메서드나 클래스 단위로 트랜잭션을 선언적으로 설정할 수 있다. 이를 통해 데이터베이스 작업의 일관성과 안정성을 보장하며, 복잡한 트랜잭션 관리 코드를 간소화할 수 있다.

트랜잭션의 정의

트랜잭션은 데이터베이스 작업의 논리적 단위로, 여러 작업을 하나로 묶어 일관성을 유지하는 기능이다. 예를 들어, 계좌 이체 작업에서 출금과 입금이 모두 성공해야 작업이 완료된 것으로 간주되며, 중간에 문제가 발생하면 모든 작업이 취소되어 데이터의 무결성을 보장한다.

동작 원리

  1. 트랜잭션 시작: @Transactional 어노테이션이 적용된 메서드가 호출되면 트랜잭션이 시작된다.
  2. 정상 처리: 메서드 실행이 완료되면 트랜잭션이 커밋되어 작업 결과가 데이터베이스에 반영된다.
  3. 예외 발생: 실행 중에 RuntimeException 또는 Error가 발생하면 트랜잭션이 롤백되어 데이터베이스 작업이 취소된다.

사용 방법

@Service
public class AccountService {

    @Transactional
    public void transferMoney(String fromAccount, String toAccount, int amount) {
        withdraw(fromAccount, amount); // 출금 처리
        deposit(toAccount, amount);   // 입금 처리
    }
}

주요 특징

  1. 선언적 트랜잭션 관리: 트랜잭션의 시작과 종료를 코드로 명시적으로 처리하지 않아도 된다.
  2. 기본 롤백 정책: RuntimeExceptionError에 대해 자동으로 롤백된다. 기타 예외에 대해서는 설정을 통해 롤백을 지정할 수 있다.
  3. 트랜잭션 전파(Propagation): 트랜잭션의 전파 방식을 지정하여, 호출되는 메서드 간 트랜잭션 관계를 제어할 수 있다.
  4. 읽기 전용 트랜잭션: 읽기 전용 작업에서 성능 최적화를 위해 @Transactional(readOnly = true)를 설정할 수 있다.

주의 사항

  • @Transactional은 Spring AOP를 기반으로 동작하므로, 같은 클래스 내에서 메서드를 직접 호출하면 트랜잭션이 적용되지 않을 수 있다.
  • 체크 예외(Checked Exception)는 기본적으로 롤백 대상이 아니며, 롤백을 원할 경우 rollbackFor 속성을 사용하여 명시적으로 설정해야 한다.
  • 트랜잭션 처리를 위해 데이터베이스와의 연결 및 설정이 제대로 구성되어 있어야 한다. 설정이 누락되거나 잘못될 경우 예상대로 동작하지 않을 수 있다.

@Transactional 어노테이션을 사용함으로써 트랜잭션 관리를 간소화하고 데이터베이스 작업의 안정성을 확보할 수 있다.

profile
안녕하세요. 중구난방 개발자 쌍제이입니다.

0개의 댓글