YAML

옥영진·2020년 10월 22일
0

YAML은 원래 Yet Another Markup Language, 또 다른 마크업 언어라는 뜻을 가지고 있었으나, 마크업 언어보다는 데이터 중심이라는 것을 보여주기 위해 'YAML Ain't Markup Language' 로 바꾸었다. JSON과 유사한 부분이 많은 데이터 규격 중 하나이다.

YAML 특징

주석 지원

JSON과 달리 주석을 지원한다. 데이터 직렬화할 때는 필요가 없지만, 설정 파일 등 구조화된 데이터에 설명을 덧붙일 때 유용하게 쓰인다. 샵(#)을 사용하여 주석을 표현할 수 있다.

UTF-8, UTF-16 지원

UTF-8만 지원하는 JSON과 달리 UTF-16도 지원한다. 그래서 YAML은 UTF-16을 사용하는 윈도우, 자바에서 만든 소프트웨어의 설정 파일로도 사용할 수 있다.

앵커와 별칭

YAML이 관리하기 쉬운 또 다른 이유로 앵커와 별칭이 있다. 앵커와 별칭을 사용하여 공통으로 사용하는 값들을 한 곳에서 관리할 수 있다.

YAML 구조

YAML 구조는 JSON과 매우 유사하다.

num: 12345
pi: 3.14
str: 문자열
null_key: ~
object:
  str2: 문자열2
  object2:
    number2: 12345
num_array:
- 1
- 2
- 3
- 4
- 5
str_array:
- one
- two
- three
- four
- five

JSON과 차이점은 키와 값을 표현할 때 큰따옴표를 사용하지 않고, 중괄호 대신 들여쓰기를 사용한다. 배열 요소도 대괄호 대신 하이픈(-)을 사용한다. 그리고 null 값은 물결표(~)를 사용한다. 이렇게 사용할 수도 있지만, 주석, 앵커와 별칭을 제외하면 JSON과 완벽히 호환되기 때문에 JSON 문법처럼 표현해도 사용할 수 있다.

앵커와 별칭

number: &num 12345 # 이제 이 변수는 *num으로 접근 가능.
-
object:
  str2: 문자열2
  object2:
    number2: *num # number2 값은 number 값(12345)을 참조함.

앵커는 & 로 시작하는 식별자를 뜻하고, 별칭은 * 로 시작하는 식별자를 뜻한다. 별칭을 사용하여 어디서든 앵커로 지정된 값을 참조할 수 있다.

객체에 앵커와 별칭 사용하기

definitions:
  default: &default
    min_log_level: info
	app_name: realapp
	log_dir: logs
	secure_mode: false
  configurations:
    dev: *default
	qa: *default
	production: *default

default 설정을 &default 앵커로 지정한 후, dev, qa, production 에서 이를 참조하고 있다. 실무에서는 보통 각 환경마다 설정이 같지 않기 때문에 별칭을 덮어쓰기 형태로 사용하여 다른 값을 사용할 수 있다.

definitions:
  default: &default
    min_log_level: info
	app_name: realapp
	log_dir: logs
	secure_mode: false
  configurations:
    dev:
	  <<: *default
	  min_log_level: verbose
	  sever_url: http://dev.realapp.com
	qa:
	  <<: *default
	  server_url: http://qa.realapp.com
	production:
	  <<: *default
	  min_log_level: warning
	  secure_mode: true
	  server_url: http://www.realapp.com

<<: 키워드를 사용하여 앵커로 참조한 값에 더 많은 값을 추가하거나 덮어쓰기가 가능하다.

profile
안녕하세요 함께 공부합시다

0개의 댓글