초보자를 위한 YAML 소개

데이터 직렬화와 YAML의 이해

API 개발자라면 JSON이 익숙하겠지만, YAML도 한 번쯤은 접해보셨을 겁니다. YAML은 자체적인 문법을 가진 강력한 도구이며, 개발자의 필수 지식 중 하나입니다. 지금부터 YAML의 기본적인 개념을 살펴보겠습니다.

데이터 직렬화란 무엇일까요?

컴퓨터 네트워크를 통해 데이터 구조나 객체를 전송할 때, 데이터를 저장하거나 읽기 쉬운 특정 형식으로 변환해야 합니다. 이 과정을 ‘직렬화’라고 하며, 웹 환경에서 매우 중요한 역할을 합니다. 예를 들어, 데이터베이스에서 읽어온 데이터를 웹을 통해 전송할 때 직렬화가 필수적으로 사용됩니다.

직렬화 형식에는 JSON, YAML, XML 등이 있습니다. 이 글에서는 YAML에 집중하여 YAML의 기본 원리를 알아보고, 실제 사용 방법을 소개하겠습니다.

YAML이 왜 중요할까요?

YAML은 ‘YAML Ain’t Markup Language’의 약자로, 마크업 언어가 아닌 데이터 직렬화 형식입니다. YAML의 가장 큰 장점은 가독성과 작성 용이성입니다. 사람이 읽기 쉬운 설정 파일이 필요할 때 YAML은 최고의 선택입니다. 물론 JSON과 XML도 각각의 장점이 있지만, YAML을 학습하는 것은 개발자에게 매우 유익합니다.

YAML은 다양한 데이터 유형(사례, 배열, 사전, 리스트, 스칼라 등)을 지원하며, JavaScript, Python, Ruby, Java와 같은 주요 프로그래밍 언어와 호환됩니다. YAML은 공백을 중요하게 여기며, 탭은 허용되지 않습니다. YAML 파일은 일반적으로 .yaml 확장자를 사용합니다.

YAML의 기본 구문

YAML 파일은 ---로 시작하며, 이는 파일의 시작을 나타냅니다.

API 개발 시에는 YAML에서 ‘매핑’이라는 기능을 주로 사용하게 됩니다. 매핑은 키와 값의 쌍으로 구성됩니다. 다음은 YAML 매핑의 예입니다.

---
name: James
boy: yes
GPA: 3.41
  

매핑 구문은 key: value 형식입니다. JSON이나 XML과 달리 YAML에서는 공백이 매우 중요합니다. YAML은 문자, 문자열, 정수, 부동 소수점 값과 같은 다양한 데이터 유형과 배열, 리스트 등의 컬렉션을 지원합니다.

YAML의 다양한 데이터 유형

다음은 YAML에서 사용되는 다양한 데이터 유형의 예시입니다.

---
MALE: FALSE
GPA: 3.61
ISSUES: NULL
NAME: "BIGYAN"
AGE: 16
  

위 예시에서 볼 수 있듯이, YAML은 참 또는 거짓 값을 가지는 Boolean, 부동 소수점, null 값, 그리고 큰따옴표 또는 작은따옴표로 묶인 문자열을 지원합니다. 또한, YAML은 가독성을 높이기 위해 여러 줄 문자열을 지원합니다.

여러 줄 및 한 줄 문자열

---
About: >
  Hello this is Ryan
  From Alabama and I like to
  Play soccer.
  

> 기호를 사용하면 여러 줄에 걸쳐 한 줄의 문자열을 표현할 수 있습니다. 반면 | 기호를 사용하면 각 줄이 그대로 출력되는 여러 줄 문자열을 만들 수 있습니다.

About: |
  This is a multiline string
  And will be printed line wise.
  

리스트

YAML에서 리스트는 매우 중요한 개념입니다. 다음은 간단한 리스트의 예입니다.

---
- apple
- banana
- mango
  

스칼라 값을 리스트에 매핑하는 방법은 다음과 같습니다.

---
Fruits:
  Apples
  Banana
  Guava
  

중첩된 리스트를 사용하여 복잡한 구조를 표현할 수도 있습니다.

Automobiles:
  Car:
    Hyundai
    Volkswagen
    Ford
  

다양한 레벨의 중첩을 통해 더 복잡한 데이터 구조를 만들 수 있습니다.

Subjects:
  Engineering:
    Mechanical engineering:
      Design and manufacture
      Automobile
      Control and Design
    Civil engineering:
      Structural engineering
      Hydropower
  Arts:
    Medieval
    Modern
    Painting
  

YAML은 또한 &* 기호를 사용하여 앵커를 만들고, 참조를 통해 코드 중복을 줄일 수 있습니다. 이는 Ruby on Rails와 같은 프레임워크의 설정 파일에서 매우 유용합니다.

details: &details
    name: "John"
    age: 18
  
profession: engineer
<< : * details
  

위 코드는 다음과 같은 결과와 동일합니다.

profession: engineer
name: "John"
age: 18
  

Python에서 YAML 사용하기

Python은 ruamelpyyaml과 같은 라이브러리를 통해 YAML을 지원합니다. 먼저 pyyaml을 설치합니다.

pip install pyyaml
  

실습을 위해 details.yaml 파일을 다음과 같이 만듭니다.

name: "john"
age:18
gender: male
  

feed.yaml 파일도 다음과 같이 만듭니다.

sports:
  football
  basketball
  cricket
  baseball
---
countries:
  Brazil
  Lithuania
  Australia
  USA
  

이제 Python 코드를 사용하여 YAML 파일을 읽어보겠습니다.

import yaml
with open('details.yaml') as f:
  data = yaml.load(f, Loader=yaml.FullLoader)
  print(data)
  

details.py 파일을 실행하면 다음과 같은 결과가 출력됩니다.

{'name': "john", 'age': 18, 'gender': male}
  

다음은 feed.yaml 파일을 읽는 코드입니다.

import yaml
with open(r'feed.yaml') as file:
  fruits_list = yaml.load(file, Loader=yaml.FullLoader)
  print(fruits_list)
  

Python에서 YAML 파일에 쓰기

Python을 사용하여 YAML 파일에 데이터를 쓰는 예시입니다.

import yaml
dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]
with open(r'E:data.yaml', 'w') as file: #create a new yaml file 
  data = yaml.dump(dict_file, file)
  

Node.js에서 YAML 사용하기

Node.js는 서버 측 처리 언어이며, 데이터 직렬화는 개발 과정에서 필수적입니다. 다음 예시를 위해 example.yaml 파일을 만듭니다.

name:John
age:18
Hobbies:
  Hobby1:Football
  Hobby2:BasketBall
  Hobby3:Hockey
Job:
-System administrator
-Programmer
  

Node.js에서 YAML을 사용하려면 js-yaml 라이브러리를 설치해야 합니다.

npm install js-yaml
  

다음은 js-yaml 모듈을 사용하는 예시 코드입니다.

const yaml = require('js-yaml'); //initialize js-yaml
const fs   = require('fs'); //initialize filestream
try {
  const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
  console.log(result);
} catch (e) {
  console.log(e); //catch exception
}
  

결론

YAML은 현대 프로그래밍 프레임워크와 애플리케이션에서 설정 파일로 널리 사용되고 있습니다. XML과 비슷한 통신 기능을 제공하지만, XML보다 간결한 구문을 가지고 있습니다. YAML 파일을 만들 때는 데이터를 직접 작성하거나, 복잡한 계층 구조의 경우 전용 YAML 이터레이터를 사용하는 것이 좋습니다. 또한, 정규식을 사용하면 기본적인 YAML 파일을 쉽게 파싱할 수 있습니다.