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

김가가가님의 프로필 이미지
김가가가

작성한 질문수

실전! 스프링 데이터 JPA

네이티브 쿼리

Spring data JPA 각 메소드에 대해서 @Transactional이 있다면

작성

·

352

0

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

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

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

[질문 내용]

@Transactional이 끝날 때 커밋을 해주는 것으로 알고 있습니다. 그리고 spring data jpa 메소드마다 transactional이 있는 것으로 알고 있습니다.

그렇다면 service 에서 transactional로 선언되어 있다고 하더라도 service의 한 메소드 안에서 여러개의 spring data jpa 메소드가 사용될 때 service 메소드 단위가 아닌 spring data jpa 메소드마다 트랜잭션이 발생하는 문제가 생기지 않나요?

답변 1

0

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

해당 부분은 트랜잭션 전파와 관련이 있는 질문으로 보여집니다.

imageimage

영한님의 DB2의 트랜잭션 전파1 - 기본 챕터의 강의 자료 중 일부입니다. 외부 트랜잭션 코드를 service 코드, 내부 트랜잭션 코드를 spring data jpa 코드로 대응해서 이해해주시면 될 것 같습니다.

service가 신규 트랜잭션을 시작하고 spring data jpa 의 메서드들을 호출하면 spring data jpa 의 메서드들은 사실 따로 물리적인 트랜잭션을 생성하지 않고 기존 트랜잭션에 참여하게 됩니다. 영한님께서는 신규 트랜잭션을 물리 트랜잭션, 내부 트랜잭션들을 논리 트랜잭션이라는 용어로 구분하셨는데요, 물리 트랜잭션인 서비스 로직에서 로직이 끝날 때 실제 데이터베이스에 커밋이 되는 것이고, 내부에 있던 spring data jpa 메서드들에서 로직이 끝날 때는 간단하게는 아무것도 하지 않는다고 보시면 더 이해가 편하실 것 같습니다.

 

해당 부분은 영한님의 DB2편에서 트랜잭션 전파와 관련된 부분을 참고해주시면 훨씬 이해가 더 잘 되실 거라고 생각합니다. :)


감사합니다.

김가가가님의 프로필 이미지
김가가가

작성한 질문수

질문하기