MySQL application.yml 설정

kmb·2022년 5월 1일
1

스프링부트

목록 보기
2/7
post-thumbnail

JPA 및 TEST를 위한 설정은 다음과 같다.

build.gradle (DB는 MySQL)

runtimeOnly 'com.mysql:mysql-connector-j'

// 테스트 의존성 추가
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
// P6Spy 쿼리 파라미터 로그 외부라이브러리 사용
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'

*참고 : MySQL8.0.31 버전이상부터는 runtimeOnly 'com.mysql:mysql-connector-java' 가 아닌 runtimeOnly 'com.mysql:mysql-connector-j' 사용


applcation.yml (DB는 MySQL)

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:{포트번호}/{데이터베이스 이름}?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: root
    password: {root password}


  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true
      dialect: org.hibernate.dialect.MySQL8InnoDBDialect


logging:
  level:
    org.hibernate.SQL: debug

이때 ddl-auto 옵션을 create로 하게되면 기존 테이블을 삭제후 다시 생성하게 된다.

운영장비에서는 절대 create, create-drop, update를 사용하면 안된다.

  • 개발 초기단계에는 자신의 local 서버에서 create, update를 사용한다.
  • 여러 개발자가 함께 사용하는 테스트 서버에서는 update, validate를 사용한다. (create를 쓰면 다른 개발자가 테스트한 데이터가 모두 날라가므로 주의)
  • 스테이징과 운영서버는 validate, none을 사용한다.
종류역할
create기존테이블을 삭제하고 다시 생성
create-drop기존테이블을 삭제하고 다시생성. 종료 시점에 테이블삭제
update변경된 스키마 적용 (운영DB에서 사용X)
validateEntity와 테이블이 정상 매핑 되었는지 확인
none사용하지않음

데이터베이스 생성

charset 선택에 있어서 MySQL의 utf8은 3바이트 가변 자료형으로 설계되어있다.
하지만 최근에 나온 4바이트 문자열을 utf8에 저장하면 값이 손실되는 현상이 발생한다.
2010년 3월 24일 가변 4바이트 UTF-8 문자열을 저장할 수 있는 자료형인 utf8mb4 라는 charset이 추가되었다.
따라서 utf8mb4를 선택.

collation은 general_ci, unicode_ci, bin이 있는데 이중에서 알파벳 대소문자를 구분하고 전각/반각 문자를 구분할 수 있는 bin을 선택.

최종적으로 조합을 utf8mb4_bin 으로 선택한다.

참조

profile
꾸준하게

0개의 댓글