Data.sql 써보기

코드를 짜다보면 실제로 애플리케이션을 실행하고 제대로 돌아가는지 테스트를 위해 데이터를 먼저 밀어넣어둬야할 때가 있다.

postman 같은걸로 하나하나씩 넣어둘 수도 있지만 data.sql 을 이용하면 편리하게 초기 데이터를 설정할 수 있다.

 

application.yml

spring:
  jpa:
    hibernate:
      ddl-auto: created
    defer-datasource-initialization: true # (SpringBoot 2.5~) Hibernate 초기화 이후 data.sql 실행
    
  datasource:
    url: jdbc:h2:mem:dunple;NON_KEYWORDS=USER
    username: sa
    password:
    driver-class-name: org.h2.Driver

ㄴ spring.jpa.defer-datasource-initialization

SpringBoot 2.5 이후부터 지원하는 기능이다.

Hibernate 초기화 이후 data.sql 를 실행시켜준다.

참고로 해당 옵션을 사용하면 ddl-auto 옵션에 대한 설정이 먼저 실행되고 이후 script 가 실행된다.

ㄴ NON_KEYWORDS=USER

'USER' 는 H2 데이터베이스 예약어이기 때문에 사용할 수 없으므로 TABLE 명을 'USERS' 로 바꿔도 되지만

위처럼 NON_KEYWORDS 세팅을 하면 사용할 수 있다.

 

data.sql

참고로 schema.sql 없이 data.sql 단독으로 사용 시 jpa.hibernate.ddl-auto 가 none 으로 설정돼있으면

Table "USER" not found 라는 오류문과 함께 동작하지 않는다.

(해당 항목을 아예 작성하지 않으면 또 동작하는데 디폴트값이 none 이 아닌가? 이건 한번 알아봐야겠다.)

H2 데이터베이스로 들어가면 아래처럼 데이터가 들어가 있음을 확인할 수 있다.

 

1. 데이터가 하나일 경우

INSERT INTO `user` (name, email, password, created_at)
VALUES ('midcon', 'hyukkind@naver.com', '1234', '2023-10-01 01:00:00');

 

2. 여러개인 경우

(createDateTime, modifiedDateTime 은 위처럼 따로 설정하면 들어간다.)

INSERT INTO product(product_number, type, selling_status, name, price)
VALUES ('001', 'HANDMADE', 'SELLING', '아메리카노', 4000),
       ('002', 'HANDMADE', 'HOLD', '카페라떼', 4500),
       ('003', 'BAKERY', 'STOP_SELLING', '크루아상', 3500);

 

 

 

참고자료)

 

Spring Boot 초기 데이터 설정 방법 정리(data.sql, schema.sql)

스프링부트 초기 데이터 설정 방법에 대한 정리 스프링부트에서는 데이터베이스 초기 설정을 위해 기본적으로 script(schema.sql, data.sql) 파일을 사용할 수 있는데요. 관념적으로 데이터 정의어(DDL)

wildeveloperetrain.tistory.com

 

+ Recent posts