트랜젝션 옵션의 전파에 대해 질문드립니다.
230
작성한 질문수 59
예전에 영한님이 답변하신 내용 중에
스프링이 제공하는 트랜잭션은 처음 시작한 트랜잭션을 기반으로 전파됩니다.
그러니까 서비스에서 트랜잭션을 시작하면 리포지토리의 트랜잭션이 해당 트랜잭션을 그대로 이어 받습니다.
라는 내용이 있었습니다.
그렇다면, 컨트롤러, 서비스, 리포지토리 순으로 코드가 진행된다고 할 때, 만약 서비스 계층에 @Trasnactional(readonly=false)가 걸려있고 리포지토리 계층에 @Trasnactional(readonly=true)가 걸려있으면 서비스 계층이 먼저 호출되므로 readonly=false 옵션이 적용된 채로 리포지토리 계층까지(기존 리포지토리 계층의 옵션은 무시된채로) 코드가 흘러가는걸까요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
Jaesang Yoon님의 질문은 스프링의 트랜잭션 전파에 대한 이해와 관련하여, 서비스 계층과 리포지토리 계층에서 서로 다른 @Transactional 설정이 있을 때의 동작 원리를 질문하고 계십니다.
이러한 상황에서, 트랜잭션의 전파 방식을 이해하는 것이 중요합니다. 스프링 트랜잭션에서는 하나의 트랜잭션 범위 내에서 시작된 여러 작업들이 전파 방식에 따라 어떻게 처리되는지 정의합니다. 특히, 스프링에서는 @Transactional 어노테이션의 propagation 속성을 통해 트랜잭션의 전파 방식을 세밀하게 제어할 수 있습니다.
귀하의 질문과 밀접하게 관련되어, 영한님은 스프링이 제공하는 트랜잭션 초기에 시작하는 (처음 시작한 트랜잭션을 기반으로 전파되는) 방식에 대해 설명한 내용이 있습니다.
예를 들어, 서비스 계층에서 @Transactional(readOnly=false)를 설정하고, 리포지토리 계층에서 @Transactional(readOnly=true)를 설정했다면, 서비스 계층에서 시작된 트랜잭션 설정이 전파되어 리포지토리 계층까지 영향을 미칩니다. 즉, 서비스 계층에서 설정한 트랜잭션의 설정이 리포지토리 계층의 트랜잭션 설정을 덮어씌우게 됩니다. 이는 스프링 트랜잭션 관리의 기본 원리 중 하나입니다.
다음 URL의 답변에서 영한님이 “@Transaction에 대한 궁금중”에 답변한 내용이 이 문제에 대한 이해를 돕는 데 유용할 수 있습니다.
본 문제에 대해 위 링크에서는 서비스 계층에서 트랜잭션이 시작되면 이후의 모든 작업이 해당 트랜잭션에 의해 관리되며, 이후 레이어(예: 리포지토리)에서 정의한 트랜잭션 설정은 무시됨을 언급합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
69
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
107
3
MemberRepository 구현체
0
57
1
pdf 표현 질문드립니다.
0
62
1
로그가 남지 않는 문제.
0
81
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
70
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
72
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
91
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
46
1
하이버네이트6에서의 최적화에 이은 질문
0
85
1
save() vs saveAndFlush DB 통신 횟수
0
53
1
순수 JPA 리포지토리 코드 수정부분
0
86
2
bulk연산 후 flush하는 이유를 모르겠어요
0
152
3
bulk insert 질문입니다.
0
178
2
교만했던 것 같아요.
0
147
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
147
2
동적 테이블에 대한 질문
0
85
1
영속성 전이와 연관관계
0
130
2
강의 10:25 질문
0
74
1
단건 update 질문
0
95
2
엔티티 와 도메인의 경계
0
127
1
UsernameOnlyDto 타입 type mismatch 오류
0
119
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
136
1





