[Spring] data.sql을 사용하여 서버 실행 시 데이터 삽입하기

2024. 5. 28. 01:22·Back-end/Spring
반응형

귀여운 댕댕이로 시작하도록 하겠다

 

흔히 서버를 실행할 때 DB에 더미 데이터가 있으면 좋겠다는 생각을 하곤 한다.

 

매번 컨트롤러에서 직접적으로 넣어주는 방식으로 테스트를 진행했었지만, 더 좋은 방법이 있었다.

 

jpa의 ddl-auto: create 옵션 설정으로 entity 생성하고 추가적인 ddl 스크립트를 만들어서 서버가 시작함과 동시에 데이터를 삽입하는 것!

 

data.sql을 통해서 dml 작업을 진행해보도록 하겠다! 

 

1. application.yml 수정

먼저 data.sql을 사용하기 위해선 반드시 jpa.ddl-auto 속성값으로 create 또는 create-drop 으로 선언해야 한다!

 spring: 
  jpa:
    database: mysql
    hibernate:
      ddl-auto: create # create or create-drop
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true

 

또한 spring.jpa.defer-datasource-initialization: true로 해야 한다. 이는 Hibernate를 초기화한 후 data.sql을 실행하기 위한 속성이다.

 

두 번째, sql 파일을 실행하겠다는 선언이 필요하다.

spring:  
  sql:
    init:
      mode: always # 서버 시작시 항상 classpath의 sql문을 실행하도록 설정

 

스프링의 경우 내장 데이터베이스(H2, HSQL, Derdy)에 대해서 스크립트 기반의 초기화를 기본적으로 실행하지만, 내장 데이터베이스가 아닌 경우 해당 옵션(always)을 활성화해야 한다.

 

때문에 사용하는 데이터베이스가 내장 데이터베이스가 아니라 외부 데이터베이스와 연결되어 있다면 다음 옵션을 활성화해야 script 파일이 적용된다.

 

위 작업들이 끝나면 data.sql을 사용할 준비가 된 것!

 

2. data.sql 작성

 

해당 sql 파일은 resource 안에 작성해주어야 한다!

 

  • Cafe entity
import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "cafe")
public class Cafe {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cafe_id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(columnDefinition = "TEXT")
    private String latitude;

    @Column(columnDefinition = "TEXT")
    private String longitude;
}
  • data.sql (예시)
-- Cafe 데이터
INSERT INTO cafe (cafe_id, name, latitude, longitude) VALUES (1, '언더그라운드커피웍스', '37.6100862904966', '126.995125457406');
INSERT INTO cafe (cafe_id, name, latitude, longitude) VALUES (2, '카페그리다', '37.60932585128242', '127.00497528986767');
INSERT INTO cafe (cafe_id, name, latitude, longitude) VALUES (3, '플레이스엔', '37.61049717085312', '126.99589444374668');
INSERT INTO cafe (cafe_id, name, latitude, longitude) VALUES (4, '카페테인', '37.6081906479131', '127.003809838548');

 

실제로 SQL 문으로 작성해야하기 때문에, JPQL로 헷갈려 하면 안된다

반응형

'Back-end > Spring' 카테고리의 다른 글

[Spring] WebClient를 사용한 외부 API 통신  (1) 2024.06.16
[Spring] Swagger 사용 및 JWT과 https 적용해보기  (2) 2024.06.05
[Spring] JPA "Row size too large" 문제 분석하기  (0) 2024.05.26
[Spring] CORS-safelisted response header 문제 해결하기  (2) 2024.05.26
[Spring] JPA 동적 네이티브 쿼리, 제대로 알고 사용하자  (0) 2024.05.22
'Back-end/Spring' 카테고리의 다른 글
  • [Spring] WebClient를 사용한 외부 API 통신
  • [Spring] Swagger 사용 및 JWT과 https 적용해보기
  • [Spring] JPA "Row size too large" 문제 분석하기
  • [Spring] CORS-safelisted response header 문제 해결하기
류건
류건
개발 일지
  • 류건
    건's Dev
    류건
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Back-end (55)
        • Spring (30)
        • Nest.js (3)
        • Next.js (2)
        • Node.js (3)
      • Infra & Cloud (20)
        • Cloud Computing (6)
        • Docker (3)
        • AWS (7)
      • Java (2)
      • Computer Science (12)
        • Computer Network (0)
        • Operating System (0)
        • 정보 보호와 시스템 보안 (12)
      • 회고록 (1)
        • 우아한테크코스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Github Actions
    Docker
    ssl
    티스토리챌린지
    정보보호
    Kafka
    WebClient
    JPA
    Lock
    Webflux
    public key
    nginx
    오블완
    JWT
    CD
    CORS
    express.js
    Spring
    Spring Boot
    고가용성
    Nest.js
    어노테이션
    ddl-auto
    https
    node.js
    db
    CI/CD
    보안
    EC2
    aws
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
류건
[Spring] data.sql을 사용하여 서버 실행 시 데이터 삽입하기
상단으로

티스토리툴바