yaml

Tony·2023년 4월 23일
0

이전 부터 종종 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개의 댓글