YAML 형식: 사람이 읽기 쉬운 데이터 직렬화 표준

김동준·2025년 9월 24일

LLM

목록 보기
39/50

YAML 형식: 사람이 읽기 쉬운 데이터 직렬화 표준

YAML은 "YAML Ain't Markup Language"의 재귀적 약어로, 사람이 쉽게 읽고 쓸 수 있도록 설계된 데이터 직렬화 형식입니다[1][2][3]. 원래는 "Yet Another Markup Language"였으나, 마크업 언어가 아닌 데이터 직렬화에 중점을 둔다는 의미로 현재의 이름으로 변경되었습니다[4]. 구성 파일 작성, 데이터 교환, 자동화 도구 설정 등 다양한 분야에서 XML이나 JSON의 대안으로 널리 사용되고 있습니다[5][2][6].

YAML의 핵심 특징

사람 중심의 가독성

YAML의 가장 큰 장점은 뛰어난 가독성입니다[5][6]. 들여쓰기를 사용하여 데이터의 계층 구조를 표현하므로, 개발자가 아닌 사람도 쉽게 이해할 수 있습니다[1][7]. XML의 복잡한 태그나 JSON의 중괄호와 달리, YAML은 자연스러운 구조를 제공합니다[6][8].

공백 기반 구조화

YAML은 공백과 들여쓰기를 사용하여 데이터 구조를 정의합니다[1]. 이는 Python 프로그래밍 언어와 유사한 방식으로, 탭은 허용되지 않고 오직 공백만 사용해야 합니다[4][9]. 일반적으로 2칸 또는 4칸 들여쓰기를 표준으로 사용하며, 2칸을 가장 많이 사용합니다[4].

YAML의 기본 문법

데이터 타입

YAML은 세 가지 기본 데이터 타입을 지원합니다[1][3]:

스칼라(Scalars): 문자열, 숫자, 불린값 등의 단일 값

name: John Doe
age: 30
active: true

시퀀스(Sequences): 순서가 있는 목록 또는 배열

fruits:
  - apple
  - banana
  - orange

매핑(Mappings): 키-값 쌍으로 구성된 데이터

person:
  name: John
  address:
    street: 123 Main St
    city: Seoul

고급 기능

YAML은 다양한 고급 기능을 제공합니다[3][10]. 주석# 기호로 작성할 수 있으며[1][4], 앵커(&)와 별칭(*)을 사용해 중복 데이터를 재사용할 수 있습니다[3][11]. 다중 줄 문자열은 리터럴 블록(|)과 접기된 블록(>)으로 표현 가능하며[3][4], 다중 문서 지원을 위해 ---으로 문서를 구분할 수 있습니다[10].

YAML의 주요 사용 사례

CI/CD 파이프라인

YAML은 지속적 통합/배포(CI/CD) 도구에서 널리 사용됩니다[5][2]. GitHub Actions, GitLab CI, Jenkins 등에서 빌드, 테스트, 배포 워크플로우를 정의할 때 YAML 형식을 사용합니다[12]. 예를 들어, GitHub Actions에서는 .github/workflows 디렉토리에 YAML 파일로 자동화 워크플로우를 정의합니다[12].

컨테이너 및 오케스트레이션

Docker ComposeKubernetes는 YAML을 핵심 설정 형식으로 사용합니다[2][6]. Docker Compose는 멀티 컨테이너 애플리케이션을 정의하고, Kubernetes는 Pod, Service, Deployment 등의 리소스를 YAML로 선언적으로 관리합니다[12]. 이를 통해 인프라를 코드로 관리(Infrastructure as Code)할 수 있습니다[6].

자동화 도구

Ansible은 YAML을 사용하여 Playbook을 작성하고 IT 프로세스를 자동화합니다[2]. 고급 프로그래밍 지식 없이도 YAML 템플릿을 통해 반복 작업을 자동화할 수 있어, 시스템 관리자들에게 매우 유용합니다[2].

YAML vs JSON vs XML 비교

YAML은 다른 데이터 형식들과 비교할 때 고유한 장단점을 가집니다[5][6]. 가독성 면에서 YAML이 가장 우수하며, 주석 지원다양한 데이터 타입 지원이 JSON보다 뛰어납니다[6]. 하지만 파싱 속도는 JSON이 더 빠르고, 기본 언어 지원도 JSON이 더 광범위합니다[6][13].

