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

2024. 5. 28. 01:22·Back-end/Spring
목차
  1. 1. application.yml 수정
  2. 2. data.sql 작성
반응형

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

 

흔히 서버를 실행할 때 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 동적 네이티브 쿼리, 제대로 알고 사용하자  (2) 2024.05.22
  1. 1. application.yml 수정
  2. 2. data.sql 작성
'Back-end/Spring' 카테고리의 다른 글
  • [Spring] WebClient를 사용한 외부 API 통신
  • [Spring] Swagger 사용 및 JWT과 https 적용해보기
  • [Spring] JPA "Row size too large" 문제 분석하기
  • [Spring] CORS-safelisted response header 문제 해결하기
류건
류건
개발 일지
  • 류건
    건's Dev
    류건
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • Back-end (56)
        • Spring (31)
        • Nest.js (3)
        • Next.js (2)
        • Node.js (3)
      • Infra & Cloud (21)
        • Cloud Computing (6)
        • Docker (3)
        • AWS (7)
      • Java (2)
      • Computer Science (12)
        • Computer Network (0)
        • Operating System (0)
        • 정보 보호와 시스템 보안 (12)
        • Software Architecture (0)
      • 회고록 (2)
        • 우아한테크코스 (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.