[Spring Boot] application.yml 데이터베이스 연결 정보 입력

2025. 1. 6. 16:14·WEB(BE)/Spring & Spring Boot
반응형

지금까지는 DB 연결 설정 정보를 입력해야 할 때마다 구글링으로 티스토리를 찾아보면서 설정했다.

이번에 프로젝트를 하면서는 한번 공식문서에 의존해서 연결 정보를 입력해봐야겠다는 생각이 들어 공식문서를 읽고 이해한 내용을 정리해본다.

스프링은 SQL 과 NoSQL 모두 연동할 수 있으나, 이 글은 SQL 기준으로 정리하였다.

 

DataSource 설정

스프링은 JDBC를 직접 이용해서 DB와 소통하는 것부터, ORM 기술을 이용해서 DB와 소통하는 것까지 폭넓은 방법을 제공한다.

 

In-Memory DB

먼저 개발환경에서는 보통 인-메모리 데이터베이스를 사용하는 경우가 많다. (in-memory embedded database)

이름 그대로 메모리에 데이터를 저장하는 방식의 DB이므로, 데이터가 영구적으로 저장되지 않는다.

따라서 어플리케이션이 시작할 때 DB에 데이터를 채우고, 종료될 때 데이터가 사라진다.

 

스프링 부트는 기본적으로 H2, HSQL, Derby 데이터베이스에 대한 인 메모리 자동설정을 지원한다.

따라서 해당 DB를 인메모리 데이터베이스로 사용하고 싶다면, DB에 대한 외부 의존성만 추가해주면 따로 DataSource 설정을 할 필요가 없다.

 

만약 여러 종류의 인 메모리 데이터베이스를 활용하려는 경우에는, 내가 사용할 데이터베이스에 대해 spring.datasource.embedded-database-connection 프로퍼티를 설정해준다.

만약 이 프로퍼티를 none으로 설정한다면 인메모리 데이터베이스에 대한 DataSource 를 자동으로 설정하지 않는다.

 

보통 인 메모리 데이터베이스는 테스트 환경에서 주로 사용한다.

테스트 환경에서 인 메모리 데이터베이스를 활용할 때는, application context 가 여러 개여도 같은 데이터베이스를 재사용한다.

따라서 만약 각 application context 마다 분리된 데이터베이스를 사용하기를 원한다면 spring.datasource.generate-unique-name 옵션을 true 로 주면 된다.

 

(참고1 : embedded database 를 자동으로 설정하려면 spring-jdbc 의존성이 필요하다. 보통 데이터베이스 연결에는 spring-boot-starter-data-jpa 의존성을 추가하는데, 이 의존성이 spring-jdbc 를 가져오기 때문에 직접 의존성을 추가할 필요는 없다.)

 

(참고2 : embedded database 의 url 은 자동 설정되는데, 이를 직접 설정해서 접근하려는 경우, 어플리케이션이 종료될 때마다 데이터가 사라지는 점을 유의하여 H2 데이터베이스를 사용하는 경우 DB_CLOSE_ON_EXIT=FALSE 설정을 해주어야 한다.)

 

Production DB

프로덕션 환경에서 사용하는 DB는 어플리케이션 외부에 존재한다.

프로덕션 DB 설정도 DataSource 를 pooling 하면 자동으로 할 수 있다. (무슨 뜻일까..)

 

spring:
  datasource:
    url: "jdbc:mysql://localhost/test"
    username: "dbuser"
    password: "dbpass"

 

외부 데이터베이스에 대한 DataSource 에 대한 설정은 spring.datasource.* 에 있는 프로퍼티를 통해 기입한다.

위는 그 예시를 보여준다.

 

외부 데이터베이스에 대한 정보를 기입할 때, url 은 반드시 기입해야 한다.

만약 url 을 기입하지 않으면 스프링 부트가 embedded database 로 자동 설정한다.

 

또한 스프링 부트는 url 로부터 알맞은 JDBC 드라이버를 추론해서 사용한다.

만약 직접 JDBC 드라이버를 명시하려면 spring.datasource.driver-class-name 프로퍼티 값을 지정한다.

 

추가적으로 spring.datasource.<connection pool>.* 프로퍼티를 통해 특정 커넥션 풀에 대한 설정을 작성할 수 있다.

스프링 부트는 HikariCP 를 사용할 수 있다면 우선적으로 사용하고,Tomcat, Common DBCP2, Oracle UCP 순으로 체크하여 사용한다.

(참고로 spring-boot-starter-data-jpa 의존성을 추가하면 HikariCP를 기본적으로 가져온다.)

만약 이 순서를 무시하고, 직접 원하는 커넥션 풀을 사용하려면 spring.datasource.type 프로퍼티를 통해 설정할 수 있다.

 

만약 추가적인 커넥션 풀을 사용하고 싶다면 DataSource 빈을 직접 정의해서 설정할 수 있다.

이 빈을 직접 정의하면 자동 설정이 발생하지 않고, DataSourceBuilder 클래스를 통해 직접 DataSource 를 커스텀해서 생성할 수 있다.

 

 

참고

https://docs.spring.io/spring-boot/reference/data/sql.html

 

SQL Databases :: Spring Boot

The Reactive Relational Database Connectivity (R2DBC) project brings reactive programming APIs to relational databases. R2DBC’s Connection provides a standard method of working with non-blocking database connections. Connections are provided by using a C

docs.spring.io

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'WEB(BE) > Spring & Spring Boot' 카테고리의 다른 글

@SQLDelete와 TransientObjectException 예외  (0) 2026.03.08
[Redis] READONLY You can't write against a read only replica. 에러 해결기 (feat. 중국)  (0) 2025.08.06
JAVA 값 객체의 동등 비교 ('==' 과 equals() 의 차이)  (0) 2025.03.08
[Swagger] Failed to load API definition (403, 500, NoSuchMethodError)  (3) 2025.01.22
[Spring Boot] profile 개념과 profile 분리  (0) 2025.01.04
'WEB(BE)/Spring & Spring Boot' 카테고리의 다른 글
  • [Redis] READONLY You can't write against a read only replica. 에러 해결기 (feat. 중국)
  • JAVA 값 객체의 동등 비교 ('==' 과 equals() 의 차이)
  • [Swagger] Failed to load API definition (403, 500, NoSuchMethodError)
  • [Spring Boot] profile 개념과 profile 분리
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45)
        • 생각 정리 (23)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[Spring Boot] application.yml 데이터베이스 연결 정보 입력
상단으로

티스토리툴바