안녕하세요 오늘은 데이터베이스 초기화 작업과 관련해서 제가 깨달은 점들을 정리하려고합니다 🏡
Spring 을 공부해본 이들이 잘 알다싶이 Springboot 에서 제공하는 기능입니다 ❗️
ddl-auto
는 데이터베이스 스키마(DDL) 을 자동으로 생성 또는 변경하는 옵션으로 create-drop
,create
,update
,validate
그리고 none
이 있습니다.
각 옵션에 대해서는 [Spring JPA] ddl-auto 기능은 무엇일까?을 참고해주세요 ❗️
결국 해당 기능을 통해 개발자는 자유롭게 데이터베이스관련 작업을 진행할 수 있습니다.
스프링 부트에서는 데이터베이스 초기 설정을 위해 script(schema.sql, data.sql)
을 사용할 수 있는데 관념적으로 DDL 은 shema.sql
에 작성하고 DML은 `data.sql에 작성합니다.
앞으로 진행될 부분은 이러한 내용을 중점으로 진행될 것이며 사실 스크립트 기반의 초기화화 Hibernate 기반의 초기화가 함께 사용되는 것은 권장되지 않습니다.
제가 실제 진행한 관련 코드에서는 docker 를 이용해 mysql 서버를 띄웠으며 data.sql 을 통해 스크립트 기반으로 초기 데이터를 집어넣으려고 했습니다.
// docker 스크립트
docker run --name novel-mysql
\ -e MYSQL_ROOT_PASSWORD=1234
\ -d -p 3305:3306 mysql:latest
// application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3305/novel?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: 1234
mvc:
pathmatch:
matching-strategy: ant_path_matcher
jpa:
properties:
hibernate:
format_sql: true
show_sql: true
hibernate:
ddl-auto: update
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
open-in-view: false
defer-datasource-initialization: true
sql:
init:
mode: always
springdoc:
packages-to-scan: com.example
default-consumes-media-type: application/json;charset=UTF-8
default-produces-media-type: application/json;charset=UTF-8
swagger-ui:
tags-sorter: alpha
operations-sorter: alpha
path: api-ui.html
api-docs:
path: /api-docs/json
groups:
enabled: true
cache:
disabled: true
logging:
level:
org.hibernate.SQL: debug
org.hibernate.type.descriptor.sql.BasicBinder: trace
file:
name: logs/application.log
encrypt:
key: ${ENCRYPT_KEY}