YAML: 두 판 사이의 차이

내위키
 
(같은 사용자의 중간 판 8개는 보이지 않습니다)
1번째 줄: 1번째 줄:
데이터를 인간이 읽기도 쉽고, 컴퓨터가 처리하기도 쉽게 만든 형식. 더 고급지게 표현하면 '인간이 읽을 수 있는 데이터 직렬화 언어'. YAML은 재귀형 약어로, YAML ain't Markup Language이다. 즉 'YAML은 마크업 언어가 아니다'라는 뜻. <del>요즘 재귀형 약어가 너무 남발되고 있다.</del>
데이터를 인간이 읽기도 쉽고, 컴퓨터가 처리하기도 쉽게 만든 형식. 더 고급지게 표현하면 '인간이 읽을 수 있는 데이터 직렬화 언어'. YAML은 재귀형 약어로, YAML ain't Markup Language이다. 즉 'YAML은 마크업 언어가 아니다'라는 뜻. <del>요즘 재귀형 약어가 너무 남발되고 있다.</del> XML 같은 덩치 크고 복잡한 마크업 언어가 아니란 뜻.


2001년에 클라크 에반스가 제안한 형식이다. 인간이 읽을 수 있는 데이터 직렬화 언어로는 [[XML]]이라는 표준이 있지만 덩치도 크고 쓸데 없이 길어서 가독성이 떨어지다 보니 [[JSON]]이나 [[XAML]] 같이 좀 더 간결한 대안들이 많이 쓰이고 있는데, YAML 역시 간결함 덕택에 여러 방면에 쓰이고 있다.
2001년에 클라크 에반스가 제안한 형식이다. 인간이 읽을 수 있는 데이터 직렬화 언어로는 [[XML]]이라는 표준이 있지만 덩치도 크고 쓸데 없이 길어서 가독성이 떨어지다 보니 [[JSON]] 같이 좀 더 간결한 대안들이 많이 쓰이고 있는데, YAML 역시 간결함 덕택에 여러 방면에 쓰이고 있다. 파일 확장자 역시 .yaml이다.
 
==목표==
 
# YAML은 사람이 쉽게 읽을 수 있다.
# YAML은 프로그래밍 언어들 사이에서 호환된다.
# YAML은 애자일 언어들의 고유 데이터 구조와 잘 맞는다.
# YAML은 제너릭 도구를 지원하기 위한 일관된 모델을 가지고 있다.
# YAML은 한 단계 만에 처리될 수 있도록 지원한다.
# YAML은 표현력과 확장성이 있다.
# YAML은 구현하고 사용하기 쉽다.


==문법==
==문법==


