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

hw1000님의 프로필 이미지

작성한 질문수

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

테스트 - 스프링 부트와 임베디드 모드

스프링 부트가 제공하는 임베디드 DB DataSource 스프링 빈 자동 등록 관련

작성

·

151

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

안녕하세요.

H2 DB는 자바로 만들어져 있고, 덕분에 JVM 내부에서 동작하는 임베디드 모드를 지원한다고 이해했습니다.

스프링 부트는 데이터베이스에 대한 별다른 설정이 없으면 임베디드 데이터베이스를 사용(제공)한다고 하는데..

질문: 그렇다면 스프링 부트가 DataSource를 스프링 빈으로 자동 등록 시 라이브러리(의존 관계)에서 H2가 있는지를 먼저 확인하고, 별도의 설정(application.properties 내 url, username 등)이 없으면 임베디드 모드로 DataSource를 생성하여 빈으로 등록하는 건가요?
아니면 application.properties를 먼저 확인하고 url이 없으면 -> 라이브러리에 H2가 있는지 확인 후 메모리 DB를 사용하는 DataSource를 생성하여 빈으로 등록하는 건가요?
만약 후자라면 왜 그렇게 설계했을지(이점?)도 궁금합니다.. 감사합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. hw1000님 🙂

저희가 바로 정답을 말씀드릴 수도 있지만, 개발자는 본인이 코드로 직접 테스트해보며 확인할 때 본인의 것으로 만들 수 있습니다.

궁금하신 2가지 상황에 대해서 간단하게 코드로 만들어서 테스트 해보시겠어요?

그리고 그 결과를 공유해주신다면 다른 많은 개발자분들께도 큰 도움이 될거에요.

감사합니다.

안녕하세요 영한님
저도 궁금해서 관련내용을 찾아봤는데 혹시 application.properties를 먼저 확인하고 H2드라이버를 확인하는게 맞나요?

로그를 살펴보니 DefaultListableBeanFactory가 프로퍼티들을 확인하고 마지막에 hikariConfig가 h2드라이버를 찾은 후에 datasource빈이 만들어지는 거 같은데 제가 맞게 확인한건지 잘 모르겠네요

이점을 생각해봤는데 application.properties를 먼저 확인하면 프로피터스에 명시되어있는 url에 맞는 드라이버들만 확인해서 해당 url로 연결할 수 있는 지 여부를 파악하고 임베디드db를 만들면 될 것 같은데 만약 순서가 바뀐 경우 드라이버가 여러개 설치되어있으면 그 과정이 좀 더 복잡해질 수 있어서 그런건가요?

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. woo93xna님

이것은 스프링 부트의 철학과 관련이 있습니다.

스프링 부트는 개발 편의 성을 위해 별도의 설정 없이도 즉시 사용 가능한 환경을 제공합니다.하지만 기본적으로 개발자가 원하는 경우 언제든 설정을 통해 데이터베이스를 명시적으로 지정할 수 있습니다. 이는 "설정으로 규칙을 재정의(Convention over Configuration)" 원칙을 따릅니다.

정리하면 기본적으로 개발 초기나 테스트 단계에서는 설정을 하지 않아도 되지만, 개발자가 직접 설정을 필요로 하는 경우에는 설정이 우선 순위를 가집니다.

감사합니다.

hw1000님의 프로필 이미지

작성한 질문수

질문하기