0%

2월 14일 개발일지(Spring Boot 설정변수 yml, 그리고 profile에 따라 나누기)

Spring Boot 개발에 빠진…

요새 회사일과 더불어서 진행중인 오픈소스를 같이 병행하느라 바쁘네요…ㅎㅎ
그래도 둘이 거의 유사한 프로젝트여서 진행속도는 빠르게 되고 있지만…그래도 뭔가 더디긴 합니다.

아이디어 구상은 11월쯤이었고 실질적으로 막 만들기 시작한 것은 작년 12월 말? 1월 초부터 본격적으로 진행을 했던 것 같습니다.
목표는 3월 중~말쯤 완성하여 Github에 등록하는 것을 목표로 하고 있습니다.

오픈소스는 오픈소스고…이걸 현재 사내정보시스템으로 오픈하여 운영을 조금씩 해보는 중입니다.
(사실 베타버전 성향이…)

예전과 틀은 비슷한데 기능이 하나씩 올라가고 있습니다.

이번에 개발을 하다가 개발버전을 나눠서 진행을 하개 되었습니다.
어느 회사나 다 개발 운영 프로세스가 있겠지만…
대부분은 Dev, Stage, Operation 이런식으로 나눠서 개발 및 테스트 운영을 하겠쥬?
(뭐 더 세세하게 나눠서 개발 운영을 하는 곳도 있습니다.)

일단 각 버전에 대하여 설명을 드리면..
Dev는 말 그대로 개발용으로써 항상 초기화도 일어나고, 각종 더미 데이터가 심겨지고, 화이트박스 테스트를 진행하는 그런 곳입니다.
Stage는 개발이 어느정도 완료되어 특정 기능을 테스트하거나 블랙박스 테스트 등을 진행하는 곳입니다.
Operation은 실제 운영이 되는 곳으로 이곳은 절대 개발용이나 테스트로 쓰면 안되는 곳입니다.

일단 이렇게 개발환경을 나눔에 있어서 환경설정을 나눌 필요성이 생기게 되었습니다.

저는 Spring Boot의 환경설정을 properties 대신 yaml을 사용하였습니다.
yaml에 대해서는 다음 포스팅에서 다뤄보기로 하고…

대부분이 그렇겠지만 환경설정에서 데이터베이스 접속정보나 해당 웹 어플리케이션에서 사용하는 파일 경로 등 다양한 정보를 다루는데 이런 정보는 위에서 언급한 각 운영환경마다 다 틀립니다.

개발 초기 단계에서는 하나의 설정파일에서 가능했습니다.
하지만 슬슬 개발 운영 단계가 나눠지면서 환경 설정도 나눠서 구분해야 할 필요가 생겼습니다.


Application.yml 구성을 나눠보자

일단 저는 위에서 언급한 세 가지의 단계를 나눠서 yml을 사용하였습니다.
또한 여러 개의 파일을 나눠서 사용하는 것도 가능하지만, 하나의 application.yml에서 사용하는 방식을 사용하였습니다.

일단 예시로 사용할 yml 예시입니다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
server:
# ~~~~ 블라블라 환경

spring:
profiles:
active: develop
http:
multipart:
max-file-size: 30MB
max-request-size: 30MB
enabled: true

datasource:
hikari:
# ~~~~ 블라블라 환경

--- #develop
spring:
profiles: develop
devtools:
livereload:
enabled: true
thymeleaf:
cache: false

datasource:
# ~~~~ 블라블라 환경

filedata:
# ~~~~ 블라블라 환경

--- #Stage
spring:
profiles: stage

datasource:
# ~~~~ 블라블라 환경

filedata:
# ~~~~ 블라블라 환경

--- #Production
spring:
profiles: production

# ~~~~ 블라블라 환경

일단 위의 예시에서 다음과 같은 부분을 보면..

1
2
3
spring:
profiles:
active: develop

처음 시작하는 곳에서 저렇게 profiles를 명시해줍니다.
그리고 좀 내려오면 --- 표시가 있습니다.
이게 yml에서 각 profile을 구분해주는 역할을 합니다.

그래서 다음 문단에서 보면 다음과 같이 해당 profiles를 선언해줍니다.

1
2
3
--- #develop
spring:
profiles: develop

이렇게 각 영역을 나눠주고 실제 사용을 할 때는 다음과 같이 사용을 합니다.

1
2
3
4
5
6
7
server:
# ~~~~ 블라블라 환경

spring:
profiles:
active: develop #이 부분을 알맞는 프로파일로 변경
http:

이렇게 사용하게 되면 여러 application-XXX.yml 을 다룰 필요도 없이 하나의 yml 파일에서 깔끔하게 처리할 수 있게 됩니다.