스프링 부트 환경 설정과 YAML

YAML(YAML Ain’t Markup Language)이란?

YAML은 XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 ‘사람이 쉽게 읽을 수 있는’ 데이터 직렬화 양식이다. 2001년에 클라크 에반스가 고안했고, Ingy dot Net 및 Oren Ben-Kiki와 함께 디자인했다.
YAML이라는 이름은 “YAML은 마크업 언어가 아니다 (YAML Ain’t Markup Language)” 라는 재귀적인 이름에서 유래되었다. 원래 YAML의 뜻은 “또 다른 마크업 언어 (Yet Another Markup Language)”였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었다. 오늘날 XML과 JSON이 데이터 직렬화에 주로 쓰이기 시작하면서, 많은 사람들이 YAML을 ‘가벼운 마크업 언어’로 사용하려 하고 있다.
[출처 : https://ko.wikipedia.org/wiki/YAML]

YAML은 공백 문자를 이용하여 키를 구분하며 한 파일을 하이픈 3개(—) 단위로 나누어 사용할 수 있다.

YAML 파일을 로드하기 위해선 snakeyaml 라이브러리가 프로젝트 내에 포함 되어야 한다.
스프링 부트에서 기본적으로 해당 기능이 제공되는 것은 스프링 부트 스타터의 영향이다.
spring-boot-starter의 dependency를 확인해보면 금방 알 수 있다.

spring-boot-starter pom.xml 파일

위와 같이 snakeyaml 라이브러리를 포함하고 있는 것을 확인할 수 있다.

스프링 부트는 YAML을 이용하기 위해 2가지의 Class를 제공한다.
YamlPropertiesFactoryBean를 통해 YAML을 Properties로 읽어오며 YamlMapFactoryBean를 통해 YAML을 MAP형태로 제공한다.

앞서 설명했듯이 YAML은 하이픈 3개(—)를 이용하여 파일을 나눌 수 있다.
이를 이용하여 프로파일에 따라 구분하여 설정할 수 있다.
스프링이 프로파일별로 파일을 분리하는 반면 스프링부트는 한 파일 내에 프로파일을 구분할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
server:
address: 192.168.1.100
---
spring:
profiles: development
server:
address: 127.0.0.1
---
spring:
profiles: production & eu-central
server:
address: 192.168.1.120

위와 같은 방식으로 spring.profiles을 구분할 수 있으며 연산자를 이용하는 방법도 있으니 참고하면 좋다.

  • !: NOT 연산자, 해당 프로파일을 제외한다.
  • &: AND 연산자, 해당 프로파일과 다른 프로파일을 포함한다.
  • |: OR 연산자, 해당 파일 혹은 다른 파일을 포함한다.

또 다른 방법으로 application-[profile].yml과 같이 프로파일을 파일명에 추가하여 구분할 수 있다.
서비스 실행 시 프로파일 값을 -Dconfig 값으로 전달하여 설정 파일을 구분 처리할 수 있다.

Share