[Spring] 스프링 @Transactional 작동 안할때

    [Spring] 스프링 @Transactional 작동 안할때 원인 및 해결방법 알아보기

    1. Spring AOP 설정이 되어 있지 않은 경우

    @Transactional 애노테이션을 사용하기 위해서는 Spring AOP 설정이 되어 있어야 합니다.

    해결방법 - @EnableAspectJAutoProxy 어노테이션을 설정 파일이나 설정 클래스에 추가해야 합니다.

    2. Transaction Manager 설정이 되어 있지 않은 경우

    트랜잭션을 관리하기 위해서는 Transaction Manager가 설정되어 있어야 합니다. 

    해결방법 - 사용하는 데이터베이스에 맞는 Transaction Manager를 설정 파일이나 설정 클래스에 추가해야 합니다.

    3. 메소드가 Public이 아닌 경우

    Spring AOP는 Public 메소드에만 적용됩니다. 

    해결방법 - 메소드의 접근 제어자를 Public으로 변경하면 됩니다.

    4. Checked Exception이 발생한 경우

    @Transactional 애노테이션은 RuntimeException과 Error에 대해서만 롤백 처리를 수행합니다. 만약 Checked Exception이 발생한다면 롤백 처리를 하지 않기 때문에, @Transactional 애노테이션이 동작하지 않을 수 있습니다.

    해결방법 - Checked Exception을 처리하기 위해서는 Exception을 RuntimeException으로 Wrapping 해주는 방법을 사용하면 됩니다.

    5. 동일한 클래스 내에서 @Transactional이 호출되는 경우

    동일한 클래스 내에서 @Transactional이 호출될 때는, @Transactional이 적용된 메소드 내부에서 다른 @Transactional 메소드를 호출할 경우 트랜잭션이 정상적으로 동작하지 않을 수 있습니다.

    해결방법 - 다른 클래스에 분리하여 @Transactional을 적용하거나, Propagation을 조절하여 트랜잭션 동작을 수정할 수 있습니다.

    댓글

    Designed by JB FACTORY