1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
---
language: yaml
filename: learnyaml-kr.yaml
contributors:
- ["Adam Brenecki", "https://github.com/adambrenecki"]
- ["Suhas SG", "https://github.com/jargnar"]
translators:
- ["Wooseop Kim", "https://github.com/linterpreteur"]
lang: ko-kr
---
YAML은 인간이 직접 쓰고 읽을 수 있도록 설계된 데이터 직렬화 언어입니다.
YAML은 마치 파이썬처럼 개행과 들여쓰기에 문법적으로 의미를 준 JSON의 엄격한 수퍼셋입니다.
하지만 파이썬과는 달리 YAML은 탭 문자를 전혀 허용하지 않습니다.
```yaml
# YAML의 주석은 이런 식입니다.
############
# 스칼라 형 #
############
# 문서 내내 이어질 루트 객체는 맵입니다.
# 맵은 다른 언어의 딕셔너리, 해시, 혹은 객체에 해당됩니다.
키: 값
다른_키: 다른 값이 여기 옵니다.
숫자_값: 100
# 숫자 1을 값으로 가지기 위해서는 따옴표에 담아야 합니다.
# 그러지 않는다면 YAML 파서는 그것을 참 값을 가지는 불리언으로 해석할 것입니다.
과학적_표기법: 1e+12
불리언: true
널_값: null
띄어서 쓴 키: 값
# 문자열에 따옴표를 칠 필요는 없습니다. 하지만 칠 수도 있습니다.
하지만: "따옴표에 담은 문자열"
"키도 따옴표에 담을 수 있습니다.": "키에 ':'을 넣고 싶다면 유용합니다."
# 여러 줄의 문자열은 (|을 이용한) '리터럴 블락' 혹은 (>을 이용한) '접은 블락'으로
# 쓸 수 있습니다.
리터럴_블락: |
개행을 포함한 이 모든 덩어리가 '리터럴_블락' 키에 대응하는 값이 될 것입니다.
리터럴 값은 들여쓰기가 끝날 때까지 계속되며 들여쓰기는 문자열에 포함되지
않습니다.
'들여쓰기를 더 한' 줄은 나머지 들여쓰기를 유지합니다.
이 줄은 띄어쓰기 4개만큼 들여쓰기 됩니다.
접는_방식: >
이 텍스트 덩어리가 전부 '접는_방식' 키의 값이 되지만, 이번에는 모든 개행 문자가
띄어쓰기 하나로 대체됩니다.
위와 같이 텅 빈 줄은 개행 문자로 바뀝니다.
'더 들여쓴' 줄 역시 개행 문자를 유지합니다.
이 텍스트는 두 줄에 걸쳐 나타날 것입니다.
##########
# 모임 형 #
##########
# 중첩은 들여쓰기로 가능합니다.
중첩된_맵:
키: 값
다른_키: 다른 값
다른_중첩된_맵:
안녕: 안녕
# 맵은 반드시 문자열 키를 가지는 것은 아닙니다.
0.25: 실수형 키
# 키는 여러 줄에 걸친 객체와 같이 복합적일 수도 있습니다.
# ?와 그 뒤의 띄어쓰기로 복합 키의 시작을 나타냅니다.
? |
여러 줄짜리
키
: 그리고 그 값
# YAML은 복합 키 문법으로 연속열 간의 매핑을 지원합니다.
# 일부 파서는 지원하지 않을 수 있습니다.
# 예시
? - 맨체스터 유나이티드
- 레알 마드리드
: [ 2001-01-01, 2002-02-02 ]
# 리스트 혹은 배열에 대응되는 연속열은 다음과 같습니다.
연속열:
- 하나
- 둘
- 0.5 # 연속열은 다른 형을 포함 가능
- 넷
- 키: 값
다른_키: 다른_값
-
- 연속열 안의
- 또 다른 연속열
# YAML은 JSON의 수퍼셋이기 때문에, JSON식으로 맵과 연속열을 작성할 수도
# 있습니다.
제이슨_맵: {"키": "값"}
제이슨_열: [3, 2, 1, "발사"]
#################
# 기타 YAML 기능 #
#################
# YAML은 '앵커'라는 편리한 기능이 있습니다. 앵커를 이용하면 문서에서
# 손쉽게 내용을 복제할 수 있습니다. 이 키들은 같은 값을 갖습니다.
앵커된_내용: &앵커_이름 이 문자열은 두 키의 값으로 나타납니다.
다른_앵커: *앵커_이름
# 앵커는 속성을 복제하거나 상속할 수 있습니다.
기반: &기반
이름: 모두 이름이 같다
멍멍: &멍멍
<<: *기반
나이: 10
야옹: &야옹
<<: *기반
나이: 20
# 멍멍이와 야옹이는 같은 이름, '모두 이름이 같다'를 같습니다.
# 또한 YAML에는 명시적으로 형을 선언할 수 있는 태그가 있습니다.
명시적_문자열: !!str 0.5
# 파이썬의 복소수 형을 나타내는 다음 태그처럼, 일부 파서는 언어에 종속된 태그를
# 구현합니다.
파이썬_복소수: !!python/complex 1+2j
# YAML 복합 키를 언어 종속 태그와 함께 사용할 수도 있습니다.
? !!python/tuple [5, 7]
: 오십칠
# 파이썬에서의 {(5, 7): '오십칠'} 객체
###############
# 기타 YAML 형 #
###############
# Strings and numbers aren't the only scalars that YAML can understand.
# YAML이 이해할 수 있는 스칼라는 문자열과 수만 있는 것은 아닙니다.
# ISO 형식 날짜와 시간 리터럴 또한 해석됩니다.
시간: 2001-12-15T02:59:43.1Z
띄어쓰기_한_시간: 2001-12-14 21:59:43.10 -5
날짜: 2002-12-14
# !!binary 태그는 문자열이 실제로는 base64로 인코딩된
# 이진수 객체(BLOB)라는 것을 나타냅니다.
이미지_파일: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAML에는 다음과 같은 집합도 있습니다.
집합:
? 하나
? 둘
? 셋
# 파이썬과 마찬가지로 집합은 단지 널 값을 갖는 맵입니다. 위는 다음과 같습니다.
집합2:
하나: null
둘: null
셋: null
```
### 더 읽기
+ [(영어) YAML 공식 사이트](http://yaml.org/)
+ [(영어) 온라인 YAML 검사기](http://codebeautify.org/yaml-validator)
|