DevOps24일차 - YAML

문한성·2023년 4월 11일
0

부트캠프

목록 보기
42/123
post-thumbnail

YAML: YAML Ain't Markup Language

YAML은 구조를 가진 데이터 표현 양식의 한 종류입니다. 데이터는 다양한 형태로 표현될 수 있는데 일반적으로 사용하는 JSON이나 XML도 표현 양식의 한 종류입니다.
이렇게 데이터를 형식에 맞춰 사용하는 이유는 데이터를 전달 주고 받을 때 서로 쉽게 이해하게 하기 위해서 입니다.

YAML은 최근 들어 많이 활용되고 있는 데이터 형식이며, 사람이 읽고 이해하기 쉬운 형태를 가지고 있습니다.
DevOps 직군에서는 다양한 설정 파일들을 YAML 형식으로 작성하는 경우가 많습니다. 이때 파일 확장자는 .yml 또는 .yaml 을 사용합니다.

YAML 문법

1. 데이터 정의

YAML은 기본적으로 데이터를 정의 할 때, key: value 형태로 데이터를 정의합니다.
이때 콜론 : 뒤에는 키와 값을 구분하기 위해 반드시 공백문자(whitespace)가 있어야 합니다.

사용가능한 데이터 타입으로는 Number, String, Boolean이 있으며, 문자열(String)에 \n , @ 등의 특수 문자가 포함된 경우에만 따옴표(" ")를 사용하여 작성합니다.
Boolean 값은 True/False 외에도 On/Off, Yes/No 로 작성할 수 있습니다.

#주석 
Fruit: Apple
Quantity: 5
Origin: Chungju

그 뿐만 아니라, YAML 파일에서 주석을 작성해야 할 때는 해당 줄의 맨 앞에 # 을 작성합니다.

2. Array / Lists

배열이나 리스트 구조의 데이터를 표현하고 싶을 때는 - 을 사용합니다. - 는 배열의 한 요소를 가리킵니다. 이때 각 요소들의 순서가 중요합니다. 따라서 1번과 2번은 각기 다른 YAML 파일입니다.
또한 -를 이용하여 Array/Lists를 표현할 수도 있지만, 같은 의미로 [ ]도 사용됩니다. [ ]가 사용된 경우, 대괄호 안의 요소가 문자열(String)이라면 " " 를 사용합니다.

3. Dictionary / Map

계층 구조를 표현하고 싶은 경우, 기본적으로 2칸 혹은 4칸의 들여쓰기를 사용합니다. 들여쓰기를 사용할 때, 각 아이템에 대해서 꼭 같은 수의 공백문자를 사용하여 들여쓰기를 해야합니다. 위의 Array/List 형식과는 다르게 요소들의 순서가 중요하지 않습니다.

#YAML

Fruits: 
	Name: Apple
	Quantity: 5
	Origin: Chungju

Vegetables:
	Name: Lettuces
	Quantity: 10
	Origin: Daekwan

위의 예시에서 Name, Quantity, Origin은 같은 수만큼의 들여쓰기를 했기 때문에 같은 계층으로 각각 Fruits와 Vegetables에 속합니다. 이와 같이 들여쓰기를 통해 어떤 계층에 속하는지 달라지기 때문에, 들여쓰기에 주의해야 합니다.

4. Advanced

위의 데이터 구조를 섞어서 사용할 수도 있습니다. 아래의 예시는 Dictionary 구조를 포함하고 있는 배열의 형태를 표현하고 있습니다. 더불어 YAML로 작성된 것을 JSON으로 작성한 것과 비교해보면, 가독성 면에서 구조화된 데이터를 쉽게 표현할 수 있는 방법이 무엇인지 알 수 있습니다.

#YAML

Fruits:
	- Banana:
			Calories: 105
			Fat: 0.4g
			Carbs: 27g

	- Grape:
			Calories: 62
			Fat: 0.3g
			Carbs: 15g
#JSON 

{
  "Fruits": [
    {
      "Banana": {
        "Calories": 105,
        "Fat": "0.4g",
        "Carbs": "27g"
      }
    },
    {
      "Grape": {
        "Caloreis": 62,
        "Fat": "0.3g",
        "Carbs": "15g"
      }
    }
  ]
}

5. Multi-lines

값으로 여러 행의 문장을 작성할 때 기본적으로는 \n 을 사용합니다. 예를 들면 다음과 같습니다.

example: "this is multiline string \n and this is nextline \n and nextline \n"

하지만 \n 을 사용하지 않고, |, >를 사용하여 줄바꿈을 할 수도 있습니다. 각각의 특징은 다음과 같습니다.

> : 이 문자는 한 줄을 모두 비웠을 때만 줄바꿈으로 인식을 하고, 그냥 줄바꿈을 할 때에는 공백문자로 인식합니다.

#YAML

example1: >
  this is multiline string 
  and this is nextline 
  and nextline

example2: >
  this is multiline string 

  and this is nextline 
  and nextline
#JSON 

{
  "example1": "this is multiline string  and this is nextline  and nextline\n"
}


{
  "example2": "this is multiline string \nand this is nextline  and nextline\n"
}

| : 이 문자는 모든 줄바꿈을 인식하며, 마지막 문장의 끝도 마찬가지로 줄바꿈으로 인식합니다.

#YAML

example1: |
  this is multiline string 
  and this is nextline 
  and nextline
#JSON 

{
  "example1": "this is multiline string \nand this is nextline \nand nextline\n"
}

Reference

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글