강의

멘토링

로드맵

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

최용준님의 프로필 이미지
최용준

작성한 질문수

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

정리

트랜잭션 동기화 문제

작성

·

67

·

수정됨

0

안녕하세요. 트랜잭션 동기화에 대해 질문이 있습니다.

강의에서는 "JPA와 JdbcTemplate 두 기술을 함께 사용하면 트랜잭션 매니저가 달라진다." 라고 하셨고 이 문제를 해결하기 위해 JpaTransactionManager가 다른 트랙잭션 매니저의 기능을 가지고 있다고 말씀하셨습니다.

각각의 트랙잭션 매니저가 달라도 트랜잭션 시작 시 획득한 커넥션이 동일한 트랜잭션 동기화 매니저의 쓰레드 로컬에 보관되기 때문에 레포지토리 계층에서 JPA, mybatis, JdbcTemplate 기술과 상관없이 같은 커넥션을 보장 받을 수 있지 않나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 최용준님, 트랜잭션 동기화에 대한 질문을 주셨네요.

스프링 프레임워크에서 트랜잭션 매니저는 여러 데이터 접근 기술과 통합하여 동일한 트랜잭션 내에서 사용될 수 있도록 지원합니다. 그러나 각 기술(JPA, JdbcTemplate 등)은 각각의 트랜잭션 매니저(JpaTransactionManager, DataSourceTransactionManager 등)를 사용할 수 있습니다. 이 경우, 스프링의 트랜잭션 동기화 매니저는 각 기술이 컨텍스트에 동일한 트랜잭션에 참여하도록 조정합니다.

같은 쓰레드에서 실행된다고 해도 다음과 같은 이유로 트랜잭션 매니저의 종류가 중요한 역할을 합니다:

  1. 트랜잭션 동작 방식 차이: JPA와 JDBC는 트랜잭션을 관리하는 방식이 약간 다르고, 이런 차이는 트랜잭션이 내부적으로 처리되는 방식을 변화시킬 수 있습니다.

  2. 트랜잭션 전파와 격리 수준: 각 트랜잭션 매니저는 고유한 설정을 통해 트랜잭션 전파 행동, 격리 수준 등을 다르게 관리할 수 있으며, 이는 애플리케이션의 데이터 접근 로직에 큰 영향을 미칩니다.

  3. 트랜잭션 API 통합: 스프링 부트가 JpaTransactionManager로 통합하는 방식은 다양한 트랜잭션 관리 기능을 표준 인터페이스로 제공하여 여러 기술 간에 일관성을 보장하는 것을 돕습니다.

이러한 이유로 서로 다른 매니저를 사용하면 개발자가 의도하지 않은 방식으로 데이터 접근과 변경이 이뤄질 수 있어, 스프링은 가능한 한 통합된 트랜잭션 접근 방식을 사용하고자 합니다. 이는 여러 데이터 소스를 다룰 때 이점이 있습니다.

이와 관련하여 자세한 설명이 포함된 강좌나 블로그를 참고하면 추가적인 도움을 얻을 수 있습니다. 아래에 참고할 만한 게시글 링크를 추가합니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최용준님의 프로필 이미지
최용준

작성한 질문수

질문하기