YAML 소개 및 기본 문법

안녕하세요, 오늘은 ‘YAML 개요 및 기본 문법’에 대해 같이 이야기해볼까요? 제 생각에는, 이 주제가 데이터를 표현하는 방법 중 하나로서 매우 중요하다고 봅니다.

YAML 소개

YAML 소개

YAML은 “YAML Ain’t Markup Language”의 약자로, 데이터를 저장하고 전달하기 위한 데이터 직렬화 언어입니다.
이를 좀 더 쉽게 말하자면, YAML은 데이터를 텍스트 형태로 쉽게 읽고 쓸 수 있게 만드는 도구라고 할 수 있죠.
이는 JSON이나 XML과 같은 다른 데이터 직렬화 언어와 유사한 목표를 가지고 있지만, 제 생각에는 YAML이 조금 더 사람이 읽기 쉽다는 장점이 있습니다.

YAML 기본 문법

YAML의 기본 문법은 굉장히 단순하죠. 예를 들어, 아래와 같이 표현할 수 있습니다.

name: Codemates
job: Blogger

위의 예시에서 ‘name’과 ‘job’은 키(key)라고 하며, 콜론(:) 기호 뒤에 위치하는 값은 각각의 키에 해당하는 값(value)입니다.

이처럼 YAML은 키와 값의 쌍으로 데이터를 표현합니다.

YAML 리스트

YAML에서는 리스트를 표현할 때는 하이픈(-)을 사용하고, 각각의 요소는 새로운 줄에 위치하게 됩니다.

hobbies:
  - 코딩
  - 독서
  - 요리

위의 예시에서 ‘hobbies’는 키이며, 그 값은 ‘코딩’, ‘독서’, ‘요리’라는 세 개의 요소를 가진 리스트입니다.

좀 더 복잡한 데이터 구조를 표현하고 싶다면 어떻게 해야 할까요?
YAML에서는 중첩된 데이터 구조도 쉽게 표현할 수 있습니다.

이 부분에 대해서는 어떻게 생각하시나요?
아래 예시처럼 작성할 수 있습니다.

employees:
  - name: IT
    job: 필드
  - name: Codemates
    job: 블로거

여기서 ’employees’는 두 개의 딕셔너리를 요소로 가진 리스트를 값으로 가집니다.
각 딕셔너리는 ‘name’과 ‘job’이라는 두 개의 키를 가지며, 각 키에는 해당하는 값이 있습니다.

YAML 맵

YAML에서는 복잡한 데이터 구조를 표현하기 위해 맵(map) 내에 맵을 중첩할 수 있습니다. 이를 통해 키-값 쌍의 계층 구조를 표현할 수 있죠. 예를 들어, 아래와 같이 작성할 수 있습니다.

codemates:
  job: Blogger
  hobbies:
    - 코딩
    - 독서

위의 예시에서 ‘codemates’는 ‘job’과 ‘hobbies’라는 두 개의 키를 가진 맵을 값으로 가집니다. ‘hobbies’는 ‘코딩’과 ‘독서’라는 두 개의 요소를 가진 리스트를 값으로 가집니다.

또한, YAML에서는 데이터의 순서를 보장하는 순서있는 맵(ordered map)을 표현할 수 있습니다. 이를 위해 ‘!!omap’ 태그를 사용합니다.

!!omap
- name: Codemates
- job: Blogger

위의 예시에서 ‘!!omap’는 순서있는 맵을 나타내는 태그입니다. ‘name’과 ‘job’은 각각 ‘Blogger’와 ‘AI 언어 모델’이라는 값을 가진 키입니다.

YAML 다중 문서

리스트에서 값을 나누기 위해 사용한 대시(-) 기호는 다른 방식으로도 사용이 가능합니다.

그건 바로 YAML 문서 자체를 나누기 위해 대시 기호를 사용하는 것입니다.

YAML에서는 여러 개의 문서를 한 파일에 저장할 수 있습니다.
이는 ‘—‘라는 문서 구분자를 사용하여 가능하죠.
각각의 문서는 독립적인 데이터 구조를 가질 수 있습니다. 예를 들어, 아래와 같이 작성할 수 있습니다.

---
name: IT
job: 필드
---
name: Codemates
job: 블로거

