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

남용님의 프로필 이미지
남용

작성한 질문수

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

트랜잭션 문제 해결 - 트랜잭션 매니저2

트랜잭션 시작 및 종료 관련 질문 있습니다!

해결된 질문

작성

·

292

0

안녕하세요 강의 듣다가 제가 이해한 게 맞는지 확인 차 질문 드립니다!
  • 시작 : 서비스 계층에서 getTransaction()을 통해 트랜잭션을 시작하면 트랜잭션 매니저에서 커넥션을 생성하여 DB 트랜잭션을 시작한다.
  • 종료 : 서비스 계층에서 commit() 혹은 rollback()을 통해 트랜잭션을 종료하면 동기화 매니저에서 커넥션을 꺼내와 DB 트랜잭션을 커밋 혹은 롤백한다.
라고 설명해 주셨는데, 여기서 트랜잭션 매니저의 getTransaction(), commit(), rollback()은 DB에 직접 영향을 미치지 않고, 커넥션을 트랜잭션 용으로 동기화 혹은 종료시키는 역할인가요? 그렇다면 실질적으로 DB 상에서 트랜잭션을 시작하고, 커밋이나 롤백을 수행하여 반영하는 로직은 DataSourceTransactionManager 내부에 있나요?

답변 1

2

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

안녕하세요. 남용님

생각하신 내용이 맞습니다.

그런데 트랜잭션 매니저의 구현체가 결국 DataSourceTransactionManager이기 때문에 우리가 트랜잭션 매니저에 commit()을 호출하는 것이 DataSourceTransactionManager에 commit()을 호출하는 것입니다. 그러면 그 내부에서 실제 DB 커넥션의 commit()을 호출하게 됩니다.

감사합니다.

남용님의 프로필 이미지
남용
질문자

아하 결국은 트랜잭션 매니저의 구현체를 주입해서 사용하니까 그렇게 연결되겠네요 감사합니다!!!!

남용님의 프로필 이미지
남용

작성한 질문수

질문하기