사용자 도구

사이트 도구


utils:yaml

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
utils:yaml [2018/03/05 11:54] – 만듦 taekguutils:yaml [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 =====YAML 포맷이란?===== =====YAML 포맷이란?=====
 +==== 1.YAML(YAML Ain't Markup Language) ====
 +YAML은 YAML Ain’t Markup Language의 약자입니다. 이쪽 필드에는 이렇게 재귀를 이용해서 이름을 짓는 경우가 많은 것 같습니다. 재귀를 통해 이름을 짓는걸 보면 개발자의 위트라 할 수 있긴 한데…머리속에 ‘아재 개그’란 말이 같이 떠오르는건 왜 일까요..?
  
 +==== 2.정의 ====
 +> YAML is a human friendly data serialization 
 +> standard for all programming languages.
 +
 +아래 참고 자료에 있는 YAML 1.2 스펙 문서에 있는 글입니다. 스펙 문서에 보면 JSON과 XML과의 차이, 디자인 철학등에 대해 자세한 설명이 나오는데 시간이 되시는 분들은 보시면 될 것 같습니다.
 +
 +YAML, JSON, XML 모두 사람의 가독성을 염두에 두고 설계된 포맷이지만 YAML이 좀 더 가독성에 포커싱이 많이 되어 있습니다. 이에 따라 JSON에 비해 구조가 좀 더 복잡하지만 사람이 보기엔 좀 더 자연스러운 형태입니다.
 +
 +이에 따라 YAML은 설정 파일의 목적으로 많이 쓰이는 거 같습니다. 하지만 JSON이 문법이 더 단순하기 때문에 훨씬 더 많이 사용되고 있고 YAML이 이를 뒤집기는 어려워 보입니다. 어떤 포맷이든 각자 장점이 있고 자주 사용되는 곳이 있으니 필요에 따라 그저 잘 사용하면 될 것 같습니다.
 +
 +==== 3. 용어 및 기본 구조 ====
 +YAML의 기본 자료형(primitives)입니다.
 +  * 스칼라(scalar) : 스트링 또는 숫자
 +  * 시퀀스(sequence) : 배열 또는 리스트
 +  * 맵핑(mapping) : 해시 또는 딕셔너리, 키(key)/값(value) 형태
 +  * 맵핑 시 키/값은 :를 이용해서 구분합니다. ex> key: value
 +  * 각 블록은 들여쓰기를 통해 구분
 +  * 시퀀스는 들여쓰기와 -를 통해 표현
 +  * #으로 시작하면 주석
 +  * 하나의 스트림으로 여러개의 문서를 표현할 때에는 하이픈 세개(---)로 나눕니다. 마침표 세개(...)은 스트림의 끝을 나타냅니다.
 +  * 반복되는 값은 &를 통해 alias를 설정할 수 있습니다.
 +
 +==== 4. 사용 예 ====
 +자세한 내용을 알면 좋겠지만 저는 YAML이 필요할 때 간단히 사용해보는 정도 수준으로 보려 합니다. 이정도의 목적이라면..바로 예제를 보는게 가장 좋겠죠. 아래에는 1.2 스펙 문서에 있는 내용을 그대로 옮겼습니다.
 +
 +===스칼라, 시퀀스, 맵핑 예제===
 +<code yaml>
 +# Sequence of scalars(ball player)
 +- Mark McGwire
 +- Sammy Sosa
 +- Ken Griffey
 + 
 +# Mapping of scalars to scalars(player statics)
 +hr:  65    # Home runs
 +avg: 0.278 # Batting average
 +rbi: 147   # Runs Batted In
 + 
 +# Mapping of scalars to sequences(ball clubs in each league)
 +american:
 +  - Boston Red Sox
 +  - Detroit Tigers
 +  - New York Yankees
 +national:
 +  - New York Mets
 +  - Chicago Cubs
 +  - Atlanta Braves
 + 
 +# Sequence of mappings(players' statics)
 +-
 +  name: Mark McGwire
 +  hr:   65
 +  avg:  0.278
 +-
 +  name: Sammy Sosa
 +  hr:   63
 +  avg:  0.288
 + 
 +# in-line flow style for compact notation
 +- [name        , hr, avg  ]
 +- [Mark McGwire, 65, 0.278]
 +- [Sammy Sosa  , 63, 0.288]
 + 
 +Mark McGwire: {hr: 65, avg: 0.278}
 +Mark McGwire: {hr: 65, avg: 0.278}
 +Sammy Sosa: {
 +    hr: 63,
 +    avg: 0.288
 +  }
 +</code>
 +===스트림 내 여러 문서 표현의 예===
 +==Two Documents in a Stream(each with a leading comment)==
 +<code yaml>
 +# Ranking of 1998 home runs
 +---
 +- Mark McGwire
 +- Sammy Sosa
 +- Ken Griffey
 +
 +# Team ranking
 +---
 +- Chicago Cubs
 +- St Louis Cardinals
 +</code>
 +==Play by Play Feed from a Game==
 +<code yaml>
 +---
 +time: 20:03:20
 +player: Sammy Sosa
 +action: strike (miss)
 +...
 +---
 +time: 20:03:47
 +player: Sammy Sosa
 +action: grand slam
 +...
 +</code>
 +===앵커와 별명(alias)===
 +==Node for “Sammy Sosa”appears twice in this document==
 +<code yaml>
 +---
 +hr:
 +  - Mark McGwire
 +  # Following node labeled SS
 +  - &amp;SS Sammy Sosa
 +rbi:
 +  - *SS # Subsequent occurrence
 +  - Ken Griffey
 +</code>
 +==== 5. 참고 자료 ====
 +[[http://www.yaml.org/|YAML]]
 +YAML 공식 페이지입니다.
 +
 +[[http://yaml.org/spec/1.0/|YAML 1.0 (1st Edition)]]
 +YAML 1.0의 스펙 문서입니다. YAML에 대한 전반적인 설명을 볼 수 있습니다.
 +
 +[[http://www.yaml.org/spec/1.2/spec.html|YAML 1.2 (3rd Edition)]]
 +YAML 1.2의 스펙 문서입니다.
 +
 +[[https://ko.wikipedia.org/wiki/YAML|YAML – 위키백과]]
 +YAML의 한글 위키 페이지입니다.
utils/yaml.1520250889.txt.gz · 마지막으로 수정됨: 2025/04/15 10:05 (바깥 편집)