위의 예시에서 두 개의 문서는 각각 ‘name’과 ‘job’이라는 키를 가지고 있으며,
각 키에는 해당하는 값이 있습니다.
여기서 ‘—‘는 두 문서를 구분하는 역할을 합니다.

YAML 주석

YAML에서는 주석을 사용하여 코드에 대한 설명을 추가할 수 있습니다.
주석은 ‘#’ 기호로 시작하며, 이 기호 뒤의 텍스트는 YAML의 내용을 분석하는 기능인 YAML 파서에 의해 무시됩니다.

# 이것은 주석입니다.
name: Codemates # 'name' 키에 대한 설명
job: Blogger # 'job' 키에 대한 설명

이처럼 주석은 코드의 이해를 돕거나, 특정 코드에 대한 추가적인 정보를 제공하는 데 유용합니다. 여러분은 주석을 어떻게 활용하고 계신가요?

YAML 변수화(앵커와 별칭)

마지막으로, YAML에서는 데이터의 재사용을 위해 앵커(&)와 별칭(*)을 사용할 수 있습니다. 앵커는 특정 데이터에 이름을 부여하고, 별칭은 이 이름을 참조하여 데이터를 재사용합니다.

anchors:
  model: &model
    name: Codemates
    job: Blogger

reuse:
  *model

위의 예시에서 ‘&model’은 앵커이며, ‘*model’은 이 앵커를 참조하는 별칭입니다. 이를 통해 YAML에서는 데이터의 중복을 피하고 코드의 가독성을 높일 수 있습니다.

YAML 다중 라인 문자열

YAML이 다른 데이터 직렬화 언어들과 비교했을 때 독특한 특징 중 하나는 다중 라인 문자열을 지원한다는 점입니다. 이는 특히 큰 덩어리의 텍스트를 다루는 데 편리합니다. 다음과 같이 작성해볼 수 있죠.

description: |
  IT Codemates는
  IT 관련 공부하고 싶은 내용을 전달하는 블로그입니다.

위의 예시에서 ‘description’ 키의 값은 여러 줄의 문자열이며, ‘|’ 기호는 이 문자열이 여러 줄에 걸쳐서 작성될 것임을 나타냅니다.

YAML 데이터 타입

YAML은 데이터 타입을 자동으로 인식합니다. 따라서 문자열, 숫자, 불리언 등의 기본 데이터 타입을 명시적으로 표시하지 않아도 됩니다. 하지만, 필요한 경우에는 데이터 타입을 명시적으로 표시할 수도 있습니다.

integer: 10
string: "10"

위의 예시에서 ‘integer’ 키의 값은 정수 10이며, ‘string’ 키의 값은 문자열 “10”입니다.

마무리

그럼, YAML을 실제로 사용하는 경우는 어떤 것들이 있을까요? YAML은 설정 파일, 데이터 교환, 언어 독립적인 데이터 직렬화 등 다양한 용도로 사용됩니다. 특히 DevOps 영역에서는 다양한 환경에서 등으로 YAML이 널리 사용되고 있습니다. 여러분들은 어떤 상황에서 YAML을 사용하고 싶으신가요?

이 글을 통해 YAML의 주요 특징과 문법에 대해 알아보았는데요, 여러분은 어떤 부분이 가장 유용하다고 생각하시나요? 그리고 YAML을 활용하면서 어려움을 겪었던 경험이 있으신가요? 여러분의 경험과 생각을 공유해주시면 좋겠습니다.

YAML은 그 자체로도 매우 유용하지만, 다른 도구나 프로그래밍 언어와 함께 사용하면 더욱 강력해집니다. 예를 들어, Python, Ruby, JavaScript 등의 언어에서는 YAML을 쉽게 읽고 쓸 수 있는 라이브러리를 제공하고 있습니다. 여러분은 어떤 언어와 함께 YAML을 사용하고 싶으신가요? 그리고 YAML을 활용하여 어떤 문제를 해결하고 싶으신가요? 여러분의 생각과 계획을 들려주시면 좋겠습니다.

이상으로 ‘YAML 개요 및 기본 문법’에 대한 내용을 마치겠습니다.
이 글이 여러분에게 도움이 되었길 바라며, 다음에 또 만나요!

참고문헌

https://www.redhat.com/en/topics/automation/what-is-yaml

https://en.wikipedia.org/wiki/YAML