YAML이 뭘까요
배포 workflow를 YAML로 관리하는 것을 보고 YAML이 무엇인지 알아보기로 했다.
요약
What is YAML.
YAML은 JSON의 불편한 점을 보완하기 위해 나온 JSON의 superset이다.
Superset이기 때문에 JSON과 기본적으로 같다. 좀 더 편리해졌다.
- 주석을 달 수 있게 되었다. JSON에서는 달 수가 없어 이 설정파일이 뭔지 알기 힘들다
- 모든 문자열에 “”(따옴표)가 강제되지 않게 된다.
- 중괄호를 꼭 감싸줄 필요가 사라졌다.
- 쉼표로 각 프로퍼티들을 모두 구분해주지 않아도 된다.
How
1 2 3 4 5 6 7 8 9 10 11 12
on: push: branches: - 'main' #main에 push 될 때라는 뜻이다. 이렇게 주석도 쓸 수 있다 jobs: build: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/... #배열 아이템은 - 로 구별한다. - name: BuildExample run : blah blah #객체는 들여쓰고 ':' 를 쓰는 것으로 구분한다.
위 YAML의 JSON 표현은 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"on": {
"push": {
"branches": [ "main" ]
}
},
"jobs": {
"build" : {
"runs-on" : "ubuntu-latest",
"timeout-minutes": 10,
"steps": [
{ "uses": "actions/..."},
{ "name" : "BuildExample",
"run" : "blah blah"
}
]
}
}
}
아휴 귀찮아
한번 써보니 왜 YAML이 나오게 되었는지 바로 알게 되었다.
띄어쓰기와 인덴트가 문법으로 들어간다. 파이썬과 비슷하다는 생각이 들었다.
어디에 사용될까
GitHub Action 설정파일에 사용하고 있다. 주석등을 달아 코드 의도를 드러내기도 쉽고. 읽고 쓰기 간편해서 사용되고 있다.
→ 설정파일에 적합하다면 왜 npm에서 package.yaml을 안쓰고 package.json을 기본으로 쓸까?
https://github.com/npm/npm/issues/3336
https://github.com/npm/npm/issues/5901
5년전에 논쟁하고 있었다. “주석기능도 있고 config 파일로 YAML이 더 적합하니 추가하자” 와 “이미 잘 되고 있으니 굳이 추가하지 않는다”의 의견이 갈렸다. 🤔
- 단점
- 인덴트로 구분하기 때문에 depths가 많아지면 읽기 힘들다
참고자료
https://yaml.org/ https://www.redhat.com/en/topics/automation/what-is-yaml
This post is licensed under CC BY 4.0 by the author.