yml 파일 작성기

최지환·2023년 2월 13일
0

프로젝트-모각코

목록 보기
4/7
post-thumbnail

처음으로 apllicaiton.yml 파일을 설정하면서 뭐부터 설정을 해야할지 막막했다. 그래서 처음에는 강의 때 배웠던 내용을 그대로 가져와서 하나씩 추가해보기도 했고, 검색을 통해 다른 사람들이 많이 사용하는 형식을 가져와서 설정을 하기도 했다.

그러다 보니,, 점점 더 난해하게 되었고, 결국 하나씩 차근차근 설정하기로 했다. 우선적으로는 DataBase 관련 세팅을 1순위로 하고, 2순위로는 jpa 관련 설정, 3 순위로는 profile 설정을 하기로 했다.

  • DataBase 관련 설정
  • jpa 관련 설정
  • profile 설정

DataBase 관련 설정

→ 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.Drivercom.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 는 무엇을 의미 할까?

하나씩 살펴보자/

SSL 설정

MySql이 5.5 버전 부터 SSL 접속이 기본으로 되게 세팅이 바뀌었다고 한다. 따라서 SSL 관련 처리를 해주지 않으면 에러 or 경고가 발생하기 때문에 SSL 접속을 사용하지 않는다면 false로 명시해서 꺼주면 된다.

→ 나는 굳이 사용을 하지 않을 거라 판단해서 설정을 꺼줬다.

TimeZone 설정

우선 TimeZone이 뭔지 살펴보자.

TimeZone은 말 그대로 시간 설정을 하는 것이다. 나는 local환경에서는 Asia/Seoul 을 사용하고 있다.

따라서 local에서만 사용한다면 굳이 설정을 해주지 않아도 되지만, 만약 프로젝트를 배포하거나, ci/cd 환경에서 사용하는 서버의 timezone local과 다르면 문제가 발생 할 수 있다.

→ 일반적으로 리눅스 환경에서는 타임존 설정이 UTC 타임존으로 설정이 되어있다. [한국과 9시간의 시차 발생]. 따라서 local 에서 Asia/Seoul 을 사용해서 프로젝트 개발시 문제가 되지 않는다고 하더라도, 외부의 리눅스에서 ci/cd를 할 시 서로 다른 timezone으로 인해 문제가 발생한다.

CharacterEncoding 설정

데이터베이스에서 사용하는 인코딩에 대한 설정이다.

영어만들 사용한다면 설정을 굳이 해주지 않아도 된다. 하지만 한글을 사용하려면 UTF-8 설정을 해줘야한다.

username 과 password 설정

데이터베이스 접근시 사용하는 이름과 패스워드를 기입하면 된다.


Jpa 관련 설정

나는 다음과 같이 설정 했다.

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 옵션을 명시 할 수 있다.

  • none : 옵션 없음
  • update : 테이블의 내용이 변경된 경우 자동으로 ddl 실행
  • create : 프로그램 시작 시, 모든 테이블 drop 후 실행
  • create-drop : application 시작 시 create 후, 종료 시 모든 테이블 drop
  • validate : 테이블 내용이 변경 되면 변경 내용을 출력하고 application 종료

https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

0개의 댓글