본문 바로가기

개발

YAML 문법 기초: YAML 파일 작성 가이드

반응형

YAML(YAML Ain't Markup Language)은 사람이 쉽게 읽을 수 있는 데이터 직렬화 형식입니다. 설정 파일, 구성 파일, 데이터 교환 등 다양한 분야에서 널리 사용되며, 특히 Docker, Kubernetes, Ansible 등 인프라 자동화 도구에서 핵심적인 역할을 합니다.

JSON과 유사한 역할을 하지만, 더 간결하고 직관적인 문법 덕분에 많은 개발자들에게 사랑받고 있습니다. 이 글에서는 YAML의 기본 문법을 초보자도 쉽게 이해할 수 있도록 정리해 드리겠습니다.


1. YAML의 기본 원칙

YAML의 문법은 몇 가지 핵심 원칙에 기반합니다.

  • 들여쓰기(Indentation): YAML은 들여쓰기로 계층 구조를 표현합니다. 반드시 스페이스(Space)를 사용해야 하며, 탭(Tab)은 사용할 수 없습니다. 들여쓰기의 깊이는 2칸 또는 4칸을 주로 사용하지만, 일관성만 유지하면 됩니다.
  • 주석(Comment): # 기호를 사용하여 주석을 작성할 수 있습니다.
  • 대소문자 구분: 키(Key)는 대소문자를 구분합니다.
  • 파일 확장자: .yaml 또는 .yml을 사용합니다.

2. YAML의 기본 데이터 타입

YAML은 크게 세 가지 기본 데이터 타입을 사용합니다.

2.1. 스칼라 (Scalars)

단일 값을 나타내는 가장 기본적인 데이터 타입입니다. 문자열, 숫자, 불리언(boolean) 등이 있습니다.

  • 문자열 (String)
    • 따옴표('', "") 없이 작성할 수 있습니다.
    • 여러 줄의 문자열은 | (리터럴 블록) 또는 > (접힌 블록)을 사용합니다.
    • |는 줄 바꿈(New Line)을 그대로 유지합니다.
    • >는 줄 바꿈을 공백으로 변환하여 한 줄로 만듭니다.
# 따옴표 없이 작성
name: 김개발

# 따옴표를 사용하면 특수 문자를 포함할 수 있습니다.
message: "Hello, World!"

# 여러 줄 문자열 (줄 바꿈 유지)
bio: |
  안녕하세요.
  저는 백엔드 개발자입니다.

# 여러 줄 문자열 (한 줄로 합침)
description: >
  YAML은 사람이 읽기 쉬운
  데이터 직렬화 형식입니다.
  • 숫자 (Number)
    • 정수, 실수, 16진수 등을 따옴표 없이 작성합니다.
age: 30
price: 99.99
hex_value: 0x2A
  • 불리언 (Boolean)
    • 참(true, True, TRUE) 또는 거짓(false, False, FALSE)을 표현합니다.
is_enabled: true
is_admin: False
  • 널(Null)
    • 값 없음은 null 또는 ~로 표현합니다.
optional_value: null
no_value: ~

2.2. 리스트 (Lists)

순서가 있는 데이터의 집합입니다. - (하이픈) 뒤에 공백 한 칸을 두고 값을 작성합니다.

# 리스트 예시
fruits:
  - apple
  - banana
  - orange

# 중첩된 리스트도 가능합니다.
hobbies:
  - coding
  - reading
  - sports:
      - soccer
      - basketball

2.3. 맵 (Maps)

키(Key)와 값(Value)의 쌍으로 이루어진 데이터 구조입니다. 키: 값 형태로 작성하며, 콜론 뒤에는 반드시 공백 한 칸을 두어야 합니다.

# 맵 예시
user:
  name: 김개발
  email: dev.kim@example.com
  age: 30

# 리스트와 맵의 조합
project:
  name: My Awesome Project
  version: 1.0
  features:
    - user_login
    - data_analysis
    - real_time_updates

3. YAML 심화 문법

3.1. 앵커(Anchors)와 별칭(Aliases)

반복되는 데이터를 간결하게 표현할 때 사용합니다.

  • & (앰퍼샌드)로 앵커를 정의합니다.
  • * (별표)로 앵커의 별칭을 참조합니다.
  • <<: (병합)으로 맵을 병합할 수 있습니다.
# 앵커를 사용한 예시
default_db_config: &db_config
  host: localhost
  port: 5432
  user: admin
  password: password123

production_db:
  <<: *db_config # default_db_config의 모든 키-값을 상속
  database: prod_db

test_db:
  <<: *db_config
  database: test_db
  password: test_password # 별칭의 값을 덮어쓰기

3.2. 인라인 표기법 (Inline Notation)

YAML은 한 줄로 리스트나 맵을 표현하는 인라인 표기법도 지원합니다. 이는 JSON과 유사하여 간단한 데이터에 유용합니다.

# 인라인 리스트
fruits: [apple, banana, orange]

# 인라인 맵
user: {name: "김개발", age: 30}

3.3. 문서 분리자 (Document Separator)

하나의 YAML 파일에 여러 개의 문서를 포함시킬 때 --- (하이픈 3개)를 사용하여 문서를 분리할 수 있습니다.

# 첫 번째 문서
#---
apiVersion: v1
kind: Service
metadata:
  name: my-service

---
# 두 번째 문서
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment

4. YAML 작성 시 주의사항

  • 들여쓰기 일관성: 가장 중요한 규칙입니다. 스페이스의 개수를 항상 일정하게 유지해야 합니다.
  • 콜론 뒤 공백: key: value에서 콜론 뒤에 공백이 없으면 파싱 에러가 발생합니다.
  • 따옴표 사용: on, off, yes, no, true, false, null 등 특정 값은 YAML 파서에 의해 불리언이나 널(null)로 인식될 수 있으므로, 문자열로 사용하고 싶다면 따옴표("", '')로 감싸주어야 합니다.
    • ports: 80 (숫자로 인식)
    • name: 'yes' (문자열로 인식)
  • 특수 문자: !, &, *, %, @ 등 YAML에서 특별한 의미를 갖는 문자를 포함한 문자열은 따옴표로 감싸는 것이 안전합니다.

YAML은 깔끔하고 가독성이 높아 협업 시에도 유리한 형식입니다. 이 기본 문법 가이드를 통해 YAML 파일 작성에 자신감을 갖고, 다양한 도구의 설정 파일을 효과적으로 관리해 보시길 바랍니다.

반응형