🔗 참고자료

  • 블로그 <어제보다 더 나은 개발자> spring-boot init sql (schema.sql) 이란? => 링크

 

✍ 공부하게 된 계기

JPA를 사용했을 때는 ddl-auto로 model에 설계한 대로 자동으로 처리를 해줬다.

그런데 마이바티스를 사용하면서 schema.sql이라는 것으로 초기에 DB에 쿼리문을 날리도록 한다는걸 알게되었다.

마이바티스를 처음 사용할 때 data.sql 파일에다가 ddl을 작성하는 실수도 했었다.

그래서 schema.sql과 data.sql에 대해 좀 더 찾아보고 정리하게 되었다.

 

 

 

 

schema.sql

  • 어플리케이션을 로딩 시 쿼리문을 실행하고 싶을 경우 초기에 db에 쿼리문을 날릴 때 유용하다.
  • 스프링 이용할 때 schema.sql 파일을 사용해서 초기 스키마를 생성할 수 있다.
  • schema.sql은 ddl을 작성한다
  • 스키마 : 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건등에 관해 전반적으로 정의한다.

 

 

 

data.sql

  •  스프링 부트 초기 DB 데이터를 삽입하는 쿼리문을 작성해놓는 곳이다.
  • data.sql은 dml을 작성한다. 

 

 

추가내용

  • Spring boot 2.4 이하 버전의 경우 **src/resource/** 하위에 schema.sql이나 data.sql파일이 있는 경우 자동 실행
    => 실행되지 않을 경우 spring.datasource.initialization-mode=always 를 세팅한다.
  • Spring boot 2.5 이상 버전의 경우 자동으로 실행되지 않아 spring.sql.init.mode=always 프로퍼티 값을 입력
  • JPA와 함께 사용하는 경우 Hibernate의 ddl-auto 기능과 함께 schema.sql을 실행하면 schema.sql이 먼저 실행되고
    Hibernate의 기능이 수행된다.
    => 이 순서를 바꾸고 싶으면 spring.jpa.defer-datasource-initialization=true 옵션을 입력한다.
    => schema.sql로만 설정하고 싶으면 spring.jpa.hibernate.ddl-auto=none 옵션을 입력한다.
반응형

+ Recent posts