* 들여쓰기로 단계를 구분하지만 탭은 인정하지 않는다.
* [[유니코드]] 인코딩을 사용한다. UTF-8, UTF-16을 사용한다.
* 들여쓰기로 단계를 구분하지만 탭은 인정하지 않는다.<ref>예전에는 프로그램 코드에 탭을 많이 썼지만 환경에 따라 탭의 폭이 제각각이라 요즘은 권장하지 않는다. 요즈음 코드 편집기는 대부분 탭 키를 치면 미리 지정된 수의 공백 문자로 자동으로 바꾸어준다.</ref>
* # 기호가 앞에 오면 주석을 뜻한다.
* # 기호가 앞에 오면 주석을 뜻한다.
* 리스트의 원소는 앞에 가로줄(-)을 붙인다.
* 리스트의 원소는 앞에 가로줄(-)을 붙인다.
* 가로줄 세 개를 잇달아 쓰면 (---) 콘텐츠의 내용 분리를 뜻한다.
* 가로줄 세 개를 잇달아 쓰면 (---) 콘텐츠의 내용 분리를 뜻한다.
* 리스트를 시작하려면 먼저 리스트의 이름에 콜론(:)을 불이고 빈칸<ref>줄바꿈도 당연히 빈칸으로 인정한다.</ref>을 하나 준다. URL와 구분하기 위해서 (https://newiki.net) 반드시 빈칸이 하나 있어어 한다.
* 리스트를 시작하려면 먼저 리스트의 이름에 콜론(:)을 불이고 빈칸<ref>줄바꿈도 당연히 빈칸으로 인정한다.</ref>을 하나 준다. URL 안에 들어가는 콜론과 구분하기 위해서 (https://newiki.net) 반드시 콜론 다음에 빈칸이 하나 있어어 한다.
 
[[JSON]]에 비하면 널리 쓰이고 있지는 않지만 [[JSON]]보다 더 간결한 형식이라서 주로 설정 파일 형식으로 많이 쓰인다. [[파이썬|들여쓰기를 강제한다든가]] 하는 특징으로 사람이 읽기도 조금 낫다.
 
==다른 형식과 비교==
 
데이터의 구조와 의미를 표현하기 위한 마크업 언어로 널리 쓰이는 것으로는 [[XML]], [[JSON]]이 있다. 이중 [[XML]]은 가장 광범위한 표현이 가능하며, DTD를 통한 유효성 검증도 할 수 있다. 대신 너무 광범위한 표현력을 추구하다 보니 용량이 커지고 사람이 알아보기가 어립다. [[JSON]]은 [[XML]]보다는 훨씬 간결하여 네트워크에서 데이터를 주고받을 때 [[XML]]에 비해 용량이 줄어들며, 사람이 알아보기도 좀 더 쉽다. [[REST]]를 비롯한 많은 웹 [[API]]들은 [[JSON]] 형식을 사용하고 있으며, [[AJAX]] 역시 [[JSON]]을 사용한다.
 
YAML 역시 [[XML]]에 비해서 간결하기 때문에 용량이 적으며, 사람이 보고 구조나 의미를 파악하기에도 좋다. [[XML]]은 태그, [[JSON]]은 괄호와 따옴표를 사용해서 데이터 블록을 표현하지만 YAML은 일반 문서에서 사용하는 방식인, 들여쓰기와 블릿 기호를 사용하기 때문이다. 대신 줄이 바뀌면 블록이 바뀌기 때문에 한 줄로 데이터를 표현할 수 없다. 기계끼리 데이터를 주고받을 때에는 [[JSON]]을<ref>원래 [[JSON]]이 [[자바스크립트]]의 객체를 직렬화하기 위한 언어로 시작했고 웹 환경에서는 [[자바스크립트]]가 가장 널리 쓰이고 있으므로 자연스러운 일이기도 하다.</ref>, 사람이 만져야 하는 설정 파일에는 YAML을 많이 쓰는 추세다. <del>[[XML]]은 점점 쩌리 신세로 전락 중이다.</del>
 
같은 데이터를 각각 [[XML]], [[JSON]], YAML로 표현해 보면 다음과 같다. 단, [[XML]]은 아래 예시 말고도 표현할 수 있는 방법이 아주 다양하다.
 
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="UTF-8" ?>
<person>
  <name>John Doe</name>
  <age>42</age>
  <height>180</height>
  <job>officeworker</job>
  <hobby>hiking</hobby>
  <hobby>swimming</hobby>
  <family>
    <father>Richard Doe</father>
    <mother>Jane Doe</mother>
    <wife>Clare Doe</wife>
    <children>Mat Doe</children>
    <children>Linda Doe</children>
  </family>
</person>
</syntaxhighlight>
 
<syntaxhighlight lang="json">
{
  "name": "John Doe",
  "age": 42,
  "height": 180,
  "job": "officeworker",
  "hobby": [
    "hiking",
    "swimming"
  ],
  "family": {
    "father": "Richard Doe",
    "mother": "Jane Doe",
    "wife": "Clare Doe",
    "children": [
      "Mat Doe",
      "Linda Doe",
    ]
  }
}
</syntaxhighlight>
 
<syntaxhighlight lang="yaml">
name: John Doe
age: 42
height: 180
job: officeworker
hobby:
- hiking
- swimming
family:
  father: Richard Doe
  mother: Jane Doe
  wife: Clare Doe
  children:
  - Mat Doe
  - Linda Doe
</syntaxhighlight>
 
==바깥 고리==


[[JSON]]에 비하면 널리 쓰이고 있지는 않지만 JSON보다 더 간결한 형식이라서 주로 설정 파일 형식으로 많이 쓰인다.
* [https://yaml.org/ YAML 공식 웹사이트]. 들어가 보면 알겠지만 이 페이지조차도 YAML 형식으로 만들어 놓았다.


{{각주}}
{{각주}}

2021년 5월 16일 (일) 06:24 기준 최신판

데이터를 인간이 읽기도 쉽고, 컴퓨터가 처리하기도 쉽게 만든 형식. 더 고급지게 표현하면 '인간이 읽을 수 있는 데이터 직렬화 언어'. YAML은 재귀형 약어로, YAML ain't Markup Language이다. 즉 'YAML은 마크업 언어가 아니다'라는 뜻. 요즘 재귀형 약어가 너무 남발되고 있다. XML 같은 덩치 크고 복잡한 마크업 언어가 아니란 뜻.

2001년에 클라크 에반스가 제안한 형식이다. 인간이 읽을 수 있는 데이터 직렬화 언어로는 XML이라는 표준이 있지만 덩치도 크고 쓸데 없이 길어서 가독성이 떨어지다 보니 JSON 같이 좀 더 간결한 대안들이 많이 쓰이고 있는데, YAML 역시 간결함 덕택에 여러 방면에 쓰이고 있다. 파일 확장자 역시 .yaml이다.

목표

  1. YAML은 사람이 쉽게 읽을 수 있다.
  2. YAML은 프로그래밍 언어들 사이에서 호환된다.
  3. YAML은 애자일 언어들의 고유 데이터 구조와 잘 맞는다.
  4. YAML은 제너릭 도구를 지원하기 위한 일관된 모델을 가지고 있다.
  5. YAML은 한 단계 만에 처리될 수 있도록 지원한다.
  6. YAML은 표현력과 확장성이 있다.
  7. YAML은 구현하고 사용하기 쉽다.

문법

  • 유니코드 인코딩을 사용한다. UTF-8, UTF-16을 사용한다.
  • 들여쓰기로 단계를 구분하지만 탭은 인정하지 않는다.[1]
  • # 기호가 앞에 오면 주석을 뜻한다.
  • 리스트의 원소는 앞에 가로줄(-)을 붙인다.
  • 가로줄 세 개를 잇달아 쓰면 (---) 콘텐츠의 내용 분리를 뜻한다.
  • 리스트를 시작하려면 먼저 리스트의 이름에 콜론(:)을 불이고 빈칸[2]을 하나 준다. URL 안에 들어가는 콜론과 구분하기 위해서 (https://newiki.net) 반드시 콜론 다음에 빈칸이 하나 있어어 한다.

JSON에 비하면 널리 쓰이고 있지는 않지만 JSON보다 더 간결한 형식이라서 주로 설정 파일 형식으로 많이 쓰인다. 들여쓰기를 강제한다든가 하는 특징으로 사람이 읽기도 조금 낫다.

다른 형식과 비교

데이터의 구조와 의미를 표현하기 위한 마크업 언어로 널리 쓰이는 것으로는 XML, JSON이 있다. 이중 XML은 가장 광범위한 표현이 가능하며, DTD를 통한 유효성 검증도 할 수 있다. 대신 너무 광범위한 표현력을 추구하다 보니 용량이 커지고 사람이 알아보기가 어립다. JSONXML보다는 훨씬 간결하여 네트워크에서 데이터를 주고받을 때 XML에 비해 용량이 줄어들며, 사람이 알아보기도 좀 더 쉽다. REST를 비롯한 많은 웹 API들은 JSON 형식을 사용하고 있으며, AJAX 역시 JSON을 사용한다.

YAML 역시 XML에 비해서 간결하기 때문에 용량이 적으며, 사람이 보고 구조나 의미를 파악하기에도 좋다. XML은 태그, JSON은 괄호와 따옴표를 사용해서 데이터 블록을 표현하지만 YAML은 일반 문서에서 사용하는 방식인, 들여쓰기와 블릿 기호를 사용하기 때문이다. 대신 줄이 바뀌면 블록이 바뀌기 때문에 한 줄로 데이터를 표현할 수 없다. 기계끼리 데이터를 주고받을 때에는 JSON[3], 사람이 만져야 하는 설정 파일에는 YAML을 많이 쓰는 추세다. XML은 점점 쩌리 신세로 전락 중이다.

같은 데이터를 각각 XML, JSON, YAML로 표현해 보면 다음과 같다. 단, XML은 아래 예시 말고도 표현할 수 있는 방법이 아주 다양하다.

<?xml version="1.0" encoding="UTF-8" ?>
<person>
  <name>John Doe</name>
  <age>42</age>
  <height>180</height>
  <job>officeworker</job>
  <hobby>hiking</hobby>
  <hobby>swimming</hobby>
  <family>
    <father>Richard Doe</father>
    <mother>Jane Doe</mother>
    <wife>Clare Doe</wife>
    <children>Mat Doe</children>
    <children>Linda Doe</children>
  </family>
</person>
{
  "name": "John Doe",
  "age": 42,
  "height": 180,
  "job": "officeworker",
  "hobby": [
    "hiking",
    "swimming"
  ],
  "family": {
    "father": "Richard Doe",
    "mother": "Jane Doe",
    "wife": "Clare Doe",
    "children": [
      "Mat Doe",
      "Linda Doe",
    ]
  }
}
name: John Doe
age: 42
height: 180
job: officeworker
hobby:
- hiking
- swimming
family:
  father: Richard Doe
  mother: Jane Doe
  wife: Clare Doe
  children:
  - Mat Doe
  - Linda Doe

바깥 고리

각주

  1. 예전에는 프로그램 코드에 탭을 많이 썼지만 환경에 따라 탭의 폭이 제각각이라 요즘은 권장하지 않는다. 요즈음 코드 편집기는 대부분 탭 키를 치면 미리 지정된 수의 공백 문자로 자동으로 바꾸어준다.
  2. 줄바꿈도 당연히 빈칸으로 인정한다.
  3. 원래 JSON자바스크립트의 객체를 직렬화하기 위한 언어로 시작했고 웹 환경에서는 자바스크립트가 가장 널리 쓰이고 있으므로 자연스러운 일이기도 하다.