[YAML] YAML 문법 총 정리!

[YAML] YAML 문법 총 정리!


YAML

YAML

  • 시스템 간에 데이터를 주고 받을 필요가 있을 때, 데이터의 연동과 호환성을 위한 포맷에 대한 규칙
  • 기존에는 웹에서는 XML과 JSON으로 그리고 자바 프로젝트에서는 properties 파일을 이용하여 어떤 값들을 정의하고 저장하고 사용해 옴
    • XML은 사용하기 매우 까다롭고 가독성도 좋지 않음 (극혐)
    • JSON은 주석을 달 수 없는 등 약간의 제한이 있고 쓸데없는 중괄호와 대괄호의 남발로 코드 길이가 강제적으로 길어지게 된다는 단점이 있음 (얘는 좀 마음에 듦)
  • YAML은 고급 컴퓨터 언어에 친화적
  • 주로 Doker Compose, Kubernetes, Flutter, Spring boot 프로젝트에서 설정파일을 정의할 때 사용됨

YAML 문법 정리

데이터 정의

Key: Value

  • 콜론을 기준으로 구분
  • 콜론 뒤에는 띄어쓰기 한 번 해야함
name: 배승원
age: 25
major: 컴퓨터

Indent

  • 들여쓰기를 통해 계층 구조를 표현
  • 객체를 표현할 때 이러한 계층 구조를 활용
person:
  name: 배승원
  age: 25
  major: 컴퓨터

따옴표

  • 큰 따옴표, 작은 따옴표를 쓰거나 아예 쓰지 않아도 자동으로 문자열로 인식됨
  • 만약 콜론이 포함된 문자열일 경우 무조건 따옴표료 둘러싸야 인식됨
name: 배승원
age: 25
major: "컴퓨터"
ratio1: "1:2"
ratio2: '1:2'
ratio3: 1:2  # 제대로 인식되지 않음
  • 작은 따옴표와 큰 따옴표의 차이점
    • 큰 따옴표는 Escape Sequence를 처리
    • 작은 따옴표는 처리하지 않음
string1: "\t tab \n NL"  # 이스케이프 처리
string2: '\t tab \n NL'

배열 & 리스트

단순 배열

  • 하이픈(-)으로 시작하는 하위 엘리먼트를 표현
  • 하이픈 뒤에 띄어쓰기를 해야 리스트로 인식됨
  • 하이픈 대신 대괄호로도 표현 가능
ingrediens:
  - 
  - 튀김가루
  - 소스

ingredients: [, 튀김가루, 소스]

객체 배열

  • 단순한 값 리스트의 나열이 아닌 복잡한 구조체의 리스트를 표현하고자 할 때 하이픈과 Key: Value 구조를 이용해 표현
  • 하나의 객체 쌍인 것을 표현하기 위해 하나의 객체 원소면 하이픈을 쓰지 않고 나열
  • 하이픈 뒤에 Key: Value 구조가 온다면 이것은 객체를 포함한 배열, 그냥 데이터가 바로 온다면 단순 원소 배열이라고 인식
students:
  - name: Mark
    major: Math
    age: 20
  - name: Julie
    major: Arts
    age: 23
  - name: Tommy
    major: Music
    age: 25

Boolean

  • 데이터 부분에 yes, no, true, false를 지정하면 Boolean 값으로 인식됨
  • 대소문자를 가리지 않음
booleans:
  - yes
  - Yes
  - YES
  - true
  - True
  - FALSE
  - "YES"

주석

  • 샵(#)으로 주석을 표기
# students
name: John
major: Math

Text Multi Line

  • 개행이 있는 문자열을 표현할 때는 > 문자나 | 문자를 사용

Folded Block Scalar

  • 기호는 개행 문자를 화이트 스페이스로 치환

  • 빈 줄 하나가 단독으로 있는 경우만 줄바꿈으로 치환
  • 맨 마지막은 자동으로 개행 처리를 해주지만, > 기호 옆에 - 기호를 붙이면 맨 끝의 줄바꿈 문자를 포함시키지 않음
# 중간에 개행 문자가 있음
# 끝에도 개행 문자가 있음
paragraph1: >
  abc
  def
  ghi

  aab
  ccc
# 맨끝의 줄바꿈 문자를 포함시키지 않음
paragraph2: >-
  abc
  def
  ghi

  aab
  ccc

Literal Block Scalar

  • | 기호는 개행 문자 그대로 줄을 바꿔줌
  • | 기호 옆에 -를 붙여주면 맨 끝의 개행 문자를 포함시키지 않음

YAML

# 그대로 줄바꿈 + 맨 끝 개행 문자 포함
paragraph3: |
  abc
  def
  ghi

  aab
  ccc

# 그대로 줄바꿈 + 맨 끝 개행 문자 제외
paragraph4: |-
  abc
  def
  ghi

  aab
  ccc

Alias

  • 재사용하는 값 또는 구조체가 있을 경우 변수와 비슷한 태그 기능을 사용할 수 있음
  • & 기호로 변수를 선언하고 * 기호로 변수를 참조할 수 있음
# default_school 라는 변수를 선언
# 내용은 group 과 description 데이터를 지니고 있음
default: &default_school
   group: '아주대학교'
   description: |
      수원에 있는 대한민국의 사립 대학교

student:
   - name: '배승원'
     <<: *default_school # default_school 변수 내용물을 대입
   - name: '홍길동'
     <<: *default_school # default_school 변수 내용물을 대입
© 2024 Seungwon Bae 🇰🇷