제목 날짜 내용 발행일 23.04.03
해당 포스트는
YAML
를 학습한 것을 정리한 내용입니다.
Yet Another Markup Language의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어를 의미.
YAML을 YAML ain’t markup language(재귀 약어)로 생각하는 사람도 있다.
후자는 YAML이 문서가 아닌 데이터용임을 강조하는 말이라고 생각하자.
파일로 작성시 확장자는 .yaml
혹은 .yml
확장자를 가진다.
YAML은 사람이 읽을 수 있고 이해하기 쉬워 프로그래밍 언어 중에서도 인기가 높다.
다른 프로그래밍 언어와 함께 사용할 수도 있다.
YAML은 그 유연성과 접근성으로 인해 자동화 프로세스를 생성하는 데에도 사용된다.
Github actions 튜토리얼 컨텐츠에 있던 YAML 파일 하나를 보자.
# [코드] Github actions 설정을 위해 작성된 YAML 파일
name: Bare Minimum Requirements
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Bare Minimum Requirements
uses: actions/setup-node@v1
with:
node-version: '16'
- run: npm install
- run: npm test
위의 YAML 파일을 보면 다른 형식의 파일과는 조금 다른 점이 눈에 보인다.
이번에는 MDN에 게시된 JSON 파일을 보자
# [코드] MDN의 JSON 파일
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
}
]
}
JSON 파일과 YAML 파일은 key-value 형태로 작성된 파일이며, 계층 구조를 가지는 것에는 동일하다.
그러나 YAML 파일은 "" (큰따옴표, double quotation marks) 없이 문자열 작성이 가능해, 설정을 위한 스펙이나 프로퍼티 값 등이 JSON 파일에 비해 한 눈에 들어온다
또한 JSON 파일처럼 {} 형태로 감싸줄 필요가 없다. 그렇기 때문에 스코프의 압박(잘못 쓰면 일일이 어디가 처음이고 끝인지 찾아야 하는 등)에서 벗어날 수도 있다.
게다가 YAML 파일은 JSON 파일과 다르게 주석을 작성할 수 있다는 점도 굉장한 이점으로 작용한다.
JSON 파일은 주석을 작성할 수 없기 때문에 해당 파일 하나만 두고 커뮤니케이션 하기가 까다롭지만, YAML 파일은 애초에 파일 내에 주석을 작성할 수 있기 때문에 커뮤니케이션 하기가 훨씬 수월하다.
그리고 YAML은 JSON의 상위 호환 격이므로, 기존 json문서를 그대로 yaml파일로 사용하거나 원하는 부분만 손볼 수 있다.
반대로 yaml을 json으로 변환해 사용할 수도 있다는 점이 장점이다.
YAML도 일종의 프로그래밍 언어이기 때문에 문법이 있다.
해당 문법을 지켜 작성하지 않으면 YAML 파일로 읽지 못하기 때문에, 문법을 잘 지켜야 한다.
#
: 주석
---
: 문서의 시작 (선택사항)
...
: 문서의 끝 (선택사항)
#이런 식으로 주석을 작성할 수 있습니다.
--- #문서 시작
#이 사이에 내용이 들어갑니다.
... #문서 끝
들여쓰기 :
2칸
또는 4칸
을 지원key: value
이며, :
다음에는 무조건 공백 문자
가 와야한다.
key: value
int
, string
, boolean
, 리스트
, 매핑
을 지원
여기서 int
와 string
타입은 스칼라(Scalar)라 부르고, 배열 혹은 리스트는 시퀀스(Sequence)라 부른다.
매핑에는 기본 표현인 key-value
쌍 및 hash
, dictionary
가 포함
#int(숫자)
int_type: 1
#string(문자열)
string_type: "1"
#blooean(참/거짓)
boolean_true_type: true
boolean_false_type: false
#이외에 yes, no로 작성하기도 합니다.
yaml_easy: yes
yaml_difficult: no
#리스트(배열 형태)
person:
name: Chungsub Kim
job: Developer
skills:
- docker
- kubernetes
# JSON 형식의 "skill" : [docker, kubernetes]와 같습니다.
객체 표현은 key
작성 후 두 칸을 들여써서 key-value 형태로 작성을 해주거나, key
를 작성 후 중괄호({}
)로 한 번 묶고 key-value 형태로 작성
key:
key: value
key: value
#또는 이렇게도 작성합니다. 가독성을 위해 사용합니다.
key: {
key: value,
key: value
}
줄바꿈 표현(|
)과 줄바꿈 무시 표현(>
)이 있다.
# |는 줄바꿈 표현입니다.
# JSON 형식의 "comment_line_break": "Hello codestates.\nIm kimcoding.\n"과 같습니다.
comment_line_break: |
Hello codestates.
Im kimcoding.
# >는 줄바꿈 무시 표현입니다.
# JSON 형식의 "comment_single_line": "Hello world my first coding."과 같습니다.
comment_single_line: >
Hello world
my first coding.
key-value 쌍에서 value에 :
가 들어간 경우는 반드시 따옴표가 필요
# error가 납니다.
windows_drive: c:
# 이렇게 써야 합니다.
windows_drive: "c:"
windows_drive: 'c:'
YAML은 일반적으로 설정 파일(configure file 등)에 사용하기에 좋다.
따라서 spring boot, github action 등 다양한 CI/CD 툴이나 프레임워크에서 사용되고 있다.
YAML을 실제로 사용하고 있는 프레임워크 중 쿠버네티스 또한 대표적으로 뽑을 수 있다.
기본적인 팟, 레플리카, 디플로이먼트 등 모든 내부 오브젝트가 yml문서로 작성되어 있으며, yaml고유 기능 중 하나인 문서 스트림을 사용해 클러스터 전체의 설정을 파일 하나로 관리하기도 한다.