스프링 부트 실행 시, Database sql 스크립트 실행하는 방법(더미데이터), 테이블 데이터 초기화

안녕하세요. 이번에는 요구사항에 따라 프로젝트가 실행될 때 데이터베이스 테이블이 생성된다거나 생성된 테이블에 데이터를 미리 넣어놔야하는 경우, 즉 DDL, DML 같은 스키마를 좀더 SQL 형태로 미리 정의하여 실행하는 방법에 대해서 포스팅해보고자 합니다.

 

 

1. 프로젝트 생성

먼저 간단한 스프링부트 프로젝트를 생성해야합니다. 예제이므로 어떠한 의존성도 추가할 필요가 없기 때문에 그냥 생성만 해줍니다.

 

프로젝트를 생성했다면 Eclipse나 IntelliJ 같은 IDE를 통해 작업을 하실텐데 XXXApplication 클래스가 생성되었는지 확인하시고 main 메소드가 존재하는지 확인합니다.

 

여기까지는 프로젝트 생성만 하면 별 다른 내용없이 확인 가능하실겁니다.


2. DB 연동 설정

프로젝트가 빌드되면서 sql을 실행해야하기 때문에 DB접속정보는 미리 정의되어야 연동이 될 것입니다. 이를 resources 폴더에 있는 application.properties 파일에 정의해줍니다.

 

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=java1234
spring.datasource.driver-class-name=org.postgresql.Driver

 

현재 제가 쓰는 DB는 Postgresql입니다. 각각에 알맞는 DB에 따라 정보를 입력해주시면 되겠습니다.


3. 프로젝트 빌드시 실행할 sql 파일 생성

마찬가지로 resources 폴더 밑에 sql 파일을 생성해줍니다. sql 파일의 DDL, DML 등 sql 문법은 사용하는 DB 문법에 맞춰주세요. 저같은 경우는 아래와 같이 적용하였습니다.

 

DROP TABLE IF EXISTS CITY;

CREATE TABLE CITY (ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR, COUNTRY VARCHAR, POPULATION INT);

INSERT INTO 
CITY (NAME, COUNTRY, POPULATION) VALUES ('San Francisco', 'US', 10000);
INSERT INTO CITY (NAME, COUNTRY, POPULATION) VALUES ('서울', 'KR', 20000);
INSERT INTO CITY (NAME, COUNTRY, POPULATION) VALUES ('東京', 'JP', 30000);
INSERT INTO CITY (NAME, COUNTRY, POPULATION) VALUES ('부산', 'KR', 40000);

 

city라는 테이블을 추가할 것인데 이미 존재하는 것은 지워버리고 새로 만들것입니다. 따라서 프로젝트를 실행할 때마다 기존 데이터는 삭제되고 여기 정의된 내용만 반영될 것입니다.


4. application.properties 에 등록

sql 파일을 생성했더라고 스프링에서 알지 못한다면 그냥 리소스 파일일 뿐입니다. 따라서 스프링 프로젝트가 자기가 이 sql 파일을 실행해야하는 주체로 인식하도록 application.properties에 다음과 같이 설정해줍니다.

 

spring.datasource.schema=classpath:schema.sql
spring.datasource.initialization-mode=always

 


 

모든 준비가 다 끝났고 스프링부트 프로젝트를 실행해줍니다. 메이븐이던 메인 메소드로 실행합니다.

 

에러없이 프로젝트가 실행되었다면!! 데이터베이스에서 select로 테이블과 데이터가 잘 담겨있는지 확인합니다.

 

 

저같은 경우는 성공적으로 들어있네요!!

 

감사합니다. 추후 좀더 좋은 내용으로 공유드리도록 하겠습니다!

댓글

Designed by JB FACTORY