YAML이란 데이터 표현 양식의 한 종류입니다.
데이터는 다양한 포멧으로 표현될 수 있는데 우리가 일반적으로 사용하는 JSON이나 XML도 표현 양식의 한 종류입니다.
데이터를 포멧에 맞게 사용하는 이유는 타 시스템과 연동할때 생기는 문제를 미연에 방지하기 위해서입니다.
예를들어 데이터를 자기만의 규칙으로 "김철수-163-62kg" 이렇게 표현하면 작성한 당사자는 "이름-키-몸무게"라고 바로 이해할 수 있지만 규칙을 모르는 상태로 해당 데이터를 전달받은 누군가는 쉽게 이해할 수 없기 때문입니다.
위와같이 개인적으로 정의된 데이터를 서로 전달받을때마다 규칙을 함께 전달하기엔 너무 번거롭고, 데이터마다 규칙을 따로 관리하기에는 문서가 너무 많아질 수 있기에 사람들은 가독성이 높고 많은 사람들이 쓰는 데이터 형식으로 저장하곤 합니다.
YAML은 최근들어 많이 활용되는 데이터 포멧인데 그 이유는 인간이 보고 이해하기 쉬운 형태를 가지고 있기 때문입니다.
아래는 서버정보를 YAML 포멧으로 작성한 예시입니다.
#YAML
Servers:
- name: Server1
administrator: Kim
created: 20050103132749
status: active
- name: Server2
administrator: Lee
created: 20210101000000
status: active
YAML은 기본적으로 들여쓰기(indent)를 원칙으로하며 데이터는 Map(key-value)형식으로 작성되어야 합니다.
작성할때부터 들여쓰기를 잘 구분해서 써야하기 때문에 데이터 포멧이 망가질 염려가 없고 그에따라 가독성도 올라갈 수 있어서 최근들어 개발자들에게 많이 사용되고 있습니다.
그럼 YAML과 이전에 많이 사용되던 JSON을 한번 비교해 보겠습니다. 아래는 같은 서버정보를 JSON포멧으로 작성한 예시입니다.
#JSON
{
Servers:[
{
name: Server1,
administrator: Kim,
created: 20050103132749,
status: active
},
{
name: Server2,
administrator: Lee,
created: 20210101000000,
status: active
}
]
}
사실 JSON도 많이 사용되는 데이터 포멧이며 보기에 가독성도 나쁘지 않이 보입니다.
하지만 JSON은 YAML과 달리 문법상 줄바꿈이나 띄어쓰기를 크게 신경쓰지 않기 때문에 위와같이 읽기 편하게 작성된 JSON이 아닌경우 정말 가독성이 떨어질 수 있습니다.
#JSON
{Servers:[{name:Server1,
administrator:Kim,created: 20050103132749,
status: active},{name:Server2,administrator:Lee,
created:20210101000000,
status:active}]}
위와같이 작성해도 문법상으론 아무런 문제가 없으며 데이터가 늘어날경우 가독성은 더욱 떨어질 수 밖에 없습니다.
YAML 파일을 작성할때 주의해야할 사항은 아래와 같습니다.
YAML은 기본적으로 key-value 형태로 데이터를 정의합니다
name: Server1
administrator: Kim
created: 20050103132749
YAML은 들여쓰기로 계층 구조를 표현합니다.
들여쓰기는 기본적으로 2칸 혹은 4칸을 지원합니다.
Server:
name: Server1
administrator: Kim
created: 20050103132749
배열로 여러 데이터를 표현하고 싶을경우 -
기호를 사용해서 표현가능합니다.
#YAML
Servers:
- name: Server1
administrator: Kim
created: 20050103132749
status: active
- name: Server2
administrator: Lee
created: 20210101000000
status: active
주석은 #
기호를 사용하여 작성할 수 있습니다.
# Server Info
Server:
name: Server1
administrator: Kim
created: 20050103132749
YAML을 key-value형태로 작성할 때 반드시 사이에 띄어쓰기가 들어가야 합니다.
그렇지 않은경우 error가 발생할 수 있습니다.
#OK
name: Server1
#Error (not key-value, string)
name:Server1
그밖에 YAML 문법에 대해 좀 더 알고싶으시면 공식 홈페이지 정보를 참고하시는걸 추천드립니다.
YAML 공식 홈페이지: https://yaml.org/