JSON은 웹 API와 데이터 교환에 더 적합하고, YAML은 설정 파일과 사람이 읽어야 하는 문서에 더 적합합니다[5][11]. XML은 복잡한 메타데이터와 스키마 검증이 필요한 경우에 여전히 유용합니다[8].

보안 고려사항

YAML 사용 시 보안 주의사항을 반드시 고려해야 합니다[14][15]. SnakeYAML의 CVE-2022-1471과 같은 역직렬화 취약점이 발견된 바 있으며[14][16], 신뢰할 수 없는 YAML 파일을 파싱할 때 임의 코드 실행이 가능할 수 있습니다[15][16]. Kubernetes 환경에서도 악성 YAML 파일을 통한 명령 주입 공격이 가능하므로[14][17], YAML 파일의 내용을 모니터링하고 안전한 파서를 사용해야 합니다[16].

도구 및 생태계

YAML 작업을 위한 다양한 도구들이 존재합니다[13][18]. Python에서는 PyYAML 라이브러리가 가장 널리 사용되며[11][13], yq는 YAML 파일을 쿼리하고 조작하는 강력한 CLI 도구입니다[18]. yamllint와 같은 린터 도구를 통해 문법 오류를 사전에 검출할 수 있고[19][9], 대부분의 코드 에디터에서 YAML 문법 하이라이팅과 자동 완성을 지원합니다.

베스트 프랙티스

YAML 파일 작성 시 몇 가지 베스트 프랙티스를 따라야 합니다[19][9]. 일관된 들여쓰기를 유지하고, 의미 있는 키 이름을 사용하며, 과도한 중첩을 피해야 합니다[9]. 주석을 적극 활용하여 복잡한 설정을 설명하고, 앵커와 별칭을 사용해 중복을 줄일 수 있습니다[19][9]. 또한 YAML 린터를 사용하여 배포 전에 오류를 검출하는 것이 중요합니다[19].

YAML은 현대 소프트웨어 개발과 인프라 관리에서 필수적인 형식이 되었습니다. 특히 클라우드 네이티브 환경과 DevOps 실무에서 그 중요성이 계속 증가하고 있어, 개발자와 시스템 관리자 모두에게 YAML에 대한 이해는 필수적입니다[5][2][12].

