[Spring] 데이터베이스 initialization 관련 정리

최동근·2023년 6월 26일
0

안녕하세요 오늘은 데이터베이스 초기화 작업과 관련해서 제가 깨달은 점들을 정리하려고합니다 🏡

🌱 스프링부트의 DDL 자동 생성 기능

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}

profile
비즈니스가치를추구하는개발자

0개의 댓글