RunToolz iconRunToolz
Welcome to RunToolz!
YAML설정데브옵스

YAML: 어수선함 없는 설정 파일

YAML이 왜 설정 파일의 표준이 됐고 함정을 피하는 법.

RunToolz Team2026년 1월 16일4 min read

모든 Kubernetes 매니페스트. 모든 GitHub Actions 워크플로. 모든 Docker Compose 파일.

YAML이 설정에 어디든 있어. 읽기 쉽고, 유연하고, 놀라운 특성이 좀 있어.

왜 YAML?

JSON은 엄격해: 쌍따옴표, 주석 없음, 마지막 쉼표 없음.

YAML은 관대해: 최소 문법, 주석 허용, 인간 읽기 쉬워.

# YAML 설정
database:
  host: localhost
  port: 5432
  name: myapp
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "myapp"
  }
}

같은 데이터, YAML에서 소음 덜해.

직접 사용해 보시겠어요?YAML을 JSON으로 변환

기본

키-값 쌍:

name: John
age: 30

중첩 구조 (탭 아니라 공백 써):

person:
  name: John
  age: 30

리스트:

colors:
  - red
  - green
  - blue

인라인 리스트와 객체:

colors: [red, green, blue]
person: {name: John, age: 30}

Norway 문제

country: NO

NO가 뭐야? 불린 false. YAML이 NO, Yes, on, off, 다른 걸 불린으로 해석해.

노르웨이 국가 코드가 false가 돼. 설정이 신비롭게 깨져.

고치기: 불린으로 해석될 수 있는 문자열은 따옴표로.

country: "NO"

여러 줄 문자열 문제

description: This is a long
  description that continues

두 줄이야 아니면 "that continues"가 들여쓰기된 한 줄? YAML 파서에 달렸어.

명시적 여러 줄:

# 리터럴 (개행 보존)
description: |
  Line one
  Line two

# 접힌 (줄 결합)
description: >
  This is one long
  line when parsed

들여쓰기가 중요해

두 공백. 탭 아니야. 한 공백 아니야. 세 공백 아니야.

# 맞아
parent:
  child: value

# 틀려 - 탭 문자
parent:
	child: value

탭과 공백 섞으면 YAML을 조용히 깨뜨려. 에디터를 공백 쓰도록 설정해.

숫자 해석

version: 1.10

문자열 "1.10"이야 숫자 1.1? 대부분의 파서가 1.1로 해석해.

부동소수점 수학이 또 공격해. 버전 번호는 따옴표로.

version: "1.10"

앵커와 별명

YAML이 반복되는 콘텐츠를 참조할 수 있어:

defaults: &defaults
  timeout: 30
  retries: 3

production:
  <<: *defaults
  timeout: 60

중복 줄이는 데 강력해. 과도하게 하면 혼란스러워.

YAML 검증

YAML의 유연성은 많은 게 유효해 보이지만 아닌 걸 의미해.

  • 에디터에서 린터 써
  • 가능하면 스키마에 대해 검증
  • JSON으로 변환해서 파서가 실제로 뭘 해석했는지 봐

설정이 작동 안 하면 네가 쓴 게 아니라 파서가 보는 걸 확인해.

YAML vs JSON vs TOML

YAML: 인간 읽기 쉬워, 많은 기능, 특성 있는 엣지 케이스.

JSON: 엄격해, 단순해, 널리 지원돼, 장황해.

TOML: 명시적이야, 놀람 적어, 설정에 인기 얻고 있어.

머신 간 데이터는 JSON이 안전해. 인간 편집 설정은 함정을 알면 YAML이 작동해.


YAML은 엄격함보다 가독성을 우선해. 그 트레이드오프가 엣지 케이스를 만들어. 불린이나 숫자처럼 보이는 문자열은 따옴표로 하고, 명시적 여러 줄 문법 쓰고, 배포 전 검증해.