yaml

Tony·2023년 4월 23일

이전 부터 종종 yaml 파일을 보긴 했지만 제대로 문법을 정리해본적이 없었다
이번에 Open API(swagger)를 yaml 파일로 정의하고 사용하는 것을 배우면서 yaml 문법에 대해 간단하게라도 정리하는 시간을 가져보자

YAML

  • YAML은 XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다.
  • YAML이라는 이름은 "YAML은 마크업 언어가 아니다 (YAML Ain't Markup Language)” 라는 재귀적인 이름에서 유래되었다.
    • 원래 YAML의 뜻은 “또 다른 마크업 언어 (Yet Another Markup Language)”였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었다.
    • 오늘날 XML과 JSON이 데이터 직렬화에 주로 쓰이기 시작하면서, 많은 사람들이 YAML을 '가벼운 마크업 언어'로 사용하려 하고 있다.
    • 마크업, 마크다운 : https://blog.cordelia273.space/15
  • json과 비슷하게 key: value 형태로 되어있고 리스트를 표현할 수도 있다

기본 문법

#

  • 주석
  • 한 줄이 끝날 때까지 유효하다.

---

  • 문서의 시작을 나타낸다(선택사항)

...

  • 문서의 끝을 나타낸다(선택사항)

:

  • key: value로 표현하며, : 다음에는 무조건 공백 문자가 와야된다

자료형

  • int, string, boolean을 지원한다
    • int => 1
    • string => "1"
    • boolean => true
  • object, list 표현이 가능하다

object 표현

# object 표현
key:
  key1: value1
  key2: value2

# 또는
key: {
  key1: value1,
  key2: value2
}

list 표현

# list 표현
key:
  - item1
  - item2

# 또는
key: [
  item1, item2
]

text 표현

  • |>가 있습니다
    • |는 줄바꿈을 포함
    • >는 줄바꿈을 무시
comment1: |
  Hello
  world.

comment2: >
  Hello
  world.

json vs. yaml 비교

{
  "json": [
    "rigid",
    "better for data interchange"
  ],
  "yaml": [
    "slim and flexible",
    "better for configuration"
  ],
  "object": {
    "key": "value",
    "array": [
      {
        "null_value": null
      },
      {
        "boolean": true
      },
      {
        "integer": 1
      },
      {
        "alias": "aliases are like variables"
      },
      {
        "alias": "aliases are like variables"
      }
    ]
  },
  "paragraph": "Blank lines denote\nparagraph breaks\n",
  "content": "Or we\ncan auto\nconvert line breaks\nto save space",
  "alias": {
    "bar": "baz"
  },
  "alias_reuse": {
    "bar": "baz"
  }
}
---
# <- yaml supports comments, json does not
# did you know you can embed json in yaml?
# try uncommenting the next line
# { foo: 'bar' }

json:
  - rigid
  - better for data interchange
yaml: 
  - slim and flexible
  - better for configuration
object:
	key: value
  array:
    - null_value:
    - boolean: true
    - integer: 1
    - alias: &example aliases are like variables
    - alias: *example
paragraph: >
   Blank lines denote

   paragraph breaks
content: |-
   Or we
   can auto
   convert line breaks
   to save space
alias: &foo
  bar: baz
alias_reuse: *foo 
  • yaml엔 변수 개념도 있는 것 같다
    • 변수 선언 : &foo -> 사용 : *foo

참고

profile
움직이는 만큼 행복해진다

0개의 댓글