서버가 가동될때 테스트할 데이터들이 자동으로 들어갔으면 좋겠어요 !
이 부분을 초반에 다뤘어야 했는데 안다루고 까먹고 있다가 이제서야 적는다. 개발할때 우리는 보통 테스트 서버에서 ddl-auto를 사용하고 보통은 create, create-drop, update를 사용한다. 코드는 아래와 같다.
spring.jpa.hibernate.ddl-auto=create
우리는 create를 사용한다고 가정하면 회원가입 / 로그인 / 조회 등을 테스트 하기 위해 DB에 직접 쿼리를 날려주거나 PostMan, MVC 등일 이용하여 사용자의 정보를 만들어준다.
근데 사실 이게 이만저만 귀찮은 일이다, 우리는 개발해야되는데 언제 다 넣고 치고 있을 시간이 없다.
spring.jpa.defer-datasource-initialization = true
spring.sql.init.mode = always
우리는 설정파일에 2가지 구문을 작성해줄 것 이고 설명은 아래와 같다.
spring.jpa.defer-datasource-initialization = true
spring.sql.init.mode = always
always: 모든 데이터베이스에 sql 스크립트를 동작시킨다.
embedded: embedded 데이터베이스만 sql 스크립트를 동작시킨다.
never: 모든 데이터베이스에 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을 사용핮.
서버가 무사히 실행되었다면 자신의 DB를 확인해보면 작성해둔 쿼리문이 정상적으로 작동되었음을 알 수 있다.
실제서버에서는 ddl-auto를 사용하지 않거나 하더라도 none 또는 validate 사용할 것 이다. 하지만 테스트를 하기 위한 서버의 경우, 특히 로컬에서는 데이터들을 직접 넣어주고 삭제하는 것들이 상당히 귀찮은데 위와 같이 쉽게 해결 할 수 있다. 개발을 하는 것도 중요하지만 개발만을 집중할 수 있는 환경을 구성해주도록 하자 !