Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자

[SpringBoot]멀티모듈에서 개발 환경별로 DB 분리하기 본문

개발자/workflow 리팩토링 프로젝트(SpringBoot,JPA,MySQL)

[SpringBoot]멀티모듈에서 개발 환경별로 DB 분리하기

GoGo개발 2023. 9. 8. 17:47

프로젝트 진행중 loval,dev,test 환경으로 DB를 분리해야 할 일이 생겼습니다.

 

test 코드 수행이 끝난 뒤 모든 데이터가 지워져서 DB가 클린상태가 되어야 하는데 그렇게 되면 API 테스트시 

DB의 기존 데이터들이 모두 삭제되는 문제가 발생했습니다. 

 

때문에 TEST용 DB를 따로 분리해주기로 했습니다.

 

aplication.yml을 분리해서 사용할 건데요, aplication.yml이란 무엇일까요?

 

aplication.yml 이란?

 

application.yml은 주로 스프링 부트(Spring Boot) 애플리케이션에서 사용되는 설정 파일입니다. 스프링 부트는 자바 기반의 웹 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크로, 이를 통해 애플리케이션의 설정을 관리할 수 있습니다.

application.yml 파일은 스프링 부트 애플리케이션의 설정을 YAML (YAML Ain't Markup Language) 형식으로 저장하는 데 사용됩니다. YAML은 사람이 읽고 쓰기 쉬우며 구조화된 데이터를 표현하는 데 사용되는 텍스트 기반의 형식입니다.

application.yml 파일에는 다음과 같은 설정 정보가 포함될 수 있습니다:

1.데이터베이스 연결
2.정보서버 포트 및 호스트 설정
3.보안 설정 (인증 및 권한 부여)
4.로깅 설정
5.애플리케이션 프로파일 (환경) 설정

 

이제 yml을 분리해보겠습니다.

 

aplicatio.yml 파일을 분리하여 빈드 시 특정 profile에 대한 파일이 적용되게 할 수 있습니다.

 

하나의 yml 파일내에서 ---을 통해서 구분하는 것도 가능하지만 yml 파일이 거대해지다 보니 위 처럼 환경마다 파일을 만들어서 yml 파일을 생성하였씁니다.

저는 어플리케이션 실행메소드가 api모듈에 존재하기 때문에 api모듈에서 환경설정을 해주었습니다.

 

yml을 하나씩 살펴볼까요?

 

먼저 application-dev.yml 입니다.

profiles 이름을 설정해주고 DB연결정보를 입력해줍니다 dev에서는 mysql/workjh 에 연결을 해줬습니다

port번호는 8000번으로 설정 해주었습니다.

 

 

다음 apllication-local.yml 입니다.

 

 

profiles 이름은 local, DB는 mysql/workflow 에 연결 해주었습니다. 패킷스니핑 방지를 위해 ssl을 적용해주고 포트번호는 8443으로 하겠습니다. ssl에 대해서는 추후에 포스팅 할 예정입니다.

 

마지막으로 apllication-local.yml 입니다.

 

Test는 api모듈이 아닌 service test코드라서 domain 모듈에서 진행을 했는데요. 

제 프로젝트의 모듈 의존도는 api -> domain 입니다. 따라서 api에서 설정한 yml파일이 domain모듈에서 테스트를 진행할때 불러오지 못하는 문제가 발생했습니다.

 

그래서 test.yml은 domain모듈에 따로 설정을 해주었습니다.

 

 

구조는 이렇게 되겠습니다.

 

마지막으로 profiles을 test로 설정해주고 DB는 mysql/worktest로 연결해주었습니다.

 

이제 실행을 해볼건데요 기본 active profile 외에 다른 profile로 실행을 해야하는데 어떻게 해야 할까요?

 

저는 인텔리제이를 사용하는데 유료,무료 버전 사용법이 달랐습니다. 무료버전 사용법을 알려드리겠습니다

별도로 VM Option을 추가해서 진행해주시면 됩니다.

 

1.Edit Configurations 클

 

2. aplication 실행환경을 선택

 

2.Modify Oprions -> Add VM options

 

3. -Dspring.profiles.active=원하는profiles 옵션을 추가해줍니다.

 

 

이제 결과를 확인해 볼까요?

 

먼저 dev profiles로 실행했을 때 

 

dev profile 로 실행

 

port 번호는 8000

 

workjh DB로 정상 실행 되었습니다.

 

 

그다음 local 환경으로 실행했을 때

 

local profile active

 

설정해준 ssl 포트 8443

 

workflow DB로 정상 작동되었습니다.

 

 

마지막 test 환경입니다.

 

테스트 코드는 @ActivePrfiles 어노테이션을 사용해서 test.yml이 구동되도록 해주었습니다.

 

 

test profile active 

 

worktest DB 연결(testDB)

 

 

 

테스트도 모두 통과도 되었고 DB가 분리되어 기존 DB들의 데이터는 변동없이 TEST DB의 데이터만 테스트코드 종료후 삭제처리 되었습니다.