YAML 이란?

2026. 1. 5. 20:28it

YAML 이란?

YAML Ain't Markup Language의 약자 YAML

  • 기존에 주로 사용되던 포맷인 JSON의 불편함을 해소하기 위해 만들어진 superset이다.
  • JSON보다 가독성 좋고, XML보다 간단해서다양한 개발 환경에서 표준처럼 사용된다.
  • YAML은 구성 파일을 작성하는 데 일반적으로 사용되며 사람이 읽을 수 있는 다목적 데이터 직렬화 언어이다.
  • YAML은 기본적으로 단순성과 가독성을 염두에 두고 설계되어, 
    개발자와 사용자는 복잡한 데이터 구조를 자연어와 유사하고 한눈에 이해하기 쉬운 형식으로 표현할 수 있다.

 

YAML Ain't Markup Language : YAML

  • 직역하면, " YAML은 마크업 언어가 아니다 " 이라고 한다.
  • 즉, XML이나 HTML처럼 <tag> 같은 마크업 태그를 쓰는 언어가 아니고,
    사람이 읽기 쉽고 구조화하기 좋은 데이터 직렬화 언어라는 의미.
  • 이 언어가 문서가 아닌 데이터를 위한 언어라는 점을 강조하는 의미.
  • 이름이 YAML Ain't Markup Language 인 이유는 
    'PHP: Hypertext Preprocessor'의 PHP나 'Linux Is Not UniX'의 Linux처럼 
    개발자들이 흔히 농담으로 사용하는 재귀약자를 사용해 지어졌다고 한다.
    처음에는 Yet Another Markup Language였으나
    마크업을 강조하는 이름 대신 Yaml Ain't Markup Language로 바뀌었다.

 

기존 JSON의 단점

  • 주석을 지원하지 않는다. 이 때문에 설정 파일로 사용하기 어렵다.
  • 문법이 유연하지 않다. 
    • 모든 문자열에 따옴표가 강제.
    • 모든 프로퍼티마다 쉼표(,)로 구분.
    • 중괄호를 모두 닫아야 한다.
    • 문자열 안에서 이스케이프 문자를 처리하기가 복잡하다.
  • 타입을 명시할 방법이 없다.

JSON 코드 예시

{
  "server": {
    "port": 8080,
    "debug": true
  }
}

 

YAML 코드 예시

server:
  port: 8080
  debug: true
  
#	YAML 주석
#	{}, ,, " 가 없음
#	들여쓰기으로 구조 표현
#	설정 파일에서 가독성 차이가 매우 큼

 

문법

주석

  • YAML은 주석을 기본 지원한다.
server:
  port: 8080    # 서버 포트
  debug: true   # 디버그 모드

들여쓰기 (객체)

  • 들여쓰기(indent)로만 데이터의 구조(계층 관계)를 표현한다.
  • 스페이스만을 사용하여 들여쓰기한다.
  • 중첩 가능하다.
server:
  port: 8080
  debug: true

Key : Value

  • "" 없이 Key 와 Value를 표현
  • 자료형을 자동으로 인식 가능
  • 기본 자료형 외에도 list, map, date, datetime, Base64, set...등이 있음.
port: 8080        # int
debug: true       # boolean
price: 12.5       # float
empty: null       # null
str1: hello       # string
str2: "123"       # string
bool1: true       # boolean

배열 (리스트)

  • - 로 배열을 표현 가능
servers:
  - api.example.com
  - auth.example.com

 

응용하여 아래처럼 객체 배열로도 표현 가능.

users:
  - name: kim
    role: admin
  - name: lee
    role: user

Anchor(&)와 Alias(*)

  • Anchor(&)는 변수와 같은 역할.
  • Alias(*)로 가져다 사용한다.
  • <<: 는 merge key. 이 객체에 다른 객체의 내용을 펼쳐서 병합하라는 의미.
    실제 결과에는 <<는 남지 않는다. 파싱 시점에 합쳐짐.
default: &default
  timeout: 5000
  retry: 3
  logLevel: info

api1:
  <<: *default
  timeout: 3000

api2:
  <<: *default
  logLevel: debug

해석

  • defaultConfig라는 기본 설정 묶음을 만들고 (&default)
  • api1, api2에서 그 설정을 그대로 가져다 쓴다 (*default)
  • 덮어쓰기 가능. (ap1에는 timeout이 3000, api2에는 timeout이 5000 할당)

이외에도 많은 문법이 있다..

 

기타

  • .yaml과 .yml 둘 다 사용 가능한 확장자이다. (공식적으로는 .yaml 사용을 권장하고 있다.)

 

장점

  • 구성 파일에 사용 : YAML은 구조화되고 읽기 쉬운 형식이기 때문에 구성 파일에 적합하다.
    그래서 여러 프레임워크에서 설정 파일로 사용되고 있다.
  • 간소화 : 구문이 자연어 구조와 유사하여 개발자와 비전문가 사용자 모두 쉽게 이해할 수 있어 이해도를 높이고 오류를 줄일 수 있습니다.
  • 호환성 : YAML은 플랫폼 독립적인 특성으로 여러 시스템과 프로그래밍 언어 간의 호환성을 보장.
  • JSON의 완전한 상위 호환이기 때문에 기존 JSON 문서를 그대로 YAML 파일로 사용할 수 있다.
    반대로 YAML을 JSON으로 변환할 수도 있다.

 

단점

  • 데이터 직렬화가 불편하다. 그래서 데이터 전송, api 등에서는 거의 쓰이지 않는다.
  • 문법이 복잡하다. 워낙 문법이 복잡한 것에 비해 자주 쓰이지 않는 부분이 많다. 
  • 객체와 배열의 문법이 비슷하고, 시작과 끝을 알기가 헷갈린다.

 

언제 YAML을 사용하면 즣은가?

  • 설정 파일
  • 사람이 자주 수정해야 하는 파일
  • 주석이 필요한 경우
  • 중복 구조가 많은 경우

 

언제 JSON을 사용하면 좋은가?

  • 데이터 교환 포맷
  • API 통신

 

참고

 

'it' 카테고리의 다른 글

Chrome 브라우저에서 User-agent 변경하기  (1) 2025.11.17
SVG에 대해서 3  (3) 2025.08.25
SVG에 대해서 2  (5) 2025.08.10
SVG에 대해서 1  (5) 2025.07.29
robots.txt에 대하여  (0) 2025.07.13