인프런 커뮤니티 질문&답변

profoundsea25님의 프로필 이미지
profoundsea25

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

DB Connection 관련하여 질문드립니다.

작성

·

248

0

@Transactional 선언된 메서드를 사용할 때, Connection이 사용되고 반환되는 시점이 궁금합니다.

@Transactional 메서드 호출 -> 쿼리 실행 -> 외부 API 호출 -> @Transactional 메서드 종료 라고 했을 때, @Transactional 시작 시점부터 끝날 때까지 하나의 커넥션이 유지되나요? 아니면 쿼리가 실행될 때, 그리고 커밋/롤백 될때만 커넥션을 사용(커넥션 opne & close)하나요?

답변 1

0

안녕하세요. profoundsea25님, 공식 서포터즈 y2gcoder입니다.

우려하신대로 @Transactional 을 걸어준 메서드 단위에서 트랜잭션이 시작하고 끝날 때 종료됩니다. 여기서 "트랜잭션을 시작한다"는 것은 실제로 데이터베이스 트랜잭션을 시작하고 데이터베이스 커넥션을 가져오는 것을 의미합니다.

그래서 외부 API 호출하는 메서드를 @Transactional이 걸려있는 메서드 내에서 부르면 외부 API 호출 후 응답할 때도 데이터베이스 커넥션을 그대로 열어 놓고 있게 됩니다. 실무에서는 이런 상황을 방지하기 위해 @Transactional 애너테이션을 DB 통신이 필요한 메서드에서만 붙여서 범위를 좁혀놓기도 합니다 :)

감사합니다.

profoundsea25님의 프로필 이미지
profoundsea25

작성한 질문수

질문하기