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
를 사용하면 안된다.
create
, update
를 사용한다.update
, validate
를 사용한다. (create를 쓰면 다른 개발자가 테스트한 데이터가 모두 날라가므로 주의)validate
, none
을 사용한다.종류 | 역할 |
---|---|
create | 기존테이블을 삭제하고 다시 생성 |
create-drop | 기존테이블을 삭제하고 다시생성. 종료 시점에 테이블삭제 |
update | 변경된 스키마 적용 (운영DB에서 사용X) |
validate | Entity와 테이블이 정상 매핑 되었는지 확인 |
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
으로 선택한다.
참조