Spring Boot에서 DataSource 구성 오류란?
Spring Boot 애플리케이션 실행 시 "Failed to configure a DataSource(DataSource를 구성하지 못했습니다)" 오류가 발생하는 경우가 있습니다. 이는 주로 데이터베이스 연결 정보가 올바르게 설정되지 않았거나 JDBC 드라이버가 누락되었을 때 나타나는 문제입니다. Spring Boot에서 DataSource를 구성하는 가장 기본적인 방법은 application.properties 파일에 데이터베이스 연결 정보를 정의하는 것입니다.
application.properties 설정 방법
Spring Boot의 application.properties 파일을 아래와 같이 작성합니다.
spring.datasource.username=사용자이름
spring.datasource.password=비밀번호
spring.datasource.url=jdbc:mysql://localhost:3306/데이터베이스명
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
MySQL 8.x 버전을 사용하는 경우 드라이버 클래스명은 com.mysql.cj.jdbc.Driver를 지정하고, build.gradle 또는 pom.xml에 MySQL Connector/J 의존성이 포함되어 있는지 반드시 확인하세요.
프로젝트 구조
전체 프로젝트 구조는 다음과 같습니다.

예제 1: 컨트롤러 클래스 작성
위 개념을 실제로 이해하기 위해 Spring Boot로 간단한 컨트롤러 클래스를 만들어 보겠습니다. Java 코드는 다음과 같습니다.
package com.demo.controller;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class DisplayController {
@Autowired
EntityManager entityManager;
@GetMapping("/getdata")
public String getAll() {
Query data = entityManager.createNativeQuery("select first_name from demo25");
List<String> allData = data.getResultList();
return allData.toString();
}
}
위 코드는 EntityManager를 활용해 네이티브 SQL 쿼리를 실행하고, demo25 테이블의 first_name 컬럼 값을 조회하여 반환하는 간단한 REST 컨트롤러입니다.
예제 2: 메인 애플리케이션 클래스
다음은 Spring Boot의 메인 클래스입니다.
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JavaMysqlDemoApplication {
public static void main(String[] args) {
SpringApplication.run(JavaMysqlDemoApplication.class, args);
}
}
실제 적용된 application.properties 파일의 모습은 다음과 같습니다.

애플리케이션 실행 및 결과 확인
프로젝트를 실행하려면 메인 클래스를 마우스 오른쪽 버튼으로 클릭한 후 "Run As → Java Application"을 선택합니다. 실행이 완료되면 브라우저에서 다음 URL로 접속하여 결과를 확인할 수 있습니다.
https://localhost:포트번호/users/getdata

테스트용 데이터베이스 준비하기
먼저 MySQL에서 테이블을 생성합니다.
mysql> create table demo25
-> (
-> first_name varchar(20)
-> );
Query OK, 0 rows affected (0.72 sec)
insert 명령으로 테스트 레코드를 추가합니다.
mysql> insert into demo25 values('David');
Query OK, 1 row affected (0.10 sec)
mysql> insert into demo25 values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo25 values('Chris');
Query OK, 1 row affected (0.10 sec)select 문으로 저장된 레코드를 확인합니다.
mysql> select * from demo25;
실행 결과는 다음과 같습니다.
+------------+
| first_name |
+------------+
| David |
| Adam |
| Chris |
+------------+
3 rows in set (0.00 sec)
이제 브라우저에서 /users/getdata 엔드포인트에 접속하면 [David, Adam, Chris] 형태로 데이터가 정상적으로 출력되는 것을 확인할 수 있습니다.
참고: DataSource 구성 실패 오류의 주요 원인
- spring-boot-starter-data-jpa와 같은 JPA 의존성을 추가했지만 데이터베이스 연결 정보를 설정하지 않은 경우
- URL, 사용자 이름, 비밀번호 등의 연결 정보가 잘못 입력된 경우
- MySQL Connector/J와 같은 JDBC 드라이버 의존성이 누락된 경우
만약 데이터베이스 없이 애플리케이션을 실행해야 하는 상황이라면 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 옵션을 사용해 DataSource 자동 구성을 제외할 수도 있습니다.