728x90
320x100
[문제발생]
스프링스타터를 이용하여 프로젝드를 생성해서 첫 Run을 했더니 아래와 같은 에러메세지가 떴다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
Process finished with exit code 1
[원인]
MySQL을 Depencies에 추가한 상태인데 MySQL은 별도의 설정이 필요함. 근데 그 설정을 안해줘서 생기는 에러!
[해결]
- application.properties 또는 application.yml 이름의 설정파일을 만들어 준다. (properties, yml 형식 아무 거나 상관없음.) 근데 보통 프로젝트 만들면 기본적으로 설정파일이 생성되어 있긴 함. 이미 생성되어 있다면 MySQL관련 내용을 추가만 해주면 됨!
- application.properties 또는 application.yml 의 위치는 프로젝트>src>main>resources 하위에 생성해주면 됨.
1. application.properties
[형식]
spring.datasource.url=jdbc:Database종류://localhost:포트번호/Database스키마
spring.datasource.username=DB아이디
spring.datasource.password=DB비밀번호
spring.datasource.driver-class-name=JDBC드라이버
[예시]
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/bookbookclub?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=비밀번호는비밀임
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
- Database 종류 : mySQL, Oracle 등 본인이 사용하는 데이터베이스 종류를 씀.
- 포트번호 : 데이터베이스에서 사용하는 포트번호
- Database 스키마 : 미리 생성한 데이터베이스 이름
※ 디비에버에서 포트번호랑 데이터베이스 이름을 쉽게 확인가능함.
(+) spring.datasource.driver-class-name에는 어떤 JDBC드라이버를 적어야 하는 건가요?
보통 MySQL을 사용할 경우 com.mysql.cj.jdbc.Driver와 net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 많이 쓰고 각 드라이버는 아래와 같은 특징을 가진다.
- com.mysql.cj.jdbc.Driver : MySQL의 공식 JDBC 드라이버이자 표준. 가장 기본적인 드라이버.
- net.sf.log4jdbc.sql.jdbcapi.DriverSpy : 기존 JDBC 드라이버의 동작을 확장하여 SQL 로깅 및 디버깅 기능을 추가한 드라이버.
그런데 나는 조금 더 편리한 개발을 위해 로깅 및 디버깅 기능이 추가된 net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 사용했음.
(+) net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 사용하려니 빨간줄이 떠요!
당연함. build.gradle에 아래와 같은 의존성을 추가하지 않아서 그렇다. 아래와 같이 추가해줌. (버전은 달라질 수 있음!)
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'
(+) serverTimezone=UTC&characterEncoding=UTF-8 이건 왜 써주는 건가요?
- serverTimezone=UTC : MySQL 서버와 애플리케이션 간 시간대 차이로 인한 문제를 방지하기 위함.
- haracterEncoding=UTF-8 : 문자셋 불일치로 인한 데이터 깨짐 현상 방지. 국제 표준인 UTF-8로 설정.
2. application.yml
[형식]
spring:
datasource:
url: jdbc:log4jdbc:mysql://localhost:포트이름/데이터베이스이름
username: 데이터베이스아이디
password: 데이터베이스비밀번호
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
[예시]
spring:
datasource:
url: jdbc:log4jdbc:mysql://localhost:3306/bookbookclub?serverTimezone=UTC&characterEncoding=UTF-8
username: root
password: 비밀번호는비밀임
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
- yml는 계층구조이기 때문에 들여쓰기가 중요함!
설정해준 후 다시 돌려보면 잘 됨!
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[Java] IllegalArgumentException VS IllegalStateException : 어떨 때 뭘 써야 하지? (0) | 2025.01.17 |
---|---|
[JPA] 데이터베이스 연결이 안된다, 콘솔창에 DDL문이 안보인다 등등 (0) | 2025.01.06 |
시스템 설계 기초 (로드밸런스, 메세지 큐, CDN, DNS 등) (0) | 2024.08.12 |
[HTTP] HTTP상태코드 / HTTP헤더 (0) | 2024.08.09 |
[HTTP] HTTP 정의/특징/메시지/메서드(GET,POST,PUT 등) (0) | 2024.08.08 |