작성
·
291
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
안녕하세요~
repository은 TransactionSynchronizationMaganger를 통해 트랜잭션이 적용되어 기존의 커넥션이 존재하면 그 커넥션을, 트랜잭션이 적용되어 있지 않아 기존의 커넥션이 없으면 새로운 커넥션을 받아올텐데요.
트랜잭션이 적용되어 기존의 커넥션이 존재할 때, 그 기존의 커넥션을 식별할 수 있는 방법은 무엇인가요? 즉, TransactionSynchronizationMaganger는 각 서비스에서 사용중인 커넥션들을 어떻게 식별해서 각 서비스에 전달하는지 궁금합니다.
답변 2
0
안녕하세요. 김찬님
이 원리를 본질적으로 이해하려면 쓰레드 로컬에 대해서 알아야 합니다.
쓰레드 로컬은 각각의 쓰레드 마다 별도의 저장공간을 가지는 개념인데요.
쓰레드 로컬에 대한 자세한 내용은 스프링 핵심 원리 - 고급편 강의에서 자세히 다룹니다 🙂
감사합니다.
0
chat gpt에게 질문해보니 아래와 같이 답변하는군요.
스레드 로컬(Thread Local) 저장소: TransactionSynchronizationManager
는 스레드 로컬 저장소를 사용하여 현재 스레드의 트랜잭션 컨텍스트에 대한 정보를 저장합니다. 이는 각 스레드가 고유한 트랜잭션 상태를 가지고 있음을 보장합니다.
리소스 바인딩: 트랜잭션과 관련된 리소스(예: 데이터베이스 커넥션)는 스레드 로컬에 "리소스 맵" 형태로 바인딩됩니다. 이 맵은 데이터 소스와 연관된 커넥션 객체를 저장합니다.
트랜잭션 식별자: TransactionSynchronizationManager
는 현재 트랜잭션에 대한 유니크한 식별자를 관리할 수 있습니다. 이를 통해 다수의 트랜잭션이 중첩되거나 복잡한 시나리오에서도 각 트랜잭션을 구분할 수 있습니다.
커넥션 조회: 서비스나 리포지토리가 데이터베이스 작업을 수행할 때, TransactionSynchronizationManager
는 해당 스레드의 리소스 맵을 조회하여 이미 바인딩된 커넥션이 있는지 확인합니다. 존재하는 경우, 그 커넥션을 재사용합니다.