강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김동민님의 프로필 이미지
김동민

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 적용 확인

@Transactional는 프록시 객체를 스프링 빈으로 등록까지 해주나요?

해결된 질문

작성

·

430

0

질문 있습니다.

강의 자료를 보면 "@Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 트랜잭션 AOP는 프록시를 만들어서 스프링 컨테이너에 등록한다" 라고 되어 있습니다. (11페이지 마지막줄)

 

그런데 서포터님의 답변 중 강의 자료와 조금 다르게 해석되는 말씀이 있어 질문 드립니다.

Screen Shot 2023-12-13 at 1.08.52 PM.png

 

저는 @Transactiona이 있으면 생성과 스프링 빈 등록까지 해주는 것으로 이해했는데, 그게 아니라 프록시 객체 생성까지만 하고, 스프링 빈 등록은 따로 해줘야 하는 건가요??

퀴즈

스프링이 다양한 데이터 접근 기술(JDBC, JPA 등)의 트랜잭션을 일관되게 관리하기 위해 제공하는 핵심 기능은 무엇일까요?

데이터베이스 드라이버 자동 선택

트랜잭션 추상화

SQL 쿼리 자동 생성

연결 풀 관리

답변 1

1

안녕하세요. 김동민님, 공식 서포터즈 y2gcoder입니다.

@Transactional 은 스프링 AOP를 기반으로 작동하고 스프링 AOP는 빈 후처리기를 기반으로 작동합니다! 빈 후처리기는 스프링 빈에 저장할 목적으로 생성한 객체를 실제로 스프링 컨테이너에 빈으로 저장하기 전에 조작해주는 것입니다. 여기서 조작은 객체를 조작하거나, 심지어 다른 객체를 조작하는 것까지 가능합니다!
결국 @Transactional 또한 빈 후처리기에서 원래 등록하려고 했던 객체를 기반으로 프록시 객체를 만들어서 빈으로 등록해주는 것이라 이해할 수 있습니다.

그러한 점에서 직접 언급해주셨던 강의자료의 말과 같다고 저는 생각합니다. 다만 우리가 스프링 핵심원리 - 기본편에서 학습했듯이 빈으로 등록하는 것은 @Bean이나 @Component를 통해서 해주는 것입니다. 그 과정에서 대상 클래스에 @Transactional이라는 선언적인 애노테이션이 있으면 해당 빈 객체를 후처리시 트랜잭션 기능을 바꿔친 후 등록해주게 되는 것입니다.

위의 질문에서는 원 질문자 분께서 @Transactional 만 붙이면 빈으로 등록되는 것 아니냐고 질문을 달아주셨고 그 전제하에 추가 질문을 달아주셨기 때문에 @Transactional 만으로는 스프링 빈으로 등록할 수 없다는 의도로 위와 같이 답변했습니다!

답변을 다시 살펴보니 제가 충분히 오해할만한 답변을 한 것 같습니다. 좀 더 답변을 달 때 신중하게 의도를 전달할 수 있도록 노력하겠습니다!

감사합니다.

김동민님의 프로필 이미지
김동민
질문자

자세한 답변 감사합니다!

김동민님의 프로필 이미지
김동민

작성한 질문수

질문하기