Spring

Spring - Spring Boot 초기 데이터 설정 (data.sql)

Cold Bean 2023. 5. 29. 20:15
728x90

프로젝트를 진행하면서 회원 가입할 때 선택할 수 있는 관심사 태그가 필요했다.

Enum으로 관리할지 테이블로 관리할지 고민했었는데, 동적으로 관리해야 할 필요가 있어서 테이블로 관리하기로 했다.

관심사 태그는 미리 지정되어 있기 때문에 데이터를 미리 넣어 사용하도록 해야 했다.

그럼 Spring Boot에서 어떻게 초기 데이터를 설정하는지 알아보자

 

yml 설정

spring:
  ...
  jpa:
    hibernate:
      ddl-auto: create
    defer-datasource-initialization: true
  sql:
    init:
      mode: always
  • spring.jpa.hibernate.ddl-auto: create:  Hibernate가 데이터베이스 스키마를 자동으로 생성하는 방법을 지정한다. create 값을 설정하면, 애플리케이션 시작 시점에 Hibernate가 데이터베이스 스키마를 생성한다. 테스트나 초기 개발에만 사용된다.
  • spring.jpa.defer-datasource-initialization: true: 데이터 소스 초기화를 지연시키는 방법을 지정한다. true로 설정하면, 데이터베이스 연결을 초기화하는 것을 미루고 애플리케이션 구동 중에 필요한 시점에서 연결을 수행한다. 
  • spring.sql.init.mode: always: SQL 초기화를 항상 수행할 것인지를 지정한다. always로 설정하면, 애플리케이션 시작 시점에 SQL 초기화를 항상 수행합니다. SQL 초기화는 schema.sql 및 data.sql 파일을 실행하여 데이터베이스 스키마와 초기 데이터를 설정한다. 이 설정은 스키마 및 데이터가 변경되는 경우에도 항상 초기화를 수행하기 때문에 데이터베이스를 재설정하고자 할 때 사용할 수 있다. 다만, SpringBoot 2.4x 이하 버전이라면 이 설정을 사용하지 않고 spring.datasource.initialization-mode=always로 설정해줘야 한다.

 

data.sql 생성

Interest.class

관심사 태그를 관리할 엔티티이다. 

@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Interest {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String type;
}

 

data.sql

SQL 초기화할 때 실행되는 파일이다. 여기에 SQL문을 작성해주면 된다.

main/resources/db/data.sql에 생성하면 별도 설정없이도 자동으로 해당 파일을 실행해준다.

insert into INTEREST (type)
values ('하이킹'),('서핑'),('다이빙'),('스노클링'),('사파리'),('스키'),('자전거'),
('액티비티'),('음식 체험'),('음악 감상'),('공연 감상'),('전시회'),('예술 관람'),
('사진 촬영'),('지역 축제'),('계획형'),('즉흥형');

 

애플리케이션을 실행한 후 DB를 확인해보면 data.sql에 작성한 sql이 잘 실행된 것을 확인할 수 있다.

 

728x90