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
'Spring' 카테고리의 다른 글
Spring Interceptor - 인터셉터로 로그인 체크하기 (0) | 2023.09.12 |
---|---|
Spring - 회원 팔로우 기능 구현 (1) | 2023.06.08 |
Spring - 통합 테스트에서 S3 Mock 객체로 S3 자원 아끼기 (2) | 2023.05.24 |
Spring - 좋은 단위 테스트를 만드는 방법(JUnit) (2) | 2023.04.22 |
Spring - 이메일 인증 구현해보기 (랜덤 인증번호 보내기) (9) | 2023.04.21 |