[개발] 프로그램 지식

[java] @Transactional 란? 개념, 사용법, 예제

  • -
반응형

@Transactional: 개념, 사용법, 예제

1. @Transactional이란?

@Transactional은 Spring Framework에서 제공하는 애너테이션으로, 데이터베이스 트랜잭션 관리를 단순화하기 위해 사용됩니다. 이 애너테이션은 메서드나 클래스 수준에서 선언하여 트랜잭션의 시작과 종료를 자동으로 처리합니다.

 

 

 

 

 

2. @Transactional의 주요 기능

@Transactional은 다음과 같은 트랜잭션 관리 기능을 제공합니다:

  • 트랜잭션 시작과 종료: 메서드 실행 전 트랜잭션을 시작하고, 실행 후 커밋 또는 롤백합니다.
  • 예외 처리: RuntimeException 또는 Error가 발생하면 자동으로 트랜잭션을 롤백합니다.
  • 격리 수준 설정: 데이터베이스의 트랜잭션 격리 수준을 설정할 수 있습니다.
  • 전파 옵션: 메서드 간 트랜잭션 전파 방식을 정의할 수 있습니다.

 

 

 

 

 

 

 

3. @Transactional 주요 속성

@Transactional은 다양한 속성을 통해 트랜잭션 동작을 제어할 수 있습니다:

  • propagation: 트랜잭션 전파 방식을 정의합니다. (예: REQUIRED, REQUIRES_NEW)
  • isolation: 트랜잭션 격리 수준을 설정합니다. (예: READ_COMMITTED, SERIALIZABLE)
  • timeout: 트랜잭션이 완료될 때까지 기다리는 최대 시간을 초 단위로 설정합니다.
  • readOnly: 읽기 전용 트랜잭션 여부를 설정합니다.
  • rollbackFor: 롤백이 발생해야 할 예외를 지정합니다.
  • noRollbackFor: 롤백이 발생하지 않을 예외를 지정합니다.

 

 

 

 

 

 

 

 

4. @Transactional 사용 예제

아래는 @Transactional을 사용하는 간단한 예제입니다:

1) 기본 사용법


import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void createUser(User user) {
        // 사용자 저장 로직
        userRepository.save(user);
        // 추가 로직
    }
}

 

 

 

 

2) 고급 설정


import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, timeout = 5)
public void updateAccount(Account account) {
    // 계좌 업데이트 로직
    accountRepository.save(account);
}

 

 

 

 

 

 

 

 

 

5. @Transactional의 작동 방식

@Transactional은 Spring의 AOP(Aspect-Oriented Programming)를 활용하여 트랜잭션을 관리합니다. 메서드 호출 시 트랜잭션 프록시가 생성되어 트랜잭션 시작, 커밋, 롤백을 제어합니다.

 

 

 

 

 

 

 

6. 사용 시 유의점

  • @Transactional이 적용된 메서드는 프록시 객체를 통해 호출되어야 합니다. 동일 클래스 내에서 호출하면 작동하지 않을 수 있습니다.
  • 트랜잭션이 올바르게 작동하려면 데이터베이스에서 트랜잭션을 지원해야 합니다.
  • readOnly 속성을 설정하면 데이터를 변경하려는 작업에서 오류가 발생할 수 있습니다.

 

 

 

 

 

 

 

 

결론

@Transactional은 데이터 무결성을 보장하며, 데이터베이스 작업에서 발생할 수 있는 오류를 최소화하는 데 매우 유용합니다. 올바르게 설정하여 애플리케이션의 안정성과 성능을 향상시키세요.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.