Front End/JavaScript

YAML

YAML

Yet Another Markup Language의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어를 의미한다. YAML ain’t markup language(재귀 약어)로 생각하는 사람도 있는데, 이는 YAML이 문서가 아닌 데이터용임을 강조하는 말이다. 파일로 작성 시 확장자는 .yaml 또는 .yml 확장자를 가진다.

YAML은 사람이 읽을 수 있고 이해하기 쉬워 프로그래밍 언어 중에서도 인기가 높으며, 다른 프로그래밍 언어와 함께 사용할 수도 있어 이런 유연성과 접근성으로 인해 자동화 프로세스를 생성하는 데에도 사용된다.

JSON vs. YAML

name: Bare Minimum Requirements
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Bare Minimum Requirements
        uses: actions/setup-node@v1
        with:
          node-version: '16'
      - run: npm install
      - run: npm test

{
  "squadName": "Super hero squad",
  "formed": 2016,
  "members": [
    {
      "name": "Molecule Man",
      "age": 29,
      "powers": [
        "Radiation resistance",
        "Turning tiny",
        "Radiation blast"
      ]
    }
  ]
}

위의 두 파일은 key-value 형태로 작성된 파일이며, 계층 구조를 가지는 것은 동일하다. 하지만 YAML 파일은 큰 따옴표(””)없이 문자열 작성이 가능해 설정을 위한 스펙이나 프로퍼티 값 등이 JSON 파일에 비해 한 눈에 들어온다는 장점이 있고, JSON 파일처럼 {}형태로 감싸줄 필요도 없어 스코프의 압박에서 벗어날 수도 있다. 또한 주석을 작성할 수 있어 커뮤니케이션에서의 장점도 두드러진다.

YAML은 JSON의 상위 호환 격이므로 기존 JSON 문서를 그대로 YAML 파일로 사용하거나 원하는 부분만 손볼 수 있고, 반대로 변환해 사용할 수 있다는 점이 장점으로 작용한다.

YAML 문법

주석, 문서의 시작과 끝, 기본 표현

# 주석
--- # 문서 시작
	
key: value # 기본 표현 => 키: 값

path: 'c:/' # value에 :이 들어간 경우 반드시 따옴표가 필요하다.
	# 객체의 형태로 들여쓰기를 포함한 주석이 들어가면 오류가 발생한다.

... # 문서 끝
  • # : 주석. 객체 내에 작성하면 오류가 발생하니 주의가 필요하다.
  • --- : 문서의 시작 (Optional)
  • ... : 문서의 끝 (Optional)
  • key: value : 키와 값의 기본 표현. : 다음에는 반드시 공백이 와야 한다.
  • 들여쓰기 : 기본적으로 2칸 또는 4칸을 지원. 보통 2칸을 사용하며 탭 키가 아닌 스페이스 키로 들여써야 한다.

자료형

int(숫자), string(문자열), boolean(불린), 리스트(배열), 매핑, 객체을 지원한다. 여기서 intstring타입은 스칼라(Scalar)라 부르고, 배열 혹은 리스트는 시퀀스(Sequence)라 부른다. 매핑에는 기본 표현인 key-value 쌍 및 hash, dictionary가 포함된다.

# int(숫자)
int_type: 1

# string(문자열)
string_type: "1"

# blooean(참/거짓)
boolean_true_type: true
boolean_false_type: false

#이외에 yes, no로도 작성 가능
yaml_easy: yes
yaml_difficult: no

# 리스트(배열 형태)
# JSON 형식의 "skill" : [docker, kubernetes]와 같다.
skills: 
  - docker
  - kubernetes
# 일반적인 형태의 배열도 지원한다.
hobby: [music, "game", drink: soju]

# 객체
# 들여쓰기를 사용한다.
key: 
  key: value
  key: value
# 일반적인 형태의 객체도 지원한다. 가독성을 위해 사용한다.
key: {
  key: value,
  key: value
}

Text

줄바꿈 표현(|)과 줄바꿈 무시 표현(>)이 있다.

# |는 줄바꿈 표현
# JSON 형식의 "comment_line_break": "Hello codestates.\nIm kimcoding.\n"와 같다.
comment_line_break: |
  Hello codestates.
  Im kimcoding.

# >는 줄바꿈 무시 표현
# JSON 형식의 "comment_single_line": "Hello world my first coding."과 같다.
comment_single_line: >
  Hello world
  my first coding.

실제 사용 사례

YAML은 일반적으로 설정 파일(configure file)에 사용하기 좋다. 따라서 spring boot, github action 등 다양한 CI/CD 툴이나 프레임워크에서 사용되고 있으며, YAML을 실제로 사용하고 있는 프레임워크 중 쿠버네티스 또한 대표적으로 뽑을 수 있다. 기본적인 팟, 레플리카, 디플로이먼트 등 모든 내부 오브젝트가 yml문서로 작성되어 있으며, yaml고유 기능 중 하나인 문서 스트림을 사용해 클러스터 전체의 설정을 파일 하나로 관리하기도 한다.

YAML을 사용하여 오브젝트를 기술하고 있는 쿠버네티스


Uploaded by N2T