YAML ํ์ผ์ด๋?
YAML(YAML Ainโt Markup Language, ์ด์ ์๋ Yet Another Markup Language)์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ , ๋ค์ํ ํ๊ฒฝ์์ ๋๋ฆฌ ์ฐ์ด๋ ๊ตฌ์ฑ(config) ํ์ผ ํฌ๋งท์ด๋ค.
์ฃผ์ ํน์ง
- ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ก ๊ตฌ์กฐ๋ฅผ ํํํจ ย
- ์ค๊ดํธ/๋๊ดํธ ์์ด ๊ฐ๊ฒฐํจ ย
.yaml
,.yml
ํ์ฅ์ ์ฌ์ฉ ย- ์๋ฒ ์ค์ (Docker, Kubernetes ๋ฑ)์ด๋ ๋ฐ์ดํฐ ์ง๋ ฌํ์ ์์ฃผ ์ฌ์ฉ
- ๋ค์ฌ์ฐ๊ธฐ๋ก ๊ณ์ธต(๋ถ๋ชจ-์์) ๊ตฌ์กฐ ํํ
๋ ธ๋ (Node) : YAML์ ๊ตฌ์ฑ ์์
YAML ๋ฌธ์์ โ๊ตฌ์ฑ์์ ํ๋ํ๋โ๋ฅผ ๋ชจ๋ ๋
ธ๋๋ผ๊ณ ํ๋ค.
YAML ์ ์ฒด ๋ฌธ์๋ ๋ฃจํธ ๋
ธ๋๋ผ๊ณ ํ๋ฉฐ ๋
ธ๋ ํ์
์๋ Map, Sequence, Scalar 3๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
-
Map : ๋๋ค๋ฅธ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ
key: value
-
Sequence : ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ
- item1 - item2
-
Scalar : ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ๊ฐ์ผ๋ก Map์์ value์ ํด๋น (hello world)
message: hello world #ย โ keyย ย โ value(=Scalar)
๊ธฐ๋ณธ ๋ฌธ๋ฒ ์์
server:ย ย ย ย ย ย ย ย # Map ๋
ธ๋ (๋ฃจํธ์ ์์, ํค: server)
ย host: 127.0.0.1ย ย ย #ย โโ Map ๋
ธ๋ (ํค: host, ๊ฐ: 127.0.0.1, Scalar ๋
ธ๋)
ย port: 8080 ย ย ย ย ย #ย โโ Map ๋
ธ๋ (ํค: port, ๊ฐ: 8080, Scalar ๋
ธ๋)
users: ย ย ย ย ย ย ย ย # Map ๋
ธ๋ (ํค: users, ๊ฐ: Sequence ๋
ธ๋)
ย - name: aliceย ย ย ย #ย โโ Sequence ๋
ธ๋ (๋ฆฌ์คํธ ์์ดํ
, Map ๋
ธ๋)
ย ย email: alice@example.com ย #ย โย ย โโ Map ๋
ธ๋ (ํค: email, ๊ฐ: alice@example.com, Scalar)
ย - name: bobย ย ย ย ย #ย โโ Sequence ๋
ธ๋ (๋ฆฌ์คํธ ์์ดํ
, Map ๋
ธ๋)
ย ย email: bob@example.com ย ย #ย โย ย โโ Map ๋
ธ๋ (ํค: email, ๊ฐ: bob@example.com, Scalar)
features:ย ย ย ย ย ย ย # Map ๋
ธ๋ (ํค: features, ๊ฐ: Map ๋
ธ๋)
ย logging: trueย ย ย ย #ย โโ Map ๋
ธ๋ (ํค: logging, ๊ฐ: true, Scalar ๋
ธ๋)
ย debug: false ย ย ย ย #ย โโ Map ๋
ธ๋ (ํค: debug, ๊ฐ: false, Scalar ๋
ธ๋)
YAML์์ &
์ต์ปค์ ๋ฒ์์ ์ธ๋ดํ
์ด์
๊ธฐ์ค
&
(Anchor)์ *
(Alias)์ ๊ธฐ๋ณธ ๊ฐ๋
- anchor (
&
) : ์ด๋ค ๋ ธ๋์ ์ด๋ฆ์ ๋ถ์ฌ ๋์ค์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํจ - alias (
*
). ์์ ์ ์๋ ์ต์ปค๋ฅผ ์ฐธ์กฐํจ
์ต์ปค์ ์ ์ฉ ๋ฒ์
- ์ต์ปค๋ ์์ ์ด ๋ถ์ ๋ ธ๋ ์ ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณต์ฌ๋จ
- ์ฆ,
&name
์ด ๋ถ์ ์์น์์ ํด๋น ๋ ธ๋์ ์ ์ฒด ํ์ ๊ตฌ์กฐ ๊ฐ ๋ณต์ฌ๋จ - ์ด๋ ๋ค์ฌ์ฐ๊ธฐ(indentation) ๋ ๋งค์ฐ ์ค์ํจ. ๊ฐ์ ์์ค์ ์ธ๋ดํธ๋ก ๋ฌถ์ธ ๋ธ๋ก ์ ์ฒด๊ฐ ์ต์ปค์ ๋ฒ์์
์์
common-config: &common
ENV1: "value1"
ENV2: "value2"
my-service:
environment:
<<: *common
ENV3: "value3"
- ์ฌ๊ธฐ์ &common์ ENV1, ENV2๊ฐ ๋ค์ด ์๋ ๋ธ๋ก ์ ์ฒด๋ฅผ ์ต์ปค๋ก ์ ์ฅํจ
- <<: common์ ํตํด ํด๋น ๊ฐ์ ๋ณต์ฌํด์ my-service.environment์ ์ฝ์ ํจ
- ENV3๋ ๋ณต์ฌ๋ ๊ฐ ๋ค์ ์ถ๊ฐ๋จ
์ธ๋ดํ ์ด์ ๊ธฐ์ค ์ ๋ฆฌ
- &name์ด ์ ์ธ๋ ๋ผ์ธ์ ๋ค์ฌ์ฐ๊ธฐ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์์ค์ ๋ ธ๋ ์ ์ฒด๊ฐ ๋ณต์ฌ ๋์
- ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๋ ๋ฒจ๋ก ์ธ์๋์ด ๋ณต์ฌ๋์ง ์์
๊ฒฐ๋ก
- &์ ๋ฒ์๋ ์์ ๊ณผ ๋์ผํ ์ธ๋ดํธ ์์ค์ ๋ธ๋ก ์ ์ฒด
- ์ต์ปค๋ฅผ ์ค์ ํ ๋ ๋ฐ๋์ ์ ํํ ๋ค์ฌ์ฐ๊ธฐ ๊ฐ ์ ์ง๋์ด์ผ ํจ
- YAML์์๋ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์๋ฏธ๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ ๋ฌธ๋ฒ ์ด๋ฏ๋ก, &, *, <<๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ดํธ๋ฅผ ํญ์ ์ฃผ์ํด์ผ ํจ