inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

TransactionManager 주입

188

kkkkkk

작성한 질문수 42

1

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

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

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

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

 

6:32 에서

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

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

 

 

 

 

spring mvc jpa querydsl spring-data-mybatis spring-jpa

답변 1

0

y2gcoder

안녕하세요. 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 에 대해 궁금하시다면 영한님의 스프링 부트 - 핵심 원리와 활용 강의를 학습해보시길 추천합니다!

감사합니다.

1

kkkkkk

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

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

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

0

y2gcoder

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의 구현체가 어떤 것이든 상관없는 것은 맞습니다!

RepositoryTest의 패키지 위치가 domain인 이유

0

29

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

29

1

update()에 사용하는 setter 질문드립니다.

0

47

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

83

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

173

1

@repository 어노테이션

0

89

3

ItemService

0

58

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

54

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

178

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

77

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

76

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

112

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

83

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

72

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

102

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2