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) ๋Š” ๋งค์šฐ ์ค‘์š”ํ•จ. ๊ฐ™์€ ์ˆ˜์ค€์˜ ์ธ๋ดํŠธ๋กœ ๋ฌถ์ธ ๋ธ”๋ก ์ „์ฒด๊ฐ€ ์•ต์ปค์˜ ๋ฒ”์œ„์ž„
์˜ˆ์‹œ
docker-compose.yaml
common-config: &common
  ENV1: "value1"
  ENV2: "value2"
 
my-service:
  environment:
    <<: *common
    ENV3: "value3"
  • ์—ฌ๊ธฐ์„œ &common์€ ENV1, ENV2๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๋ธ”๋ก ์ „์ฒด๋ฅผ ์•ต์ปค๋กœ ์ €์žฅํ•จ
  • <<: common์„ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ my-service.environment์— ์‚ฝ์ž…ํ•จ
  • ENV3๋Š” ๋ณต์‚ฌ๋œ ๊ฐ’ ๋’ค์— ์ถ”๊ฐ€๋จ
์ธ๋ดํ…Œ์ด์…˜ ๊ธฐ์ค€ ์ •๋ฆฌ
  • &name์ด ์„ ์–ธ๋œ ๋ผ์ธ์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ธฐ์ค€์œผ๋กœ ๊ฐ™์€ ์ˆ˜์ค€์˜ ๋…ธ๋“œ ์ „์ฒด๊ฐ€ ๋ณต์‚ฌ ๋Œ€์ƒ
  • ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ๋ ˆ๋ฒจ๋กœ ์ธ์‹๋˜์–ด ๋ณต์‚ฌ๋˜์ง€ ์•Š์Œ
๊ฒฐ๋ก 
  • &์˜ ๋ฒ”์œ„๋Š” ์ž์‹ ๊ณผ ๋™์ผํ•œ ์ธ๋ดํŠธ ์ˆ˜์ค€์˜ ๋ธ”๋ก ์ „์ฒด
  • ์•ต์ปค๋ฅผ ์„ค์ •ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ •ํ™•ํ•œ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•จ
  • YAML์—์„œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์˜๋ฏธ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฌธ๋ฒ• ์ด๋ฏ€๋กœ, &, *, <<๋ฅผ ์‚ฌ์šฉํ•  ๋• ์ธ๋ดํŠธ๋ฅผ ํ•ญ์ƒ ์ฃผ์˜ํ•ด์•ผ ํ•จ