배니스트의 개발추적기

[Project] Spring MySQL 연동 방법 본문

Project

[Project] Spring MySQL 연동 방법

배니스트 2020. 8. 27. 09:09

 

스프링 강의에서는 데이터베이스로 H2를 사용했는데, 사용자가 많은 MySQL을 연동하려고 한다.

그 과정에서 고생한 결과를 기록하고자 한다. 기본적으로 Spring과 MySQL은 설치되어 있다는 전제하에 기술하도록 하겠다.

+MySQL에서 DB(scheme) 설정까지 해두어야 한다.

 

[개발 환경]

OS: Mac OS Catalina 10.15.6

IDE: intellij Community

Language: Java 11

Framework: Spring Boot 2.3.3

Build: Gradle 6.6

Database: MySQL

 

1. dependencies 연결

build.gradle의 dependencies에 다음의 항목을 추가해준다. 

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-jdbc'
    compile 'mysql:mysql-connector-java'
}

 

2. datasource 연결(DB Connection)

application.properties에 설정해주어야 하는데 필자는 yaml 양식이 가독성이 높아 application.yml을 생성한 뒤 다음과 같이 설정해주었다.

spring:
  datasource:
    name: "jdbc/[DB이름]"
    driverClassName: com.mysql.cj.jdbc.Driver
    url: "jdbc:mysql://localhost:3306/[DB이름]?autoReconnect=true&serverTimezone=UTC"
    username: "root"
    password: "[비밀번호]"

  - name: DB이름

  - driverClassName: 아래 스프링부트 튜토리얼에서 database 연동하는 방법이 기술되어 있다.

https://www.tutorialspoint.com/spring_boot/spring_boot_database_handling.htm

                                  다만, com.mysql.jdbc.Driver으로 안내되어 있는데, 막상 실행시켜보면 deprecated된다.

                                  com.mysql.cj.jdbc.Driver로 설정해준다.

  - url: 'serverTimezone=UTC'을 넣지 않으면 아래 무시무시한 에러로그를 발견하게 될 것이다.

The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.21.jar:8.0.21]
    .....

  - username: root

  - password: DB를 생성할 때 입력했던 password를 넣어두면 된다.