inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

803

아름

작성한 질문수 6

0

안녕하세요.

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

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

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

감사합니다.

 

spring jpa

답변 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 인턴

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

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

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

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

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

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

0

김승현

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

RepositoryTest의 패키지 위치가 domain인 이유

0

18

1

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

27

1

update()에 사용하는 setter 질문드립니다.

0

45

1

SQL 중심적 개발의 문제점에 대한 질문

0

71

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

82

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

170

1

@repository 어노테이션

0

88

3

ItemService

0

56

1

논리 커밋, 물리 커밋 질문드립니다.

0

53

1

내부 트랜잭션 커밋은 필수인가요?

0

55

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

53

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

176

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

76

1

@EventListener(ApplicationReadyEvent.class) 관련

0

87

1

트랜잭션 동기화 매니저와 데이터 소스

0

75

1

DB 관련 강의 개설 계획은 없으신건가요?

0

132

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

93

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

110

1

트랜잭션 전파 질문.

0

86

1

프로젝트 오픈 에러

0

124

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

82

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

71

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

99

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

96

2