์ฐ๋ฆฌ ๋ชจ๋๋ Ansible์ ์ข์ํ์ง๋ง Ansible์ YAML์ ๋๋ค. ๊ตฌ์ฑ ํ์ผ์๋ ๊ฐ ๋ชฉ๋ก, ๋งค๊ฐ๋ณ์-๊ฐ ์, INI ํ์ผ, YAML, JSON, XML ๋ฑ ๋ค์ํ ํ์์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ค์์๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ธํด YAML์ ํนํ ์ด๋ ค์ด ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํนํ ๊ณ์ธต์ ๊ฐ ์์ ์ ์ํ ์์พํ ๋ฏธ๋๋ฉ๋ฆฌ์ฆ๊ณผ ์ธ์์ ์ธ ๊ธฐ๋ฅ์๋ ๋ถ๊ตฌํ๊ณ YAML ๊ตฌ๋ฌธ์ ๋ค์ฌ์ฐ๊ธฐ์ ๋ํ Python๊ณผ ์ ์ฌํ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ธํด ์ง์ฆ์ค๋ฌ์ธ ์ ์์ต๋๋ค.
YAML์ด ๋น์ ์ ํ๋๊ฒ ํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ํด์ผ ํฉ๋๋ค! โ ์ข์ ๊ฐ์ ํ์ฉ ๊ฐ๋ฅํ ์์ค์ผ๋ก ์ค์ด๊ณ YAML๊ณผ ์ฌ๋์ ๋น ์ง๋ ค๋ฉด ๋ค์ 10๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์. ์ด ๋ชฉ๋ก์ ๊ฑธ๋ง๊ฒ ์ฐ๋ฆฌ์ XNUMX๊ฐ์ง ํ์ ์ฒ์๋ถํฐ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์์ผ๋ฉฐ ๋ง์๋๋ก ๋ช
์๊ณผ ์์ ์ํ์ ์ถ๊ฐํ ๊ฒ์
๋๋ค ๐
0. ํธ์ง๊ธฐ๋ฅผ ์๋ํ๊ฒ ๋ง๋์ธ์
์ด๋ค ํ ์คํธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์๊ด์์ด YAML ์์ ์ ์ํ ํ๋ฌ๊ทธ์ธ์ด ํ๋ ์ด์ ์์ ๊ฒ์ ๋๋ค. ์๋ ๊ฒฝ์ฐ ์ฆ์ ์ฐพ์ ์ค์นํ์ญ์์ค. ๊ฒ์ ๋ฐ ์ค์ ์ ์์๋ ์๊ฐ์ YAML์ ํธ์งํด์ผ ํ ๋๋ง๋ค ์ฌ๋ฌ ๋ฒ ๋ณด์์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํธ์ง์
YAML ๋ชจ๋์ Emacs ๋ฐ ๊ณต๋ฐฑ ํ์.
์ฆ๊ฒจ ์ฌ์ฉํ๋ ํธ์ง๊ธฐ์ YAML ๋ชจ๋๊ฐ ์์ผ๋ฉด ์ค์ ์์ ์ ํตํด ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ค GNOME ํ ์คํธ ํธ์ง๊ธฐ Gedit์๋ YAML ๋ชจ๋๊ฐ ์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก YAML ๊ตฌ๋ฌธ์ ๊ฐ์กฐ ํ์ํ๊ณ ๋ค์ฌ์ฐ๊ธฐ ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Gedit์์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ
์ฆ, ์ข์ํ๋ ํธ์ง๊ธฐ์ ๋ํด ๋ฐฐ์ฐ๋ ๋ฐ ์๊ฐ์ ํฌ์ํ์ธ์. ๊ทธ ๋๋ ๊ทธ์ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ๊ฐ YAML ์์ ์ ์ํด ๋ฌด์์ ์ ๊ณตํ๋์ง ์์๋ณด๊ณ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ญ์์ค. ๋น์ ์ ํ์คํ ๊ทธ๊ฒ์ ํํํ์ง ์์ ๊ฒ์ ๋๋ค.
1. ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ์ธ์
์ด์์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋งํฌ์
์ธ์ด๋ ์์ธก ๊ฐ๋ฅํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ์ปดํจํฐ๋ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์
์ค์น
$ sudo dnf install yamllint
๊ทธ๋ฐ ๋ค์ yamllint๋ฅผ ์คํํ์ฌ ํ์ธํ YAML ํ์ผ์ ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค. ์ค๋ฅ๊ฐ ์๋ ํ์ผ์ linter์ ์ ๋ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
์ผ์ชฝ์ ์ซ์๋ ์๊ฐ์ด ์๋๋ผ ์ค๋ฅ ์ขํ(ํ ๋ฐ ์ด ๋ฒํธ)์ ๋๋ค. ์ค๋ฅ์ ๋ํ ์ค๋ช ์ผ๋ก๋ ์๋ฌด ๊ฒ๋ ์๋ ค์ฃผ์ง ์์ ์ ์์ง๋ง ์ค๋ฅ๊ฐ ์ด๋์ ์๋์ง ์ ํํ ์ ์ ์์ต๋๋ค. ์ฝ๋์์ ์ด ๋ถ๋ถ์ ๋ณด๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ช ํํด์ง ๊ฒ์ ๋๋ค.
yamllint๊ฐ ํ์ผ์์ ์ค๋ฅ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ํ๋ฉด์ ์๋ฌด๊ฒ๋ ์ธ์๋์ง ์์ต๋๋ค. ์ด๋ฌํ ์นจ๋ฌต์ด ๋๋ ต๊ณ ์ข ๋ ํผ๋๋ฐฑ์ ์ํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ด์ค ์ฐํผ์๋(&&)๋ฅผ ํตํด ์กฐ๊ฑด๋ถ echo ๋ช ๋ น์ ์ฌ์ฉํ์ฌ linter๋ฅผ ์คํํ ์ ์์ต๋๋ค.
$ yamllint perfect.yaml && echo "OK"
OK
POSIX์์๋ ์ด์ ๋ช ๋ น์ด 0์ ๋ฐํํ๋ ๊ฒฝ์ฐ์๋ง ์ด์ค ์ฐํผ์๋๊ฐ ์คํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ yamllint๋ ๋ฐ๊ฒฌ๋ ์ค๋ฅ ์๋ง ๋ฐํํ๋ฏ๋ก ์ด ์ ์ฒด ์กฐ๊ฑด๋ถ ๊ตฌ์ฑ์ด ์๋ํฉ๋๋ค.
2. YAML์ด ์๋ Python์ผ๋ก ์์ฑ
YAML์ด ์ ๋ง๋ก ๋น์ ์ ํ๋๊ฒ ํ๋ค๋ฉด ๋ฌธ์ ๊ทธ๋๋ก ์ฐ์ง ๋ง์ญ์์ค. YAML์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ดํดํ๋ ์ ์ผํ ํ์์
๋๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ YAML ํ์ผ์ ์์ฑํ ํ์๋ ์์ต๋๋ค. ๋น์ ์ด ์ข์ํ๋ ๊ฒ์ ์ด ๋ค์ ๋ณํํ์ญ์์ค. ์๋ฅผ ๋ค์ด Python์ ์ํ ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.
์๊ธฐ ์ ํ
์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ์ผ์ YAML์ ์์ฑํ๋ Python ์คํฌ๋ฆฝํธ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์์ ๋ฐ์ดํฐ ์ธํธ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. JSON ๋ฐ์ดํฐ๋ฅผ Python ๋ณ์์ ์์ฑํ๊ณ , ์์ import ์ง์๋ฌธ์ ์ถ๊ฐํ๊ณ , ํ์ผ ๋์ ์ธ ์ค์ ์ถ๊ฐํ์ฌ ์ถ๋ ฅ์ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
#!/usr/bin/python3
import yaml
d={
"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"
}
}
}
}
}
f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close
์ด์ ์ด ํ์ผ์ Python์์ ์คํํ๊ณ output.yaml ํ์ผ์ ์ป์ต๋๋ค.
$ python3 ./example.json
$ cat output.yaml
glossary:
GlossDiv:
GlossList:
GlossEntry:
Abbrev: ISO 8879:1986
Acronym: SGML
GlossDef:
GlossSeeAlso: [GML, XML]
para: A meta-markup language, used to create markup languages such as DocBook.
GlossSee: markup
GlossTerm: Standard Generalized Markup Language
ID: SGML
SortAs: SGML
title: S
title: example glossary
์ด๋ ์๋ฒฝํ๊ฒ ์ ํจํ YAML์ด์ง๋ง yamllint๋ -๋ก ์์ํ์ง ์๋๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค. ๊ธ์, ์ด๊ฒ์ ์๋์ผ๋ก ์ฝ๊ฒ ์์ ๋๊ฑฐ๋ Python ์คํฌ๋ฆฝํธ์์ ์ฝ๊ฐ ์์ ๋ ์ ์์ต๋๋ค.
์คํฌ๋ฆฝํธ๋ฅผ ํตํ ๋ณํ
์ด ๊ฒฝ์ฐ ๋จผ์ JSON์ผ๋ก ์์ฑํ ๋ค์ ๋ณํ๊ธฐ๋ฅผ ๋ณ๋์ Python ์คํฌ๋ฆฝํธ๋ก ์คํํ์ฌ YAML์ ์ถ๋ ฅ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด์ ๋ฐฉ๋ฒ์ ๋นํด ์ด ๋ฐฉ๋ฒ์ ๋ณํ์ด ๋ฐ์ดํฐ์ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ์ฅ์ฑ์ด ๋ ์ข์ต๋๋ค.
๋จผ์ JSON ํ์ผ example.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"
}
}
}
}
}
๊ทธ๋ฐ ๋ค์ ๊ฐ๋จํ ๋ณํ๊ธฐ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ json2yaml.py๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ YAML ๋ฐ JSON Python ๋ชจ๋์ ๋ชจ๋ ๊ฐ์ ธ์ค๊ณ , ์ฌ์ฉ์ ์ง์ JSON ํ์ผ์ ๋ก๋ํ๊ณ , ๋ณํ์ ์ํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ output.yaml ํ์ผ์ ์๋๋ค.
#!/usr/bin/python3
import yaml
import sys
import json
OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')
JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()
์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์คํ ๊ฒฝ๋ก์ ์ ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ ์คํํฉ๋๋ค.
$ ~/bin/json2yaml.py example.json
3. ๋ง์ด, ์์ฃผ ๋ถ์ํ๋ผ
๋๋ก๋ ๋ค๋ฅธ ๊ฐ๋์์ ๋ฌธ์ ๋ฅผ ๋ณด๋ ๊ฒ์ด ์ ์ฉํ ๋๋ ์์ต๋๋ค. YAML์์ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ผ์์ ์ผ๋ก ์ข ๋ ์น์ํ ๊ฒ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ ๋ชฉ๋ก์ด๋ JSON ์์ ์ ์ต์ํ๋ค๋ฉด ๋ํํ Python ์ ธ์์ ๋จ ๋ ๊ฐ์ ๋ช ๋ น๋ง ์ฌ์ฉํ์ฌ YAML์ JSON์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. YAML ํ์ผ mydata.yaml์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}
์ด ์ฃผ์ ์ ๋ํ ๋ค๋ฅธ ๋ง์ ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ํ ์ฌ์ฉ ๊ฐ๋ฅํ ์จ๋ผ์ธ ๋ณํ๊ธฐ์ ๋ก์ปฌ ํ์๊ฐ ๋ง์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ์ดํดํ ์ ์๋ ๋ค์ฃฝ๋ฐ์ฃฝ๋ง ๋ณด์ด๋ ๊ฒฝ์ฐ ์ฃผ์ ํ์ง ๋ง๊ณ ๋ฐ์ดํฐ ํ์์ ๋ค์ ์ง์ ํ์ญ์์ค.
4. ์ฌ์ ์ฝ๊ธฐ
์ค๋ ํด์ ํ YAML๋ก ๋์์ค์๋ฉด ์ ์ฉํ๊ฒ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
5. ์์ฌ ๊ตฌ์ฑ
์ฑ ์ด๋ ๊ธฐ์ฌ๋ฅผ ์์ฑํ ๋ ์ต์ํ ๋ชฉ์ฐจ ํํ๋ก ๋จผ์ ์๋น ๊ฐ์๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ํญ์ ์ ์ฉํฉ๋๋ค. YAML๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ YAML ํ์ผ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํด์ผ ํ๋์ง ์๊ณ ์์ง๋ง ์ด๋ฅผ ์๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ค์ ๋ก ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋ฐ๋ผ์ YAML์ ์กฐ๊ฐํ๊ธฐ ์ ์ ์์ฌ ๊ตฌ์ฑ์ ๊ทธ๋ฆฝ๋๋ค.
์์ฌ ๊ตฌ์ฑ์ ๊ตฌ์กฐ๋ ๋ค์ฌ์ฐ๊ธฐ, ๋ถ๋ชจ-์์ ๊ด๊ณ, ์์ ๋ฐ ์ค์ฒฉ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ ์์ฌ ์ฝ๋์ ์ ์ฌํฉ๋๋ค. ์ฌ๊ธฐ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋จธ๋ฆฌ ์์ ๋ฐ์ดํฐ๊ฐ ๋ํ๋ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํด์ ๊ทธ๋ฆฝ๋๋ค.
์์ฌ ๊ตฌ์ฑ ๋ชฉ๋ก ํ๋ก๊ทธ๋๋จธ(Martin ๋ฐ Tabitha) ๋ฐ ํด๋น ๊ธฐ์ (ํ๋ก๊ทธ๋๋ฐ ์ธ์ด: Python, Perl, Pascal ๋ฐ Lisp, Fortran, Erlang ๊ฐ๊ฐ).
์ข ์ด์ ์์ฌ ๊ตฌ์ฑ์ ๊ทธ๋ฆฐ ํ ์ฃผ์ ๊น๊ฒ ๋ถ์ํ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์์ด๋ฉด ์ ํจํ YAML ํ์ผ ํ์์ผ๋ก ํ์์ ์ง์ ํฉ๋๋ค.
6. ํญ๊ณผ ๊ณต๋ฐฑ์ ๋๋ ๋ง
๋๋ ๋ง๋ฅผ ํด๊ฒฐํด์ผ ํ ๊ฒ์ด๋ค.
์ผ๋ฐ ํ ์คํธ ํธ์ง๊ธฐ์์๋ ์๋ ์์ ํญ์ ์ง์ ๋ ๊ณต๋ฐฑ ์๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ์ฃผ์ ์ง์ง์๋ค์ ๋ฐ๋์ด ๋ฐ์ํฉ๋๋ค. ํญ ๋๋ ค์ํ ํ์๊ฐ ์์ต๋๋ค.
YAML์ ์ซ์ดํ๋ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ ์๊ณ ์๋ฏ์ด ํ๋ฉด์์๋ ํญ๊ณผ ๊ณต๋ฐฑ์ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ณด์ด์ง ์๋ ๊ฒ์ด ์์ ๋, ์ฌ๋๋ค์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋ฅํ ๋ฌธ์ ๋ฅผ ๋ถ๋ฅํ๊ณ ํ์ธํ๊ณ ์ ๊ฑฐํ ํ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ง๋ง์ผ๋ก ๊ธฐ์ตํฉ๋๋ค. ๋ํ ๊ณก์ ์ด๋ ๊ณต๊ฐ ๋ธ๋ก์ ๊ฒ์ํ๋ ๋ฐ ํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ฑ ์ ๊ธด๊ธํ๊ฒ ๋ง๋ ๋ค์ ์ด๋ฅผ ์ค์ํ๋์ง ์ฒ ๊ทผ ์ฝํฌ๋ฆฌํธ ์ ๊ฒ์ ๊ตฌํํด์ผ ํ๋ค๋ ์ฌ์ค์ด ๋น๋ช ์ ์ง๋ฅด๊ฒ ๋ฉ๋๋ค(์: ๋ฆฐํฐ๋ฅผ ๊ฐ์ ๋ก ํต๊ณผ์ํค๊ธฐ ์ํ Git ํํฌ).
7. ์ ์์๋ก ์ข๋ค(๋๋ ๋ง์์๋ก ์ ๋ค)
์ด๋ค ์ฌ๋๋ค์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์กฐํ๊ธฐ ๋๋ฌธ์ YAML๋ก ์์ฑํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ๋์์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ธ๋ก์ ๊ฐ์กฐํฉ๋๋ค. ์ด๋ ๋ช ์์ ์ธ ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ๋ ๋งํฌ์ ์ธ์ด๋ฅผ ๋ชจ๋ฐฉํ๋ ค๋ ์ผ์ข ์ ์ฌ๊ธฐ์ ๋๋ค.
๋ค์์ ๊ทธ๋ฌํ ๊ตฌ์กฐ์ ์์
๋๋ค.
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
์ด๋ค ์ฌ๋๋ค์๊ฒ๋ ์ด ์ต์ ์ด ๋จธ๋ฆฌ ์์ YAML ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋์ง๋ง, ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ๋ถํ์ํ ๋ค์ฌ์ฐ๊ธฐ๋ก ์ธํด ์ง์ฆ์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทํ๊ฐ YAML ๋ฌธ์์ ์์ ์์ด๊ณ ์ด๋ฅผ ์ ์ง ๊ด๋ฆฌํ ์ฑ ์์ด ์๋ ๊ฒฝ์ฐ ๋์ ๋๋ฟ์ด์ผ ๋ค์ฌ์ฐ๊ธฐ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์ํด์ผ ํฉ๋๋ค. ํฐ ํจ๋ฉ์ด ์ง์ฆ๋๋ ๊ฒฝ์ฐ YAML ์ฌ์์ ๋ฐ๋ผ ๊ฐ๋ฅํ ํ ์ต์ํ์ผ๋ก ์ ์งํ์ธ์. ์๋ฅผ ๋ค์ด, Ansible ๋ฌธ์์ ์ ํ์ผ์ ์์ค ์์ด ๋ค์๊ณผ ๊ฐ์ด ๋ค์ ์์ฑํ ์ ์์ต๋๋ค.
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. ๊ณต๋ฐฑ์ ์ฌ์ฉํ์ธ์
YAML ํ์ผ์ ์์ฑํ ๋ ๋์ผํ ์ค์๋ฅผ ๊ณ์ ๋ฐ๋ณตํ๋ค๋ฉด ํ ํ๋ฆฟ์ ์ฃผ์์ผ๋ก ์ฝ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ๋ฒ์๋ ์ด ํ ํ๋ฆฟ์ ๋ณต์ฌํ์ฌ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
---
# - <common name>:
# name: Given Surname
# job: JOB
# skills:
# - LANG
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
9. ๋ญ๊ฐ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ๋ผ
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์๋ฅผ ๋ฐฉํดํ์ง ์๋๋ค๋ฉด YAML์ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ตฌ์ฑ ํ์ผ์ด ์์ฒด์ ์ผ๋ก ์ปค์ง ์ ์์ผ๋ฏ๋ก Lua ๋๋ Python์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
YAML์ ๋ฏธ๋๋ฉ๋ฆฌ์ฆ๊ณผ ๋จ์์ฑ์ผ๋ก ์ธํด ๋ง์ ์ฌ๋๋ค์ด ์ข์ํ๋ ํ๋ฅญํ ๋๊ตฌ์ด์ง๋ง ๋ฌด๊ธฐ๊ณ ์ ์ ์ผํ ๋๊ตฌ๋ ์๋๋๋ค. ๊ทธ๋์ ๋๋ก๋ ๊ฑฐ์ ํ ์๋ ์์ต๋๋ค. YAML์ ๋ํ ๊ตฌ๋ฌธ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ์์ฌ์ด ๋ง์ด๊ทธ๋ ์ด์ ์ต์ ์ ์ ๊ณตํ๋ฉด ์ฌ์ฉ์๋ ๋น๊ต์ ์ด๋ ค์ ์์ด ์ด๋ฌํ ์คํจ๋ฅผ ๊ทน๋ณตํ ์ ์์ต๋๋ค.
YAML ์์ด๋ ํ ์ ์๋ค๋ฉด ๋ค์ 10๊ฐ์ง ํ์ ํ์ฉํ์ฌ YAML์ ๋ํ ํ์ค๊ฐ์ ์์ ํ ๊ทน๋ณตํ์ธ์!
์ถ์ฒ : habr.com