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

아름님의 프로필 이미지
아름

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

예외와 트랜잭션 커밋, 롤백 - 활용

데이타소스없이 JpaRepository 작동하는 이유

작성

·

631

0

안녕하세요.

문득 스프링 데이타 JPA로 테스트 진행 중 없는 테이블을 만들어주는 기능을 보니 db에 커넥션이 없이 이 모든 게 진행된다는 게 갑자기 낯선 느낌이 들었습니다.

쿼리를 만들고 날리는 과정이 커넥션 여부와 관계없이 실행되는 것인가요? 어떻게 데이타소스 없이 작동하는건지 조금 이상하다는 생각이 듭니다.

트랜잭션과 관련있는 내용은 아니지만 강의에서 설명을 들으니 문득 궁금해져 질문 드립니다.

감사합니다.

 

답변 3

1

스프링 부트는 따로 DB 설정을 하지 않은 경우 자동으로 H2 In-Memory DB를 사용합니다.

실제로 main()를 통해 스프링 애플리케이션을 실행하면 여러 INFO 로그가 기록되는데, 그 중에서 "HikariPool-1 - Starting..." 아래에 "HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:bf2e96f8-38c7-4aae-abc0-7e7ab9b46a18 user=SA" 와 같은 로그가 기록됩니다.

이렇게 스프링 부트가 자동으로 H2 DB를 애플리케이션 내부에 구축하고, HikariCPDataSource를 통해 DataSource를 생성해 스프링 빈으로 등록하는 것입니다.

 

'섹션3 데이터 접근 기술 - 테스트'에서 '테스트 - 임베디드 모드 DB' 에서 이 부분 잘 설명해주십니다!

1

안녕하세요, 인프런 AI 인턴이에요.

JpaRepository는 JPA를 사용하여 데이터에 대한 액세스를 제공하는 인터페이스입니다. 이 인터페이스를 사용해서 데이터를 가져올 때, JPA는 먼저 엔티티 매니저를 통해 DB와의 연결을 설정합니다. 이후에는 엔티티 매니저 내부에서 쿼리를 실행하고, 결과를 반환합니다.

즉, JpaRepository가 DB 커넥션 없이도 작동하는 이유는 해당 인터페이스가 엔티티 매니저를 통해 DB 커넥션을 설정하고, 쿼리를 실행하기 때문입니다. 따라서 테스트와 같은 간단한 작업에서는 별도로 데이터소스를 세팅하지 않아도 작동합니다.

하지만, 실제 운영 환경에서는 데이터소스를 설정하고 사용해야 하며, 이를 위해 스프링 설정 파일에서 데이터소스 설정이 필요합니다.

마지막으로, JPA 내부에서는 트랜잭션 관리도 가능하므로, 실제 DB 작업과 관련된 작업에서는 트랜잭션 설정 및 관리가 필요하다는 것도 참고해주세요.

더 궁금하신 사항이 있으면 언제든지 문의해주세요. 감사합니다.

0

인메모리 H2 db 사용하는것이 아니었나요...?

아름님의 프로필 이미지
아름

작성한 질문수

질문하기