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

임태희님의 프로필 이미지
임태희

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

DatasourceManager와 JpaTransactionManager 혼용

작성

·

428

0

안녕하세요 강의를 듣다가 궁금한것이 생겨서 질문 남깁니다.

강의 중간에 영한님께서, DatasourceManager와 JpaTransactionManager 를 함께 사용 하는 경우, JpaTransactionManager를 등록한다고 하셨고 그 이유에 대해서는 JpaTransactionManager가 DatasourceTransactionManager가 제공하는 기능의 대부분을 지원한다고 하셨습니다.

현재 개발 중인 프로젝트에서 myBatis와 JPA 두 가지를 사용하고 있어서 위 두 개의 트랜잭션 매니저를 사용 하고 있는데, 각 다른 트랜잭션 이 서로 호출하게 되면 Transaction Conflict 라는 에러가 발생해서 현재 말씀하셨던것 처럼 JpaTransactionManager 하나로 사용하려 합니다.

영한님께서는 대부분의 기능을 지원 한다고 하셨는데, 그렇다면 혹시 그 일부 지원하지 않는 기능에는 예를 들어 어떤 것들이 있을 수 있고, 혹시 발생 가능성이 있는 잠재적인 이슈가 있는지 궁금해서 질문을 남깁니다.

감사합니다

 

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 태희님

제가 사용한 경험에서는 특별한 이슈를 겪은 적은 없습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요. JPA에서 제공하는 JpaTransactionManager는 대부분의 기능을 지원하지만, 일부 제한된 기능도 있을 수 있습니다.

JpaTransactionManager의 일반적인 사용 방법은 JPA와 함께 사용되는 경우입니다. 하지만 MyBatis와 JPA를 함께 사용하는 경우에는 JpaTransactionManager만으로는 MyBatis의 트랜잭션을 관리할 수 없습니다.

MyBatis와 JPA를 함께 사용하는 경우, DatasourceTransactionManager를 사용하여 MyBatis의 트랜잭션을 관리하고, JpaTransactionManager를 사용하여 JPA의 트랜잭션을 관리하는 것이 일반적입니다. 이렇게 두 개의 트랜잭션 매니저를 혼용하는 것이 일반적인 방법이며, 이를 통해 각각의 트랜잭션이 서로 다른 데이터베이스 연결을 사용할 수 있게 됩니다.

따라서, MyBatis와 JPA를 함께 사용하는 경우에는 DatasourceTransactionManager와 JpaTransactionManager를 함께 사용하는 것이 권장되며, 위에서 언급한 Transaction Conflict 에러를 피할 수 있게 됩니다.

JpaTransactionManager는 JPA를 위해 특별히 설계된 트랜잭션 매니저이므로 MyBatis의 일부 기능을 직접 지원하지 않을 수 있습니다. 그렇기 때문에 MyBatis의 특정 기능을 사용해야 할 때는 DatasourceTransactionManager를 사용해야 합니다.

잠재적인 이슈나 발생 가능성은 프로젝트 구조와 사용하는 기술에 따라 다를 수 있으므로 정확한 예시를 드리기는 어렵습니다. 그러나 일반적으로 MyBatis와 JPA를 함께 사용하는 경우, DatasourceTransactionManager와 JpaTransactionManager를 혼용하여 각각의 트랜잭션을 분리해서 관리하는 것이 좋습니다.

더 자세한 내용이 필요하시다면, 프로젝트 구조나 사용하는 기술에 대해 구체적으로 설명해주시면 더 도움을 드릴 수 있을 것입니다. 감사합니다.

임태희님의 프로필 이미지
임태희

작성한 질문수

질문하기