작성
·
248
0
@Transactional
선언된 메서드를 사용할 때, Connection이 사용되고 반환되는 시점이 궁금합니다.
@Transactional
메서드 호출 -> 쿼리 실행 -> 외부 API 호출 -> @Transactional
메서드 종료 라고 했을 때, @Transactional
시작 시점부터 끝날 때까지 하나의 커넥션이 유지되나요? 아니면 쿼리가 실행될 때, 그리고 커밋/롤백 될때만 커넥션을 사용(커넥션 opne & close)하나요?
답변 1
0
안녕하세요. profoundsea25님, 공식 서포터즈 y2gcoder입니다.
우려하신대로 @Transactional 을 걸어준 메서드 단위에서 트랜잭션이 시작하고 끝날 때 종료됩니다. 여기서 "트랜잭션을 시작한다"는 것은 실제로 데이터베이스 트랜잭션을 시작하고 데이터베이스 커넥션을 가져오는 것을 의미합니다.
그래서 외부 API 호출하는 메서드를 @Transactional이 걸려있는 메서드 내에서 부르면 외부 API 호출 후 응답할 때도 데이터베이스 커넥션을 그대로 열어 놓고 있게 됩니다. 실무에서는 이런 상황을 방지하기 위해 @Transactional 애너테이션을 DB 통신이 필요한 메서드에서만 붙여서 범위를 좁혀놓기도 합니다 :)
감사합니다.