작성
·
434
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하세요 영한님.
이번 강의를 들으면서 실제 MyBatis나 JPA를 사용했을 때
커넥션이 커넥션 풀로반환되는 시점이 궁금했습니다.
GPT에게 물어본 결과로는,
트랜잭션 단위로 커넥션을 커넥션 풀로 반환한다는 답변을 받았습니다.
예를들어 트랜잭션 1에서
findById(), findByUsername()을 호출한다면
트랜잭션 1에서 획득한 커넥션 1을 가지고
findById()에 의한 select 쿼리를 호출 후
커넥션1을 반환하지 않고
그대로 유지하다가 findByUsername()으로 두 번째
select 쿼리를 호출한다는 답변을 받았습니다.
이부분이 맞는지 질문 드리고 싶습니다.
답변 2
0
안녕하세요. 요니님
일반적으로 트랜잭션을 시작할 때 커넥션 풀에서 커넥션을 가져오고, 가져온 커넥션은 트랜잭션이 끝날 때 까지 사용됩니다.
예를 들어서 다음과 같은 순서로 진행됩니다.
Tx 시작 -> 커넥션A 획득
findById() -> 커넥션 A 사용
findByUsername() -> 커넥션 A 사용
Tx 종료 -> 커넥션 A 반환
만약 트랜잭션을 시작하지 않고 단순히 쿼리만 수행한다면 해당 쿼리를 수행할 때 커넥션을 조회하고, 쿼리 종료후 바로 커넥션을 반환합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
요니님의 질문에 포함된 “MyBatis나 JPA를 사용했을 때 커넥션이 커넥션 풀로 반환되는 시점”에 대해, 매우 구체적인 상황입니다. 제공된 정보 중에서 귀하의 질문에 가장 관련성이 높은 것은 아래 내용일 것으로 판단됩니다.
@Transactional 관련 커넥션풀 반환 원리 질문드립니다.라는 제목의 기존 답변에서, 트랜잭션 사용시 커넥션 풀에 커넥션이 어떻게 반환되는지에 대한 설명이 포함되어 있습니다.
이 내용에 따르면, @Transactional 어노테이션이 붙은 서비스 메서드 내에서는 트랜잭션 시작부터 종료까지 동일한 커넥션을 사용하게 됩니다. 또한, 해당 커넥션은 트랜잭션 종료 시에 커넥션 풀로 반환됩니다. 따라서, findById()와 findByUsername() 메서드가 같은 트랜잭션 내에서 호출된다면, 동일한 커넥션을 사용하고, 트랜잭션이 종료될 때 커넥션 풀로 반환된다는 설명이 귀하의 질문에 대한 답변으로 적합하다고 볼 수 있습니다.
링크된 답변에서 김영한 강사님은 트랜잭션 프록시가 커넥션 풀에서 커넥션을 획득하고, 모든 작업이 끝난 후에 connection.close()
를 호출하여 실제 커넥션이 커넥션 풀로 반환된다고 설명하고 있습니다. 이 과정은 귀하가 언급한 시나리오와 일치하며, 트랜잭션 동안 한 번 획득한 커넥션을 여러 작업에서 재사용하고, 해당 트랜잭션이 종료되는 시점에서 커넥션을 반환한다고 이해하시면 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.