[Spring] 서버 실행 시 Database에 데이터 삽입하기

Dev_ch·2022년 11월 4일
3

서버가 가동될때 테스트할 데이터들이 자동으로 들어갔으면 좋겠어요 !

이 부분을 초반에 다뤘어야 했는데 안다루고 까먹고 있다가 이제서야 적는다. 개발할때 우리는 보통 테스트 서버에서 ddl-auto를 사용하고 보통은 create, create-drop, update를 사용한다. 코드는 아래와 같다.

application.properties

spring.jpa.hibernate.ddl-auto=create

우리는 create를 사용한다고 가정하면 회원가입 / 로그인 / 조회 등을 테스트 하기 위해 DB에 직접 쿼리를 날려주거나 PostMan, MVC 등일 이용하여 사용자의 정보를 만들어준다.

근데 사실 이게 이만저만 귀찮은 일이다, 우리는 개발해야되는데 언제 다 넣고 치고 있을 시간이 없다.

해결


1. 설정파일에 구문 추가

spring.jpa.defer-datasource-initialization = true
spring.sql.init.mode = always

우리는 설정파일에 2가지 구문을 작성해줄 것 이고 설명은 아래와 같다.

spring.jpa.defer-datasource-initialization = true

  • gradle 2.5이상 버전부터 sql 스크립트는 Hibernate가 초기화되기 전에 실행되는데, 스크립트를 사용하여 Hibernate에 의해 생성된 테이블에 데이터를 채우려면 spring.jpa.defer-datasource-initialization을 true로 설정하라고 지시되어 있다.

spring.sql.init.mode = always

always: 모든 데이터베이스에 sql 스크립트를 동작시킨다.
embedded: embedded 데이터베이스만 sql 스크립트를 동작시킨다.
never: 모든 데이터베이스에 sql 스크립트를 동작시키지 않는다.

  • 위 설정은 schema.sql,data.sql등의 스크립트를 동작할지 설정한다.

2. SQL 스크립트 생성

위의 사진처럼 패키지 내부에 data.sql 스크립트를 생성할 것 이다. 그리고 쿼리 문을 사용하여 안에 자신이 추가할 데이터들을 적어주자. 아래의 코드는 예시이다.
INSERT INTO user (id,email,name,pw) VALUES (1,'admin@naver.com','admin','$2a$10$D99zvd9eSCquwrkA5ss7L.GiYshRHu2x.MEgvTbk80SpnGahGNKse');
INSERT INTO user (id,email,name,pw) VALUES (2,'user@naver.com','user','$2a$10$D99zvd9eSCquwrkA5ss7L.GiYshRHu2x.MEgvTbk80SpnGahGNKse');

이렇게 스크립트안에 쿼리문을 추가했다면 이제 서버를 실행해보자. 다만 update의 경우 Pk가 중복된다면 당연하게도 Exception이 발생하게되니 되도록이면 create, create-drop을 사용핮.

3. 서버 실행

서버가 무사히 실행되었다면 자신의 DB를 확인해보면 작성해둔 쿼리문이 정상적으로 작동되었음을 알 수 있다.


마무리

실제서버에서는 ddl-auto를 사용하지 않거나 하더라도 none 또는 validate 사용할 것 이다. 하지만 테스트를 하기 위한 서버의 경우, 특히 로컬에서는 데이터들을 직접 넣어주고 삭제하는 것들이 상당히 귀찮은데 위와 같이 쉽게 해결 할 수 있다. 개발을 하는 것도 중요하지만 개발만을 집중할 수 있는 환경을 구성해주도록 하자 !

profile
내가 몰입하는 과정을 담은 곳

0개의 댓글