-
private 메서드에 @Transactional이 적용될까?Spring 2024. 4. 2. 15:08
Spring은 AOP를 사용해서 @Transactional 애너테이션을 처리하고, 이 과정에서 동적으로 프록시 객체를 생성한다.
생성된 프록시 객체는 원래의 Bean 객체를 대신해서 호출된다.
private 메서드나 private 필드는 해당 클래스에서만 접근 가능하기 때문에 외부에서 접근해서 프록시 객체를 생성할 수 없게 되는 것이다.
그래서 @Transactional 애너테이션을 가지고 있는 private 메서드에 접근하려고 해도 프록시 객체를 생성할 수 없기 때문에 해당 애너테이션을 무시하게 된다.
하지만 @Transactional 애너테이션이 적용된 public 메서드에서 private 메서드를 호출하면 해당 private 메서드에도 Transaction이 적용된다.
@Transactional
Spring에서 @Transactional 애너테이션은 메서드 호출 시 트랜잭션을 적용해 준다.
해당 매서드 실행 도중 예외가 발생하면 그동안 수행되었던 작업을 롤백해 준다.
@Transactional 애너테이션을 사용해서 리소스를 안전하게 처리할 수 있다.
AOP(Aspect-Oriented Programming)
AOP는 객체 지향 프로그래밍을 보완하기 위한 프로그래밍 기업이다.
AOP의 핵심은 관심사를 분리하는 것이며, 공통으로 사용되는 기능(로깅, 보안, 트랜잭션, 캐싱 등)을 모듈화하고 캡슐화해서 핵심 비지니스 로직과 분리시킨다.
마무리
1. private 메서드에는 @Transactional 애너테이션이 적용되지 않는다.
2. @Transactional 애너테이션이 적용된 public 메서드가 호출한 private 매서드에는 Transaction이 적용된다.
'Spring' 카테고리의 다른 글
[Spring] 필터(Filter)와 인터셉터(Interceptor) (0) 2024.07.21 @RequiredArgsConstructor란? (0) 2024.04.05 Spring Boot와 AWS로 혼자 구현하는 웹 서비스 - 3장 Spring Boot에서 데이터베이스 다뤄보자 (0) 2022.02.26 Spring Boot와 AWS로 혼자 구현하는 웹 서비스 - 2장 Spring Boot에서 테스트 코드를 작성하자 (1) 2022.02.20 [Spring] Maven, pom.xml (0) 2021.04.13