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

ckstj8027님의 프로필 이미지

작성한 질문수

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

예외와 트랜잭션 커밋, 롤백 - 기본

TransactionManager 주입

작성

·

84

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

6:32 에서

단순 테스트 코드이고 jpa 사용하지않았는데

JpaTransactionManager 가 주입 되는 이유는 먼가요 ?

 

 

 

 

답변 1

0

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

스프링 부트에 Spring Data JPA 라이브러리를 추가해주면 애플리케이션 구동 시 기본적으로 JpaTransactionManager를 빈으로 등록하기 때문입니다 🙂

@SpringBootTest 가 붙은 테스트 코드이기 때문에 테스트 실행 시 @SpringBootApplication 이 붙은 메인 클래스를 찾아 해당 설정대로 스프링 컨테이너를 구동하기 시작합니다. 이 때 TransactionManager에 대한 빈이 따로 등록되어 있지 않고, Spring Data JPA 라이브러리를 사용하고 있으면 스프링 부트의 AutoConfiguration 설정에 의해 JpaTransactionManager를 자동으로 빈으로 등록하게 됩니다.

좀 더 정확히 말씀드리자면 JpaBaseConfiguration 에서 Auto Configuration 시 TransactionManager 빈이 없으면 JpaTransactionManager 를 만들어 빈으로 등록해주게 됩니다! 다음 링크를 참고해주십쇼!

https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java#L98

스프링 부트의 Auto Configuration 에 대해 궁금하시다면 영한님의 스프링 부트 - 핵심 원리와 활용 강의를 학습해보시길 추천합니다!

감사합니다.

ckstj8027님의 프로필 이미지
ckstj8027
질문자

스프링 부트에 Spring Data JPA 라이브러리를 추가해주면 애플리케이션 구동 시 기본적으로 JpaTransactionManager를 빈으로 등록 즉 프링 부트의 AutoConfiguration 설정에 규칙(Spring Data JPA 라이브러리 가있고 TransactionManager에 대한 빈이 따로 등록 x 이면)에 의해 JpaTransactionManager를 자동으로 빈으로 등록이라고 말씀해주셨는데

예를들어 mybatis 나 jdbc 기술사용할때는 DataSourceTransactionManager 로 주입되어 사용되는데 이경우에는 스프링부터가 해당 기술에 맞게 TransactionManager을 찾아주잖아요

하지만 위 강의의 테스트코드에선 사실 어떤 TransactionManager 를 주입받아도 상관없는경우잖아요 이 경우는 위의 규칙에 따라 JpaTransactionManager가 주입되었다 ! 이에대한 자세한 내용은 스프링 부트 - 핵심 원리와 활용 을 참고하라! 정도로 이해하면 될까요 ?

jdbc 라이브러리를 사용할 때도 JPA와 동일하게 스프링 부트의 auto-configuration 설정을 통해 TransactionManager 빈을 등록해주게 됩니다.

예를 들어 JDBC 에서는 DatasourceTransactionManagerAutoConfiguration 에서 TransactionManager 빈이 등록되어 있지 않을 때, DataSourceTransactionManager를 생성해 빈으로 주입해주고 있습니다.

https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java#L63

이렇게 TransactionManager와 같은 빈들을 자동으로 등록해주는 스프링 부트의 Auto Configuration 에 대해서 이해하시는데 본 강의가 도움이 될 것 같아 추천을 드리게 되었습니다 🙂

그리고 말씀하신 것처럼 이 테스트 코드에서는 TransactionManager의 구현체가 어떤 것이든 상관없는 것은 맞습니다!