[Spring] 스프링 @Transactional 작동 안할때
- 코딩/Spring
- 2022. 11. 10.
[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을 조절하여 트랜잭션 동작을 수정할 수 있습니다.
'코딩 > Spring' 카테고리의 다른 글
[Spring] Entity vs DTO vs VO (0) | 2022.11.11 |
---|---|
[Spring] JPA 생성, 변경 일시 자동생성 및 format 변경 (0) | 2022.11.11 |
[Spring] Logging Framework 와 Logback 비교 (0) | 2022.11.10 |
[Spring] Entity를 Dto로 변환(MapStruct) (0) | 2022.11.10 |
[Spring] @Request Body에서는 Setter가 필요없는 이유 (0) | 2022.11.09 |