10. 테스트 DB 서버 분리
이쯤에서 DB의 테스트 서버와 서비스 서버를 분리시키는 것이 좋을 것 같다.
단지 test 패키지에 application.yml을 작성해 두는 것 만으로는 DB가 분리되지 않는다.
main 패키지의 application.yml 내부에 다음의 코드를 작성해 두니 테스트 코드와 실 배포 코드의 DB가 분리되었다.
spring:
profiles:
active : local
include : test
include 뒤에 붙는 문자와 test 패키지 내부의 resource 아래에 있는 yml 파일의 이름을 확인하는 것 같다.
application-\[별칭] 의 별칭과 include : \[별칭]의 별칭이 같다면 해당 yml 파일을 사용하는 것 같다.
별칭에 매칭되는 yml 파일이 없으면 기본적으로 main 아래의 application.yml 파일의 datasource를 사용하는 듯 하다.
아직 profile에 대해서는 모르는 부분이 많으니 추가 공부를 진행 해야 겠다.
DataSource 사용
이제, 스프링이 자동으로 주입해 주는 DataSource 빈을 사용해 DB에 접근해야 한다. 때문에 우리의 DAOContext를 수정해 주어야 한다.
수정해 줄 부분은 Connection을 받아오는 부분이다.
public Connection getConnect() throws SQLException {
//return DriverManager.getConnection(url, userName, password);
return this.dataSource.getConnection();
}
DriverManager를 사용해 직접 Connection을 가져오는 대신, Spring이 주입해 주는 DataSource 빈을 사용한다.
DB 초기화
데이터베이스를 사용할 떄 개발환경에서는 매 실행마다 데이터베이스를 초기화 해 주거나, 더미 데이터를 넣어야 할 때가 있다.
개발 환경에서 사용할 application-dev.yml을 작성한다.
spring:
sql:
init:
mode: always
나머지 환경은 application.yml과 똑같이 사용할 것이기 때문에 해당 부분만 적어준다.
다음으로 초기화에 사용할 schema.sql을 작성해 준다.
drop table if exists posting;
drop table if exists users;
CREATE TABLE users (
idx int NOT NULL AUTO_INCREMENT,
id char(20) NOT NULL,
password char(20) NOT NULL,
PRIMARY KEY (`idx`)
);
CREATE TABLE posting (
idx int NOT NULL AUTO_INCREMENT,
title char(20) NOT NULL,
user_idx int NOT NULL,
content char(255) NOT NULL,
PRIMARY KEY (idx),
KEY user_idx (user_idx),
FOREIGN KEY (user_idx) REFERENCES users (idx)
);
마지막으로, 인텔리제이에서 스프링부트를 실행할 때 사용할 profile을 설정해 준다.
active profiles에 dev를 적어 주면, application-dev를 통해 설정을 가져온다.
도움받은 블로그
https://wildeveloperetrain.tistory.com/228