해결된 질문
23.03.15 18:15 작성
·
938
·
수정됨
0
스프링 트랜잭션 전파에 있어서, 외부 트랜잭션이 수행중이고 아직 끝나지 않았는데 내부 트랜잭션이 수행 된다면, 트랜잭션 코드는 각각 트랜잭션 매니저를 통해서 신규 트랜잭션인지 확인을 하고 트랜잭션을 시작하는 과정을 거치는 것이라 이해했습니다.
강의 자료 그림에서 본다면, 외부 트랜잭션코드와 내부 트랜잭션 코드가 서로 다른 트랜잭션 매니저로 부터 트랜잭션을 시작하는 것 처럼 표현되어 있는데, 이것은 같은 트랜잭션 매니저 아닌가요? definition이 다른 것일뿐.. 헷갈려서 질문 남겨 봅니다.
또한, DB 1편부터 들었던 의문인데, service 레이어에서 트랜잭션을 시작하면 트랜잭션 동기화 매니저에 넣어두고, 레포지토리에서는 트랜잭션 동기화 매니저로 부터 해당 connection을 꺼내서 해결하는데, 트랜잭션 동기화 매니저는 spring bean으로, singleton으로 자동 등록되어 있는건가요?
답변 부탁드립니다!
감사합니다.
답변 1
2
2023. 03. 15. 22:07
안녕하세요. :/님
같은 트랜잭션 매니저 입니다.
트랜잭션 동기화 매니저는 모든 필드가 static으로 구성되어 있습니다. 스프링 빈으로 등록되지는 않지만 static으로 구성되어 있어서 싱글톤처럼 사용됩니다. 추가로 더 정확한 메커니즘을 이해하려면 ThreadLocal이라는 개념을 학습해야 하는데, 이 부분은 스프링 핵심 원리 - 고급편을 통해서 이해하실 수 있습니다.
감사합니다.
2023. 03. 16. 14:44
고급편 강의 참고하겠습니다. 감사합니다!