처음으로 apllicaiton.yml 파일을 설정하면서 뭐부터 설정을 해야할지 막막했다. 그래서 처음에는 강의 때 배웠던 내용을 그대로 가져와서 하나씩 추가해보기도 했고, 검색을 통해 다른 사람들이 많이 사용하는 형식을 가져와서 설정을 하기도 했다.
그러다 보니,, 점점 더 난해하게 되었고, 결국 하나씩 차근차근 설정하기로 했다. 우선적으로는 DataBase 관련 세팅을 1순위로 하고, 2순위로는 jpa 관련 설정, 3 순위로는 profile 설정을 하기로 했다.
→ DataSource 설정
현재 프로젝트 초기 설정에서는 일단 DataSource 설정을 제일먼저 해야했다.
DataSource는 DB와의 커넥션 정보를 담고 있다. 즉 DataSource 가 없으면 DB에 접근을 못한다고 생각하면된다.
그래서 우선적으로 DataSource 관련 설정을 해보았다.
현재는 local 환경에 mysql8을 띄워 놓았고, mydb라는 데이터베이스를 생성해 놓았다.
우선 dataSource 설정을 해주기 위해서 검색을 조금 해봤다.
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: root
password: qwerqwer
일반적으로 사람들이 많이 사용하는 설정 방식이었다. 그럼 이를 끊어서 하나씩 알아보자
driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name
는 프로젝트에서 사용하려는 데이터베이스의 드라이버를 지정해준다.
일반적으로 스프링에서는 h2 데이터베이스를 자동으로 잡는다. 만약 h2가 아닌 그 외의 DB를 사용하려면 이렇게 Driver 설정을 해줘야한다!
mysql
사용시 사용 할 수 있는 Driver
는, com.mysql.jdbc.Driver
와 com.mysql.cj.jdbc.Driver
이렇게 두가지가 있다. com.mysql.cj.jdbc.Driver
을 사용하는게 좋다. com.mysql.jdbc.Driver
는 현재 지원 하지 않는다고 한다.
다음으로 url 설정을 살펴보자.
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
이 한줄을 조금만 끊어서 확인 해보자
url: jdbc:mysql://localhost:3306/mydb
위의 내용을 살펴보면 localhost의 3306에 있는, mydb라는 데이터베이스를 사용한다는 것을 알 수 있다.
그럼 그 뒤의 useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
는 무엇을 의미 할까?
하나씩 살펴보자/
MySql이 5.5 버전 부터 SSL 접속이 기본으로 되게 세팅이 바뀌었다고 한다. 따라서 SSL 관련 처리를 해주지 않으면 에러 or 경고가 발생하기 때문에 SSL 접속을 사용하지 않는다면 false로 명시해서 꺼주면 된다.
→ 나는 굳이 사용을 하지 않을 거라 판단해서 설정을 꺼줬다.
우선 TimeZone
이 뭔지 살펴보자.
TimeZone
은 말 그대로 시간 설정을 하는 것이다. 나는 local
환경에서는 Asia/Seoul
을 사용하고 있다.
따라서 local
에서만 사용한다면 굳이 설정을 해주지 않아도 되지만, 만약 프로젝트를 배포하거나, ci/cd
환경에서 사용하는 서버의 timezone
이 local
과 다르면 문제가 발생 할 수 있다.
→ 일반적으로 리눅스 환경에서는 타임존 설정이 UTC
타임존으로 설정이 되어있다. [한국과 9시간의 시차 발생]. 따라서 local
에서 Asia/Seoul
을 사용해서 프로젝트 개발시 문제가 되지 않는다고 하더라도, 외부의 리눅스에서 ci/cd
를 할 시 서로 다른 timezone
으로 인해 문제가 발생한다.
데이터베이스에서 사용하는 인코딩에 대한 설정이다.
영어만들 사용한다면 설정을 굳이 해주지 않아도 된다. 하지만 한글을 사용하려면 UTF-8 설정을 해줘야한다.
데이터베이스 접근시 사용하는 이름과 패스워드를 기입하면 된다.
나는 다음과 같이 설정 했다.
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
database: mysql
hibernate:
ddl-auto: create
open-in-view: false
위에서 부터 하나씩 살펴보자.
show-sql은 jpa에서 발생하는 모든 쿼리 로그 확인 할 수 있다. 하지만 show-sql: true 설정만 하게 되면 sql문을 읽기가 어렵다. 다음과 같이 로그가 한줄로 나오게 되면서 가독성이 매우 떨어지게 됨.
Hibernate : select user0_.id as id1_0, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_.name=?
이때, properties.hibernate.format_sql 설정을 true로 변경해주면 sql 로그를 포맷팅 해준다,.
그러면 sql로그가 다음과 같이 나온다.
Hibernate:
select
user0_.id as id1_0_,
user0.age as age2_0_,
user0_.name as name3_0_
from
user user0_
where
user0_.name=?
database: msql
말그대로 Jpa 사용시 어떤 데이터 베이스를 사용할지 설정하는 것이다.
hibernate.ddl-auto: ddl-auto 옵션을 명시 할 수 있다.
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html