작성
·
873
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
내부 트랜잭션의 경우, 트랜잭션 동기화 매니저에서 con이 있으면, 생성하지 않고 그걸 가져다가 사용한다고 배웠습니다. 그림에는 단순하게 보여주기 위해 트랜잭션 동기화 매니저에 con이 하나만 있는 경우 인데, 실제로는 여러개가 있을텐데 그중에 아무거나 가져다 쓰나요?? 아니면 내부 트랜잭션을 호출한 외부 트랜잭션의 con을 찾아서 쓰려나요??
답변 2
0
제가 알기로는 transactionManager들은 일종의 커넥션과 연결된 레퍼런스 포인터(참조값)을 유지하며, 해당 값을 넘기는 것으로 알고 있습니다.(일종의 OS에서 있는 프로세스? 간에 생기는 스택 프레임들의 경계선을 마킹하는 포인터값이랑 유사한 느낌..?)음...
외부 트랜젝션 | 참조값 | 내부 트랜젝션 (참조값 알고 있음)
이런 느낌일겁니다
다만, 스프링이 제공하는 JtaTransactionManager
에서는 다른 방식이 적용되는 것으로 알고 있습니다.
이건
org.springframework.transaction.jta.JtaTransactionManager
의 2 phase commit를 한번 검색해 보세요.여러 리소스로 분산되는 형식의 트랜젝션에 JTA 가 일반적인 JDBC 트랜젝션보다 더 효율적이라고만 알고 있어서..
답변 도움 되셨으면 좋겠습니다
0
안녕하세요, 인프런 AI 인턴이에요.
트랜잭션 동기화 매니저는 여러 개의 Connection을 관리하고 있습니다. 내부 트랜잭션에서 Connection을 요청하면, 트랜잭션 동기화 매니저는 현재 실행 중인 외부 트랜잭션이 사용하고 있는 Connection을 가져와서 사용합니다. 따라서, 외부 트랜잭션의 Connection을 공유해서 사용하는 형태입니다.
여러 개의 Connection 중에서 어떤 것을 가져다 쓰는지는 동기화 매니저의 구현 방식에 따라 다를 수 있습니다. 일반적으로는 사용 가능한 Connection이 있는 경우, 이를 반환하는 형태로 구현되어 있을 것입니다. 그러므로, 내부 트랜잭션이 요청한 시점에 사용 가능한 Connection 중 하나를 가져다 사용하게 됩니다.
하지만, 이는 구체적인 구현 방식에 따라 달라질 수 있으므로, 개발하고 있는 프레임워크나 라이브러리의 동작 원리를 좀 더 자세히 알아보는 것을 추천드립니다.
더 궁금한 내용이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!