출처
[1][YAML] YAML이란? 기본 특징, 데이터 타입, 문법 - 깨작코딩 https://siloam72761.tistory.com/entry/YAML-YAML%EC%9D%B4%EB%9E%80-%EA%B8%B0%EB%B3%B8-%ED%8A%B9%EC%A7%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EB%AC%B8%EB%B2%95
[2] YAML이란? 데이터 직렬화와 구성 파일 작성을 위한 가이드 https://www.redhat.com/ko/topics/automation/what-is-yaml
[3] YAML 문법 https://velog.io/@kimjisub/YAML-%EB%AC%B8%EB%B2%95
[4][ETC] YAML 문법 정리 - 0과 1을 공부하다. https://blog.greatpark.co.kr/95
[5] YAML vs JSON: 비교 분석 https://leapcell.io/blog/ko/yaml-vs-json-bigyo-bunseok
[6] YAML과 JSON 비교 - 데이터 직렬화 형식 간의 차이 https://aws.amazon.com/ko/compare/the-difference-between-yaml-and-json/
[7] YAML(YAML Ain't Markup Language)에 대해 알아보겠습니다. https://feccle.tistory.com/304
[8] xml, json, yaml 의 특징과 사용방법 - 프로그래밍 스터디 https://hobbylife.tistory.com/entry/xml-json-yaml-%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95
[9] Best Practice Series: YAML - Sotero Saberon Jr https://blog.saberon.com.au/best-practice-series-yaml-124ac38e029c
[10] YAML: 단 몇 분 만에 이해하기 - 테디노트 https://teddylee777.github.io/python/yaml/
[11] Python에서 YAML 사용하기 - 나를 위한 꾸준한 기록 - 티스토리 https://recording-it.tistory.com/78
[12] YAML, YML - 개발새발 - 티스토리 https://kfdd6630.tistory.com/entry/YAML-YML
[13] PyYAML: YAML 파서 및 생성기 - 함께해요 파이썬 생태계 https://wikidocs.net/232067
[14] 격리 불가: 쿠버네티스의 명령 주입 취약점 발견 https://www.akamai.com/ko/blog/security-research/kubernetes-critical-vulnerability-command-injection
[15] 구글 텐서플로우, 취약점 패치 위해 YAML 지원 종료 https://www.boannews.com/media/view.asp?idx=100461&page=11&kind=1
[16] Resolving CVE-2022-1471 With SnakeYAML 2.0 - 라이프온룸 https://lifeonroom.com/study-lab/develop-tip/resolving-cve-2022-1471-with-snakeyaml-2-0/
[17] 클러스터: 쿠버네티스의 로컬 볼륨 취약점 https://www.akamai.com/ko/blog/security-research/kubernetes-local-volumes-command-injection-vulnerability-rce-system-privileges
[18] yq: YAML Parser - InterP Blog https://interp.blog/yq-yaml-parser/
[19] Best Practices for Structuring YAML in Ansible Automation https://moldstud.com/articles/p-best-practices-for-structuring-yaml-files-in-ansible-optimize-your-automation
[20] XML, JSON, YAML 각각의 특징 / 장단점 / 차이점 https://velog.io/@bcl0206/XML-JSON-YAML-%EA%B0%81%EA%B0%81%EC%9D%98-%ED%8A%B9%EC%A7%95-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%B0%A8%EC%9D%B4%EC%A0%90
[21] YAML의 거의 모든 것 | 인포그랩 - 인포그랩 https://insight.infograb.net/blog/2024/04/24/everything-for-yaml/
[22] YAML https://namu.wiki/w/YAML
[23] XML, JSON, YAML 형식 내용 정리 및 비교 분석 - 안경잡이개발자 https://ndb796.tistory.com/251
[24] YAML은 무엇인가요? 초보자 가이드 https://apidog.com/kr/blog/what-is-yaml-3/
[25] YAML 개념 & 문법 마스터 하기 https://inpa.tistory.com/entry/YAML-%F0%9F%93%9A-yaml-%EA%B0%9C%EB%85%90-%EB%AC%B8%EB%B2%95-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC
[26] 문서를 저장하는 데 뭐가 제일 좋음: json vs yaml? https://www.reddit.com/r/learnpython/comments/1c1px6z/which_is_best_for_save_a_document_json_vs_yaml/
[27] YAML이란 무엇인가요? https://www.ibm.com/kr-ko/think/topics/yaml
[28] YAML 문법 | 쿠버네티스 안내서 https://subicura.com/k8s/prepare/yaml.html
[29] 직렬화, XML, JSON, YAML - ben_DS - 티스토리 https://bentist.tistory.com/75
[30] 3 YAML tips for better pipelines https://about.gitlab.com/blog/three-yaml-tips-better-pipelines/
[31] 쿠버네티스 레이블(Labels) 완벽 가이드: 개념부터 실전 베스트 ... https://royzero.tistory.com/entry/kubernetes-labels-guide-concepts-and-best-practices
[32] 구글 텐서플로우, 취약점 패치 위해 YAML 지원 종료 https://www.oss.kr/news/show/8f5fd336-9f76-4baf-9c89-85d9b76402a9
[33] 자바스크립트 에서 yaml 파일 읽기 - Inpa Dev ‍ - 티스토리 https://inpa.tistory.com/entry/YAML-%F0%9F%93%9A-%EB%85%B8%EB%93%9C%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C-yaml-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0
[34] 왜 헬름이 베스트 프랙티스로 여겨지는 거야? : r/kubernetes https://www.reddit.com/r/kubernetes/comments/uqatek/why_is_helm_considered_best_practice/
[35][5주차] CHAPTER-21 쿠버네티스 보안 도구 - Ssoon - 티스토리 https://kschoi728.tistory.com/77
[36] Helm Best Practices - 나라의 IT 잡아먹기 - 티스토리 https://waspro.tistory.com/629
[37] 인기 오픈소스 스캐너 '누클리'에서 취약점 발견... ... https://www.cisokorea.org/news/view.html?idx=36688&gubun=News&kind=01&page=48&search=&searchstring=
[38] YAML 파싱할 때 뭐 써? : r/rust https://www.reddit.com/r/rust/comments/uygf0l/what_do_you_use_to_parse_yaml/

profile
Story Engineer

0개의 댓글