본문 바로가기
프로젝트/selfmade Blog - V1 (deprecated)

10. 테스트 DB 서버 분리

by zangsu_ 2023. 8. 31.

이쯤에서 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

 

Spring Boot 초기 데이터 설정 방법 정리(data.sql, schema.sql)

스프링부트 초기 데이터 설정 방법에 대한 정리 스프링부트에서는 데이터베이스 초기 설정을 위해 기본적으로 script(schema.sql, data.sql) 파일을 사용할 수 있는데요. 관념적으로 데이터 정의어(DDL)

wildeveloperetrain.tistory.com

 

댓글