Yaml을 들어보셨나요?
야믈 혹은 야물 이라고 부르는 친구입니다
초창기에는 key : value를 가진 파일을 xml로 만들었습니다
Info.plist도 이런 식이죠
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
xml의 태그 안에는 개발자가 원하는 어떤 단어라도 넣을 수 있는 장점이 있어 널리 쓰였습니다
하지만 점차 여는 태그와 닫는 태그를 작성하는 게 귀찮다는 생각이 들었죠
그래서 JSON이 등장합니다
json은 여는 태그 닫는 태그를 없애고 중괄호, 대괄호를 도입합니다
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
이걸 xml로 표현하면 이렇습니다
<!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
<glossary><title>example glossary</title>
<GlossDiv><title>S</title>
<GlossList>
<GlossEntry ID="SGML" SortAs="SGML">
<GlossTerm>Standard Generalized Markup Language</GlossTerm>
<Acronym>SGML</Acronym>
<Abbrev>ISO 8879:1986</Abbrev>
<GlossDef>
<para>A meta-markup language, used to create markup
languages such as DocBook.</para>
<GlossSeeAlso OtherTerm="GML">
<GlossSeeAlso OtherTerm="XML">
</GlossDef>
<GlossSee OtherTerm="markup">
</GlossEntry>
</GlossList>
</GlossDiv>
</glossary>
JSON으로 개발자들은 귀찮음을 상당히 덜 수 있었고 왠만한 데이터는 JSON으로 주고 받게 됩니다
하지만 개발자들은 게으르기 때문에 좀 더 편한 방법은 없는지 고민하게 되고, YAML이 등장합니다
참고로 YAML로 표현하면 이렇습니다
---
glossary:
title: example glossary
GlossDiv:
title: S
GlossList:
GlossEntry:
ID: SGML
SortAs: SGML
GlossTerm: Standard Generalized Markup Language
Acronym: SGML
Abbrev: ISO 8879:1986
GlossDef:
para: A meta-markup language, used to create markup languages such as DocBook.
GlossSeeAlso:
- GML
- XML
GlossSee: markup
YAML은 YAML Ain't Markup Language™의 약자로, 처음에는 Yet Another Markup Language라는 문장의 약자였습니다.
Linux Is Not UniX의 Linux 같은 결의 농담을 차용했다고 합니다.
YAML 혹은 YML은 JSON의 큰 몇가지 단점을 극복했습니다
1. 주석 작성 불가
2. 매번 쉼표 작성으로 git diff가 번거로움
3. 타입을 명시할 수 없음
그래서 Github Action, Docker, Flutter 등에서는 설정 파일을 yaml로 관리합니다
그래서 데이터를 주고 받을 때 보다는 환경 등 설정 파일에 주로 쓰입니다
# 해시기호로 주석을 사용할 수 있습니다
# 콜론 다음에 띄어쓰기가 있어야 합니다
keyA: hello everyone # 문자열에 따옴표를 사용하지 않아도 됩니다
key B: wow awesome # 프로퍼티에 공백이 있어도 됩니다
keyC: "'Michael Jordan' is genius" # 큰 따옴표 안에 작은 따옴표
keyD: '"Michael Jordan" is genius' # 작은 따옴표 안에 큰 따옴표도 가능합니다
# 긴 문자열 (개행 포함)은 >, |를 사용합니다
longText: >
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산
대한사람 대한으로 길이 보전하세
numberKey: 3 # 숫자로 변환이 가능한 경우에는 숫자로 인식합니다
floatKey: 123.456 # 소수도 가능합니다
exponetialKey: 123.456e+03 # 부동소수점을 지원합니다
not number: "1" # 따옴표로 감싸면 문자열로 인식합니다
boolean1: true # 불리언 사용 가능합니다
boolean2: TRUE # 대문자도 사용 가능합니다
null key1: null # null이 됩니다
null key2: ~ # ~는 null의 단축 표현입니다
date key1: 2024-04-18 # 시간 포맷을 사용할 수 있습니다
date key2: 2024-04-18T12:00:00
date key3: 12:00:00 # 시:분:초
array: # 배열의 아이템은 하이픈(-)을 사용합니다
- item1
- item2
- item3
object:
name: Michael Jordan
born:
at: February 17, 1963
in: Brooklyn, New York City, U.S.
teams he played:
- Chicago Bulls
- Washington Wizards
# anchor로 반복 작성을 피할 수 있습니다
very long string: &longString long long long long string
really long string: *longString # long long long long string으로 인식됩니다. 변수라고 생각하면 됩니다
objectA: &objectA
key1: value1
key2: value2
objectB: *objectA
objectC:
<<: *objectA # objectA를 복사해옵니다
key3: value3
# 대시 3개 (---)로 문서를 구분합니다
---
key1234: value1234
---
key1234: value1234 # 다른 문서이기 때문에 키가 겹치는 것으로 평가되지 않습니다
https://json.org/example.html
https://yaml.org
https://inpa.tistory.com/entry/YAML-📚-yaml-개념-문법-이해하기-💯-총정리
https://en.wikipedia.org/wiki/Michael_Jordan
확실히 XML이나 JSON과 비교했을 때 가독성이 좋고 한 눈에 확 들어오긴 하는군요
YAML이 데이터를 주고받기(JSON이 하는 역할) 보다는 설정 파일에 주로 쓰인다고 말씀해주셨는데요
혹시 구체적인 예시가 있을까요?? YAML이 실제 실무에서 어떤 방식으로 사용될는지 궁금합니다!!
좋은 글 작성해주셔서 감사합니다!! 오늘 하루도 좋은 하루 되세요 ㅎㅎ