YAML
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
YAML은 2001년 클라크 에반스 등에 의해 제안된 데이터 직렬화 형식이다. 초기에는 "Yet Another Markup Language"의 약자로 불렸으나, 이후 데이터 지향적인 목적을 강조하기 위해 "YAML Ain't Markup Language"로 변경되었다. YAML은 가독성이 좋고, 다양한 프로그래밍 언어에서 사용할 수 있으며, JSON과 유사한 구조를 가지고 있다. YAML은 JSON에 비해 주석, 확장 가능한 데이터 유형, 관계형 앵커 등 다양한 기능을 제공하지만, JSON보다 직렬화 및 역직렬화 속도가 느리다. YAML은 유의미한 공백 사용, 안전하지 않은 기본값 등으로 비판을 받기도 하며, StrictYAML 및 NestedText와 같은 대안이 존재한다.
더 읽어볼만한 페이지
- 데이터 직렬화 포맷 - XML
XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다. - 데이터 직렬화 포맷 - S-표현식
S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다. - 마크업 언어 - HTML
HTML은 웹 페이지 제작을 위한 표준 마크업 언어로서, 팀 버너스리가 제안하고 구현한 후 인터넷 발전과 함께 널리 사용되며, SGML에 기반하여 하이퍼텍스트 기능으로 다양한 콘텐츠를 표현하고 연결하며, W3C와 WHATWG에서 표준화를 진행하고 최신 버전은 HTML Living Standard이다. - 마크업 언어 - XAML
XAML은 마이크로소프트에서 개발한 XML 기반의 마크업 언어로, 사용자 인터페이스, 데이터 바인딩, 이벤트 처리 등을 정의하며 WPF, Silverlight, WF, WinRT API 앱, Xamarin.Forms 등에서 UI 개발에 널리 사용된다.
YAML - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
종류 | 데이터 교환 |
개발 | (정보 없음) |
발표일 | 2001년 5월 11일 |
최신 버전 | 1.2 (리비전 1.2.2) |
최신 버전 발표일 | 2021년 10월 1일 |
웹사이트 | YAML 공식 웹사이트 |
파일 확장자 | .yaml, .yml |
기술 정보 | |
유형 코드 | (정보 없음) |
균일 유형 식별자 | public.yaml |
따름 | (정보 없음) |
매직 넘버 | (정보 없음) |
컨테이너 형식 | (정보 없음) |
확장 형식 | (정보 없음) |
확장 대상 형식 | (정보 없음) |
표준 | (정보 없음) |
개방형 | 예 |
기타 | |
마임 유형 | application/yaml |
2. 역사 및 명칭
YAML(YAML영어, "camel"과 유사하게 발음)[4]은 2001년 클라크 에반스가 처음 제안했으며,[15] 잉기 돗 넷[16] 및 오렌 벤키키와 함께 설계했다.[16] 원래 YAML은 HTML, XML, SGML 등 프레젠테이션 및 연결을 위한 마크업 언어가 급증하던 시대에 출시되었기 때문에 ''Yet Another Markup Language''(또 다른 마크업 언어)를 의미한다고 언급되었다.[17] 초기 이름은 yet another 구문을 사용하여 마크업 언어로서의 목적을 나타내는 익살스러운 언급[18]이었지만, 이후 문서 마크업이 아닌 데이터 지향적인 목적을 강조하기 위해 ''YAML Ain't Markup Language''(YAML은 마크업 언어가 아니다)라는 재귀 약어로 용도가 변경되었다.
YAML은 텍스트 파일이기 때문에 가독성이 좋다. 그 개념은 XML, C, Python, Perl과 같은 프로그래밍 언어에서 유래되었다. YAML의 원안은 클라크 에반스[47], 브라이언 잉거슨[48], 오렌 벤키크[49]가 공동으로 제시했다.
YAML은 텍스트 파일이기 때문에 가독성이 좋다. 그 개념은 XML, C, Python, Perl과 같은 프로그래밍 언어에서 유래되었다. YAML의 원안은 클라크 에반스[47], 브라이언 잉거슨[48], 오렌 벤키크[49]가 공동으로 제시했다.
YAML은 재귀 약어이며, 그 어원은 "YAML Ain't a Markup Language."이다. 초기에는 "Yet Another Markup Language"라고 불렸지만, 마크업보다 데이터 중심을 목적으로 했기 때문에 나중에 붙여진 이름이다. 그러나 XML(진정한 마크업 언어)이 직렬화 목적으로 빈번하게 사용되기 때문에 YAML을 경량 마크업 언어로 간주할 수도 있다. 유사한 규격으로는 JSON이 있다.
3. 버전
버전 출시일 YAML 1.0 2004년 1월 29일 YAML 1.1 2005년 1월 18일 YAML 1.2.0 2009년 7월 21일 YAML 1.2.1 2009년 10월 1일 YAML 1.2.2 2021년 10월 1일
4. 디자인
YAML은 재귀 약어이며, 그 어원은 "YAML Ain't a Markup Language."이다. 초기에는 "Yet Another Markup Language"라고 불렸지만, 마크업보다 데이터 중시를 목적으로 했기 때문에 나중에 붙여진 이름이다. 그러나 XML(진정한 마크업 언어)이 직렬화 목적으로 빈번하게 사용되기 때문에 YAML을 경량 마크업 언어로 간주할 수도 있다. 유사한 규격으로는 JSON이 있다.
YAML은 들여쓰기를 사용하여 계층 구조를 표현한다. 단, 들여쓰기에는 탭을 사용할 수 없고 스페이스만 사용할 수 있다. YAML 트리는 ''sequence''(시퀀스), ''mapping''(맵핑), ''scalar''(스칼라)의 세 가지 기본 노드로 구성된다.[50]
4. 1. 문법
YAML은 리스트, 해시, 스칼라 데이터의 조합으로 데이터를 표현하며, 가독성이 좋고 이해하기 쉬운 문법을 가지고 있다. 고급 컴퓨터 언어에 적합하며, 들여쓰기 및 XML의 특수 기호를 사용한다.
YAML은 제어 문자를 제외한 전체 유니코드 문자 집합을 허용하며, UTF-8, UTF-16, UTF-32로 인코딩될 수 있다.[20]
들여쓰기를 사용하여 계층 구조를 표현한다. 단, 들여쓰기에는 탭을 사용할 수 없고 스페이스만 사용할 수 있다.
```yaml
[우유, 빵, 계란]
```
```yaml
name: John Smith
age: 33
{name: John Smith, age: 33}
4. 2. 기본 구성 요소
YAML은 리스트, 해시, 스칼라 데이터의 조합으로 모든 데이터를 표현할 수 있다는 철학을 바탕으로 만들어졌다. 문법은 이해하기 쉽고 가독성이 좋도록 설계되었으며, 고급 컴퓨터 언어에 적합하다. 또한, 들여쓰기와 XML 특수 기호를 사용하여 XML과 유사한 면이 있다.
YAML의 기본 구성 요소는 다음과 같다.
예시:
```yaml
```
```yaml
[우유, 호박 파이, 달걀, 주스]
```
예시:
```yaml
이름: 존 스미스
나이: 33
{이름: 존 스미스, 나이: 33}
```
예시:
```yaml
데이터: |
옛날 옛적에 이링에서 온 키 큰 남자가 있었는데
다질링으로 가는 버스를 탔네
문에는 이렇게 적혀 있었지
"바닥에 앉지 마세요"
그래서 그는 조심스럽게 천장에 앉았네
```
```yaml
데이터: >
줄 바꿈된 텍스트는
하나의
단락으로 접힐 것입니다
빈 줄은
단락 나누기를 나타냅니다.
```
YAML은 ''sequence''(시퀀스), ''mapping''(맵핑), ''scalar''(스칼라)의 세 가지 기본 노드로 구성된다.[50]
4. 3. 고급 구성 요소
YAML은 모든 데이터를 리스트, 해시, 스칼라 데이터의 조합으로 표현할 수 있다는 생각으로 만들어졌다. 문법은 이해하기 쉽고 가독성이 좋도록 디자인되었으며, 고급 컴퓨터 언어에 적합하다. 또한 들여쓰기 및 XML의 특수기호를 사용하기 때문에, XML과 거의 비슷하다.
YAML은 공백과 스칼라 값을 가지고 있는 리스트 구분자를 위해 쉼표와 콜론이 필요하다. 미래의 표준화를 위해 YAML에서는 @, 악센트 기호 ‘ 2개의 기호 문자를 예약해 두고 있다. YAML을 다른 데이터 직렬화 언어의 기능과 구별하는 두 가지 특징은 구조[24]와 데이터 형식 지정이다.
YAML 구조를 사용하면 단일 파일 내에 여러 문서를 저장하고, 반복 노드에 대한 참조를 사용하며, 임의의 노드를 키로 사용할 수 있다.[24]
명확성, 간결성 및 데이터 입력 오류 방지를 위해 YAML은 노드 앵커(& 사용) 및 참조(* 사용)를 제공한다. 앵커에 대한 참조는 모든 데이터 형식에 적용된다(아래 예제에서 ship-to 참조 참조).
다음은 두 단계가 완전히 설명되지 않은 상태에서 참조되는 계측기 시퀀서의 큐의 예이다.
```yaml
instrument: Lasik 2000
pulseEnergy: 5.4
pulseDuration: 12
repetition: 1000
spotSize: 1mm
instrument: Lasik 2000
pulseEnergy: 5.0
pulseDuration: 10
repetition: 500
spotSize: 2mm
```
YAML이 단순 형식을 자동으로 감지하기 때문에 대부분의 YAML 문서에서는 명시적 데이터 형식 지정을 거의 볼 수 없다. 데이터 형식은 핵심, 정의, 사용자 정의의 세 가지 범주로 나눌 수 있다. 핵심은 모든 파서에 존재할 것으로 예상되는 형식이다(예: 부동 소수점, 정수, 문자열, 목록, 맵 등). 바이너리 데이터와 같은 더 많은 고급 데이터 형식은 YAML 사양에 정의되어 있지만 모든 구현에서 지원되는 것은 아니다. 마지막으로 YAML은 사용자 정의 클래스, 구조 또는 기본형(예: 4배 정밀 부동 소수점)을 수용하기 위해 로컬에서 데이터 형식 정의를 확장하는 방법을 정의한다.
YAML은 엔티티의 데이터 형식을 자동으로 감지하지만, 때로는 데이터 형식을 명시적으로 지정하려는 경우가 있다. 가장 일반적인 상황은 숫자, 부울 또는 태그처럼 보이는 단일 단어 문자열을 따옴표로 묶거나 명시적 데이터 형식 태그를 사용하여 모호성을 제거해야 하는 경우이다.
```yaml
a: 123 # 정수
b: "123" # 문자열, 따옴표로 구분
c: 123.0 # 부동 소수점
d: !!float 123 # (!!) 접두사가 붙은 명시적 데이터 형식을 통해 부동 소수점
e: !!str 123 # 문자열, 명시적 형식으로 구분
f: !!str Yes # 명시적 형식을 통한 문자열
g: Yes # 부울 True (yaml1.1), 문자열 "Yes" (yaml1.2)
h: Yes we have No bananas # 문자열, 컨텍스트별로 "Yes" 및 "No" 구분
```
YAML의 모든 구현이 모든 사양 정의 데이터 형식을 갖는 것은 아니다. 이러한 내장 형식은 이중 느낌표 시길 접두사(!!)를 사용한다. 여기에 표시되지 않은 특히 흥미로운 것들은 집합, 정렬된 맵, 타임스탬프 및 16진수이다. 다음은 base64로 인코딩된 바이너리 데이터의 예이다.
```yaml
picture: !!binary |
R0lGODdhDQAIAIAAAAAAANn
Z2SwAAAAADQAIAAACF4SDGQ
ar3xxbJ9p0qa7R0YxwzaFME
1IAADs=
```
YAML의 많은 구현은 객체 직렬화를 위해 사용자 정의 데이터 형식을 지원할 수 있다. 로컬 데이터 형식은 보편적인 데이터 형식이 아니라 YAML 파서 라이브러리를 사용하여 애플리케이션에서 정의된다. 로컬 데이터 형식은 단일 느낌표(!)를 사용한다.
```yaml
워릭의 젊은 친구가 있었는데
그는 행복감을 느낄 이유가 있었다네
선거를 통해 그는
삼위일체 발기를 할 수 있었으니
이오니아식, 코린트식, 그리고 도리아식으로
```
```yaml
줄 바꿈된 텍스트
는 하나의
단락으로
병합됩니다.
빈 줄은
단락 나누기를 나타냅니다.
5. 예제
yaml
- --
receipt: Oz-Ware 구매 송장
date: 2012-08-06
customer:
first_name: Dorothy
family_name: Gale
items:
- part_no: A4786
descrip: 물통 (채워짐)
price: 1.47
quantity: 4
- part_no: E1628
descrip: 하이힐 "루비" 구두
size: 8
price: 133.7
quantity: 1
bill-to: &id001
street: |
123 토네이도 앨리
Suite 16
city: East Centerville
state: KS
ship-to: *id001
specialDelivery: >
노란 벽돌 길을 따라
에메랄드 시티로 가세요.
커튼 뒤에 있는
사람에게는 신경 쓰지 마세요.
...
```
문자열은 따옴표로 묶을 필요가 없다. 들여쓰기의 정확한 공백 수는 평행 요소가 동일한 왼쪽 정렬을 갖고 계층적으로 중첩된 요소가 더 들여쓰기되어 있는 한 중요하지 않다. 이 샘플 문서는 7개의 최상위 키가 있는 연관 배열을 정의한다. 키 중 하나인 "items"는 2개의 요소 목록을 포함하며, 각 요소는 서로 다른 키를 가진 연관 배열 자체이다. 관계형 데이터 및 중복 제거가 표시된다. "ship-to" 연관 배열 내용은 앵커(`&`) 및 참조(`*`) 레이블로 표시된 대로 "bill-to" 연관 배열 내용에서 복사된다. 가독성을 위해 선택적으로 빈 줄을 추가할 수 있다. 여러 문서는 단일 파일/스트림에 존재할 수 있으며 `---`로 구분된다. 선택적 `...`는 파일 끝에서 사용할 수 있다(파이프를 닫지 않고 스트리밍 통신에서 종료를 신호하는 데 유용).
5. 1. 리스트
YAML에서 리스트(목록)는 여러 항목을 순서대로 나열하는 데 사용된다. 리스트를 작성하는 방법은 두 가지가 있다.- 블록 형식: 전통적인 블록 형식에서는 하이픈과 공백(`- `)을 사용하여 목록의 새 항목을 시작한다.
- -- # 좋아하는 영화
- 카사블랑카
- 북북서로 진로를 돌려라
- 보이지 않는 남자
- -- # 쇼핑 목록
[우유, 호박 파이, 달걀, 주스]
블록 형식과 인라인 형식은 함께 사용될 수 있다. 다음은 그 예시이다.
- -- # 좋아하는 영화, 블록 형식
- 카사블랑카
- 스펠바운드
- 노터리어스
- -- # 쇼핑 목록, 인라인 형식, 또는 플로우 형식
[우유, 빵, 계란]
객체와 목록은 YAML의 중요한 구성 요소이며, 함께 사용될 수 있다. 예를 들어, 다음은 스미스 가족 구성원 각각을 키-값 객체로 나타낸 목록이다.
- -- # 스미스 가족
- {이름: 존 스미스, 나이: 33}
- 이름: 메리 스미스
나이: 27
- [이름, 나이]: [레 스미스, 4] # 키로서의 시퀀스가 지원됨
다음 예시는 성별로 사람들을 나열한 것으로, 두 개의 목록(남성, 여성)을 포함하는 키-값 객체이다.
- -- # 성별별 사람들
남성: [존 스미스, 빌 존스]
여성:
- 메리 스미스
- 수잔 윌리엄스
5. 2. 해시
yaml# 블록
name: John Smith
age: 33
- -- # 인라인
{name: John Smith, age: 33}
```
주어진 출력물은 YAML 코드 예시를 보여주고 있으며, 위키텍스트 문법과는 관련이 적습니다. 따라서, 원본 소스 코드 자체를 그대로 유지하는 것이 가장 적절합니다. `
5. 3. 블록 리터럴
|는 여러 줄의 문자열을 표현할 때 사용하며, 줄 바꿈을 유지한다.[11] 다음은 그 예시이다.- -- |
There was a young fellow of Warwick
Who had reason for feeling euphoric
For he could, by election
Have triune erection
Ionic, Corinthian, and Doric
>는 여러 줄의 문자열을 하나의 단락으로 묶을 때 사용하며, 줄 바꿈은 공백으로 처리된다. 빈 줄은 단락을 구분하는 역할을 한다. 다음은 그 예시이다.
- -- >
Wrapped text
will be folded
into a single
paragraph
Blank lines denote
paragraph breaks
5. 4. 해시의 리스트, 리스트의 해시
YAML에서 해시(Hash)는 키-값 쌍의 집합을 의미하며, 리스트(List)는 순서가 있는 항목들의 나열입니다. 이 둘은 YAML에서 복잡한 자료 구조를 표현하는 데 사용됩니다.다음은 해시의 리스트 예시입니다.
```yaml
- {name: John Smith, age: 33}
- name: Mary Smith
age: 27
```
이 예시는 두 개의 해시를 포함하는 리스트를 보여줍니다. 첫 번째 해시는 `name` 키에 `John Smith`, `age` 키에 `33` 값을 가집니다. 두 번째 해시는 `name` 키에 `Mary Smith`, `age` 키에 `27` 값을 가집니다.
다음은 리스트의 해시 예시입니다.
```yaml
men: [존 스미스, 빌 존스]
women:
- 메리 스미스
- 수잔 윌리엄스
```
이 예시는 `men`과 `women`이라는 두 개의 키를 가진 해시를 보여줍니다. `men` 키의 값은 `John Smith`와 `Bill Jones`를 포함하는 리스트입니다. `women` 키의 값은 `Mary Smith`와 `Susan Williams`를 포함하는 리스트입니다.
YAML은 중첩된 자료 구조를 표현할 수 있습니다. 즉, 해시의 리스트와 리스트의 해시를 조합하여 더 복잡한 자료 구조를 만들 수 있습니다.[23] 예를 들어, 스미스 가족 구성원 정보는 다음과 같이 표현할 수 있습니다.
```yaml
- {이름: 존 스미스, 나이: 33}
- 이름: 메리 스미스
나이: 27
```
성별에 따른 사람들의 목록은 다음과 같이 표현합니다.
```yaml
남성: [존 스미스, 빌 존스]
여성:
- 메리 스미스
- 수잔 윌리엄스
6. 구현
다음은 YAML을 사용할 수 있는 프로그래밍 언어 목록이다.
프로그래밍 언어 |
---|
자바스크립트 |
오브젝티브-C |
펄 |
PHP |
파이썬 |
루비 (YAML을 사실상의 직렬화 형식으로 이용하며, 버전 1.8 이후로부터 표준 라이브러리에 포함됨) |
자바 |
하스켈 |
XML |
러스트 |
ActionScript |
C/C++ |
C#/.NET |
Cocoa |
Dart |
Go (Golang) |
Haskell |
Java |
JavaScript |
Lua |
Nim |
OCaml |
Perl |
PHP (PECL 모듈 및 Symfony의 YAML 컴포넌트가 있음) |
Python |
Ruby (Ruby 1.8부터 표준 라이브러리에 포함) |
Rust |
Tcl |
Vim |
고정된 데이터 구조의 경우, YAML 파일은 데이터와 YAML 관련 형식을 모두 출력하는 `print` 명령어를 사용하여 간단하게 생성할 수 있다. 하지만, 가변적이거나 복잡한 계층적 데이터를 덤프하려면, 전용 YAML "이미터(emitter)"가 더 좋다. 마찬가지로, 단순한 YAML 파일(예: 키-값 쌍)은 정규 표현식으로 쉽게 파싱할 수 있다. 더 복잡하거나 가변적인 데이터 구조의 경우, 공식적인 YAML "파서(parser)"를 사용하는 것이 좋다.
YAML 이미터와 파서는 많은 인기 있는 프로그래밍 언어에서 사용할 수 있다. 대부분은 해당 언어 자체로 작성되었다. 일부는 C 라이브러리 `libyaml`의 언어 바인딩이며, 더 빠르게 실행될 수 있다. 과거에는 why the lucky stiff가 작성하고 관리하지 않게 된 `Syck`이라는 다른 C 라이브러리가 있었으나, 현재 유지보수가 이루어지지 않고 있으며, 공식 소스 번들이 없고, 웹 사이트가 해킹되었다. 따라서 권장할 수 있는 유일한 C 라이브러리는 `libyaml`이며, 이 라이브러리는 원래 Kirill Simonov가 개발했다. 2018년에 Ian Cordasco와 Ingy döt Net의 새로운 관리자에 의해 개발이 재개되었다.[39]
C++ 프로그래머는 C 라이브러리 `libyaml`과 C++ 라이브러리 `libyaml-cpp` 중에서 선택할 수 있다. 둘 다 완전히 독립적인 코드 기반과 완전히 다른 API를 가지고 있다. `libyaml-cpp` 라이브러리는 여전히 0의 주 버전 번호를 가지고 있어, API가 언제든지 변경될 수 있음을 나타낸다. 실제로 버전 0.3 이후에 변경이 있었다. 중첩된 요소에 대한 확장을 목표로 C#으로 작성된 문법 중심의 구현이 존재한다.[40]
Perl의 YAML.pm과 같은 일부 YAML 구현은 전체 파일(스트림)을 로드하고 "일괄" 파싱한다. PyYaml과 같은 다른 구현은 느긋하며, 요청 시 다음 문서를 반복한다. 문서를 독립적으로 처리할 계획이 있는 매우 큰 파일의 경우, 처리 전에 전체 파일을 인스턴스화하는 것이 부담스러울 수 있다. 따라서 YAML.pm에서는 가끔 파일을 문서로 분할하고 개별적으로 파싱해야 한다. YAML은 이 작업을 쉽게 만드는데, 줄 시작 부분에 세 개의 점이 있고 그 뒤에 공백(및 주석)이 오는 문서 종료 마커를 기준으로 분할하기만 하면 되기 때문이다. 이 마커는 내용에서는 금지된다.[41]
7. 다른 직렬화 형식과의 비교
YAML은 XML, C 언어, Python, Perl 등 여러 프로그래밍 언어의 개념을 차용했다. YAML의 원안은 클라크 에반스[47], 브라이언 잉거슨[48], 오렌 벤키크[49]가 공동으로 제시했다.
YAML은 "YAML Ain't a Markup Language."(YAML은 마크업 언어가 아니다)의 재귀 약어이다. 초기에는 "Yet Another Markup Language"(또 다른 마크업 언어)라고 불렸지만, 데이터 중심의 목적을 강조하기 위해 나중에 변경되었다. YAML은 텍스트 파일이므로 가독성이 좋다. YAML과 유사한 규격으로 JSON이 있다.
7. 1. JSON과의 비교
JSON 구문은 YAML 1.2 버전의 기반이며, YAML을 "공식적인 하위 집합으로서 JSON과 일치시키려는" 명시적인 목적으로 공표되었다.[4] 이전 버전의 YAML은 엄격하게 호환되지 않았지만,[34] 불일치는 거의 눈에 띄지 않았고, 대부분의 JSON 문서는 Syck과 같은 일부 YAML 파서에 의해 구문 분석될 수 있다.[35] 이는 JSON의 의미 구조가 YAML의 선택적인 "인라인 스타일"의 작성 방식과 동일하기 때문이다. 확장된 계층 구조는 JSON과 같이 인라인 스타일로 작성할 수 있지만, 이는 명확성을 높이는 경우를 제외하고는 권장되는 YAML 스타일이 아니다.YAML은 JSON에 없는 주석, 확장 가능한 데이터 유형, 관계형 앵커, 따옴표 없는 문자열 및 키 순서를 유지하는 매핑 유형을 포함하여 많은 추가 기능을 가지고 있다.
간결성 때문에 JSON 직렬화 및 역직렬화는 YAML보다 훨씬 빠르다.[36][37]
7. 2. TOML과의 비교
TOML은 .ini 파일 형식의 발전을 위해 설계되었다. YAML은 지시 문자 사용을 최소화하여, TOML의 엄격한 따옴표 및 대괄호 요구 사항과 비교하여 유리하다는 평가를 받는다.[38] YAML의 들여쓰기 사용은 TOML의 키 및 테이블 이름에 대한 점 표기법과 대조되어 동일한 의미 구조를 전달한다. 어떤 방식이 더 읽기 쉬운 구성 파일을 만드는지에 대한 의견은 다르다.7. 3. XML과의 비교
YAML은 XML에서 발견되는 태그 속성의 개념이 부족하다. 대신 YAML은 확장 가능한 형식 선언(객체에 대한 클래스 형식을 포함)을 가지고 있다.[47][48][49]YAML 자체는 문서의 자체 유효성 검사를 허용하는 XML의 언어 정의 문서 스키마 설명자를 가지고 있지 않다. 그러나 YAML에 대해 외부적으로 정의된 스키마 설명자 언어(예: Doctrine, Kwalify, Rx)가 해당 역할을 수행한다. 또한 YAML 문서 자체의 YAML 언어 정의 형식 선언에서 제공하는 의미론은 간단하고 일반적인 상황에서 유효성 검사기의 필요성을 완화하는 경우가 많다. 또한, XML에서 YAML 데이터 구조를 나타내는 YAXML을 사용하면 XSLT와 같은 XML 스키마 가져오기 및 출력 메커니즘을 YAML에 적용할 수 있다.[47][48][49]
8. 비판
YAML은 순수하게 데이터 표현 언어이며 실행 가능한 명령어가 없다. 유효성 검사와 안전한 파싱은 모든 데이터 언어에서 본질적으로 가능하지만, 구현은 매우 악명 높은 함정이기 때문에 YAML에 관련된 명령 언어가 없다는 것은 상대적인 보안상의 이점이 될 수 있다.
그러나 YAML은 언어별 태그를 허용하여 해당 태그를 지원하는 파서가 임의의 로컬 객체를 생성할 수 있도록 한다. 정교한 객체 인스턴스화를 실행할 수 있는 YAML 파서는 주입 공격의 가능성을 열어둔다. 임의의 클래스 객체를 로드할 수 있는 Perl 파서는 소위 "축복받은" 값을 생성한다. 이러한 값을 사용하면 예상치 못한 동작이 발생할 수 있으며, 예를 들어 클래스가 오버로드된 연산자를 사용하는 경우 임의의 Perl 코드를 실행할 수 있다.[27]
상황은 Python 또는 Ruby 파서에서도 비슷하다. PyYAML 문서에 따르면 다음과 같다.[28]
> 신뢰할 수 없는 소스(예: 인터넷)에서 YAML 문서를 수신하는 경우 임의의 Python 객체를 구성하는 기능이 위험할 수 있습니다. 함수 `yaml.safe_load`는 이 기능을 정수 또는 목록과 같은 단순한 Python 객체로 제한합니다. [...]
>
> PyYAML을 사용하면 모든 유형의 Python 객체를 구성할 수 있습니다. `!!python/object` 태그를 사용하여 Python 클래스의 인스턴스도 구성할 수 있습니다.
참조
[1]
간행물
YAML Media Type
https://datatracker.[...]
Internet Engineering Task Force
2024-02-21
[2]
웹사이트
yaml
https://developer.ap[...]
Apple Inc
2023-05-22
[3]
웹사이트
Yet Another Markup Language (YAML) 1.0 / Working Draft
https://yaml.org/spe[...]
2001-12-10
[4]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.2
https://yaml.org/spe[...]
2019-05-29
[5]
웹사이트
Built-in Types — Python 3.9.6 documentation
https://docs.python.[...]
2021-08-19
[6]
웹사이트
Standard built-in objects - JavaScript {{!}} MDN
https://developer.mo[...]
2021-08-19
[7]
웹사이트
Built-in types (C++)
https://docs.microso[...]
2021-08-17
[8]
웹사이트
The Official YAML Web Site
https://yaml.org/
2019-02-05
[9]
웹사이트
Setting up Vim for YAML editing
https://www.arthurko[...]
2021-12-20
[10]
웹사이트
Yaml Mode
https://www.emacswik[...]
EmacsWiki
2015-06-12
[11]
웹사이트
Pretty YAML - Packages - Package Control
https://packagecontr[...]
Packagecontrol.io
2016-12-05
[12]
웹사이트
"yaml | Eclipse Plugins, Bundles and Products - Eclipse Marketplace"
https://marketplace.[...]
Marketplace.eclipse.org
2016-12-05
[13]
웹사이트
NetBeans IDE - Ruby and Ruby on Rails Development
https://netbeans.org[...]
Netbeans.org
2016-12-05
[14]
웹사이트
YAML Ain't Markup Language
https://yaml.org/faq[...]
2006-09-24
[15]
웹사이트
YAML Draft 0.1
https://groups.yahoo[...]
Yahoo! Tech groups: sml-dev
2019-03-21
[16]
웹사이트
YAML Ain't Markup Language: About
https://yaml.org/abo[...]
2019-05-29
[17]
웹사이트
Yet Another Markup Language (YAML) 1.0
https://yaml.org/spe[...]
2019-05-29
[18]
웹사이트
Yet Another Markup Language (YAML) 1.0
https://stackoverflo[...]
2021-03-24
[19]
웹사이트
YAML{{nbsp}}1.1 Reference Card
https://yaml.org/ref[...]
2019-05-29
[20]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.2
https://yaml.org/spe[...]
2019-05-29
[21]
웹사이트
YAML specification v1.2.2 Section 6.1. Indentation Spaces
https://yaml.org/spe[...]
2023-03-12
[22]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.2
https://yaml.org/spe[...]
2019-05-29
[23]
웹사이트
Cloud Based Management apps
http://www.jigocloud[...]
2016-09-28
[24]
웹사이트
YAML 1.2 specification of Structures
https://yaml.org/spe[...]
2019-05-29
[25]
웹사이트
Extensible Markup Language (XML) 1.0 (Second Edition)
http://www.w3.org/TR[...]
2015-05-27
[26]
웹사이트
Free Courses {{!}} Introduction to YAML - A hands -on course
https://insidelearn.[...]
2022-08-04
[27]
웹사이트
YAML
http://m.kuliah-dari[...]
2022-08-04
[28]
웹사이트
PyYAML Documentation, Loading YAML
http://pyyaml.org/wi[...]
2016-09-28
[29]
웹사이트
Ain't Markup Language (YAML) Version 1.1
https://yaml.org/spe[...]
2019-05-29
[30]
웹사이트
Language-Independent Types for YAML Version 1.1
https://yaml.org/typ[...]
2019-05-29
[31]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.1
https://yaml.org/spe[...]
2019-05-29
[32]
웹사이트
Ain't Markup Language (YAML) Version 1.1
https://yaml.org/spe[...]
2019-05-29
[33]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.1
https://yaml.org/spe[...]
2019-05-29
[34]
Webarchive
https://metacpan.org[...]
2013-08-29
[35]
Webarchive
http://www.jigocloud[...]
2016-09-17
[36]
웹사이트
YAML vs JSON vs XML in Go
https://medium.com/g[...]
2024-01-31
[37]
웹사이트
Differences Between YAML and JSON
https://www.baeldung[...]
2023-03-07
[38]
웹사이트
My problem with YAML's use of whitespace
https://utcc.utoront[...]
2023-10-06
[39]
메일
yaml-core@lists.sourceforge.net, mail of June 27, 2018.
[40]
웹사이트
YAML Grammar for Lexepars
https://github.com/D[...]
2020-02-20
[41]
웹사이트
YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers
https://yaml.org/spe[...]
2019-05-29
[42]
웹사이트
YAML: probably not so great after all
https://arp242.net/y[...]
2019-05-16
[43]
웹사이트
That's a lot of YAML
https://noyaml.com/
2019-05-16
[44]
웹사이트
YAML sucks
https://github.com/c[...]
2019-05-16
[45]
웹사이트
The Norway Problem - why StrictYAML refuses to do implicit typing and so should you
https://hitchdev.com[...]
2020-06-03
[46]
웹사이트
YAML Test Matrix
https://matrix.yaml.[...]
2020-04-03
[47]
문서
Clark Evans
[48]
문서
Brian Ingerson
[49]
문서
Oren Ben-Kik
[50]
인용구
[51]
인용구
관련 사건 타임라인
( 최근 20개의 뉴스만 표기 됩니다. )
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com