Skip to content

Latest commit

 

History

History
22 lines (11 loc) · 1.54 KB

50.md

File metadata and controls

22 lines (11 loc) · 1.54 KB

Spring 은 @Transactional 어노테이션 붙인 메소드를 어떻게 찾고 트랜잭션을 처리하나요? 그 내부 구현을 상세하게 설명해 주세요.

@Transactional 애너테이션을 트랜잭션 속성 정보로 사용하도록 지정하면 스프링은 @Transactional이 부여된 모든 오브젝트를 자동으로 타깃 오브젝트로 인식합니다.

이때 TransactionAttributeSourcePointcut을 포인트컷으로 사용합니다.

스프링은 @Transactional이 붙은 메서드를 포인트컷으로 등록해놓았다가 해당 애너테이션이 있는 빈이 등록될 때, 해당 클래스가 트랜잭션 부가기능(어드바이스)이 적용될 수 있는 포인트컷에 해당하는지 검사한 후, 해당한다면 트랜잭션 부가기능을 담은 프록시를 빈 후처리기를 통해 반환합니다.

이에따라 다른 빈에서 이를 호출할때, 프록시를 통해서 해당 메서드를 invoke하며 이때 트랜잭션 기능이 추가되게 됩니다.

질문 사항

Q. 어떤 메서드 하나라도 @Transactional이 붙어 있으면 Service가 프록시로 생성되는건가요?

@Transactional이 붙어있으면 프록시가 생성됩니다. 다만 애너테이션이 붙어있지 않은 메서드라면 포인트컷에 등록되지 않기 때문에 프록시에서는 트랜잭션 부가 기능없이 단순히 메서드 호출을 위임하기만 합니다.

Q. AOP와 프록시에 대해 설명해주세요!

TODO: 다른 관련 인터뷰 질문에서 처리하고 링크 달기.