그래서, 아마 여러분은 기술 분야에서 "YAML"이라는 용어를 들어보셨을 겁니다. 하지만 YAML이 정확히 무엇인지 궁금하시죠? 여러분이 이해하기 쉽게 설명해드리겠습니다.
YAML 소개
"YAML Ain't Markup Language"의 약자로, YAML은 사람 읽기에 쉬운 데이터 직렬화 언어입니다. 쉽게 말해, 데이터를 구조적이고 읽기 쉬운 형식으로 표현하는 방법입니다.
이제 여러분은 "잠깐, 그게 JSON 이나 XML와 비슷하지 않나요?"라고 생각할 수 있습니다. 맞는 생각입니다. 그러나 YAML은 사용자 친화적으로 만들어주는 몇 가지 요령이 있습니다. JSON은 중괄호와 쉼표로 조금 복잡해질 수 있지만, YAML은 들여쓰기와 공백을 사용하여 구조를 표시합니다. 그리고 XML은 엉킨 꺾쇠 브래킷처럼 느껴질 수 있지만, YAML은 깔끔하고 간결하며 눈에 잘 띕니다.
YAML이 중요한 이유
그렇다면 왜 YAML에 주목해야 할까요? 우선, 매우 다재다능하다는 점입니다. YAML은 Kubernetes와 Ansible과 같은 소프트웨어의 구성 파일에서부터 API의 데이터 교환 형식까지 다양한 응용 프로그램에서 사용됩니다.
API에 대해 말하자면, YAML은 API 개발에서 중요한 역할을 합니다. API 요청과 응답의 구조를 정의하는 데 자주 사용되어 개발자들이 협업하고 애플리케이션의 여러 부분에서 일관성을 유지하는 데 용이합니다.
하지만 YAML의 유용성은 여기서 그치지 않습니다. YAML은 코드로서의 인프라(IaC)를 정의하고 배포 프로세스를 자동화하는 데에도 많이 사용됩니다. Terraform과 Ansible과 같은 도구들은 그들의 구성 파일을 위해 YAML에 크게 의존하여 운영팀이 워크플로를 간소화하고 다양한 환경에서 일관성을 유지할 수 있도록 합니다.
YAML 사용해보기
자, 이제 YAML이 왜 그렇게 중요한지 이해했으니, 구문에 대해 조금 살펴보겠습니다. 걱정하지 마세요; 생각보다 훨씬 간단합니다.
YAML 파일은 일반적으로 .yml
또는 .yaml
확장자를 가지고 있으며, 들여쓰기와 공백으로 구조화됩니다. 다음은 기본 예시입니다:
# 이것은 주석입니다
person:
name: Alice
age: 30
hobbies:
- reading
- hiking
- coding
읽기 얼마나 쉬운지 보셨나요? person
키에는 name
, age
, hobbies
라는 세 개의 자식 키가 있습니다. hobbies
키는 -
기호로 표시된 값의 목록을 포함합니다.
YAML의 가장 멋진 점 중 하나는 문자열, 숫자, 불리언, 심지어 null 값과 같은 다양한 데이터 유형을 기본적으로 지원한다는 것입니다. 원하는 만큼 데이터 구조를 중첩할 수 있어 복잡한 데이터 계층 구조를 표현하기가 수월합니다.
YAML의 실제 사용 사례
이제 기본 개념을 익혔으니, YAML이 어떻게 사용되는지 몇 가지 실제 예를 살펴보겠습니다.
먼저, 인기 있는 컨테이너 오케스트레이션 플랫폼인 Kubernetes를 고려해봅시다. Kubernetes는 배포, 서비스 및 수신 규칙과 같은 것들을 정의하는 구성 파일에 대해 YAML에 크게 의존합니다. 다음은 Kubernetes 배포 매니페스트의 간단한 예입니다:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
이 YAML 파일은 my-app
라는 컨테이너의 세 개의 복제본으로 구성된 배포를 정의하며, 사용할 이미지를 지정하고 노출할 포트를 설정합니다.
다음은 API 개발에서 YAML이 어떻게 사용되는지 살펴보겠습니다. OpenAPI(구 Swagger)는 RESTful API를 설명하는 데 널리 사용되는 명세로, API의 구조를 정의하기 위해 YAML(또는 JSON)을 사용합니다. 다음은 간소화된 예입니다:
openapi: 3.0.0
info:
title: 샘플 API
version: 1.0.0
paths:
/users:
get:
summary: 모든 사용자 목록
responses:
'200':
description: 성공적인 응답
이 YAML 스니펫은 단일 엔드포인트(/users
)와 사용자의 목록을 반환하는 GET
작업이 포함된 기본 OpenAPI 명세를 정의합니다.
YAML의 API
YAML 파일 형식은 API와 관련하여 여러 가지 이유로 특히 중요합니다:
사람 읽기 쉬움: YAML의 설계는 사람 읽기를 우선으로 하여 API 구조를 정의하는 구성 파일을 작성하는 데 훌륭한 선택이 됩니다. 이 가독성 덕분에 개발자들은 API 명세를 쉽게 이해하고 수정할 수 있습니다.
계층 및 관계: YAML은 자연스레 계층적 데이터를 표현하며, 이는 API 엔드포인트와 그 관련 작업, 매개변수 및 응답의 중첩 구조와 잘 맞아떨어집니다.
다양한 언어 지원: YAML은 특정 언어(Ruby와 같은)와 밀접하게 연결되어 있지만, 언어 독립적이며 YAML 라이브러리가 있는 모든 프로그래밍 언어에서 사용할 수 있으므로 API 정의에 유용합니다.
JSON과의 호환성: YAML은 JSON의 슈퍼셋이므로, 모든 JSON 파일은 유효한 YAML 파일이기도 합니다. 이 호환성은 두 형식 간의 매끄러운 전환을 가능하게 하며, JSON은 API 페이로드에 일반적으로 사용되는 형식이므로 유용합니다.
OpenAPI 명세: YAML은 RESTful API를 설명하는 데 널리 채택되는 표준인 OpenAPI 명세(OAS)와 자주 함께 사용됩니다. YAML로 작성된 OAS 문서는 엔드포인트, 매개변수 및 인증 방법을 포함하여 전체 API를 명확하고 간결하게 설명하는 방법을 제공합니다.
툴 지원: 많은 API 개발 도구가 YAML 파일의 가져오기를 지원합니다. 이 지원은 설계 및 문서화에서 테스트 및 배포까지 API 생애 주기의 다양한 단계를 용이하게 합니다.
본질적으로 YAML 형식은 API의 청사진 역할을 하며, API가 따르는 규칙과 구조를 정의합니다. API 개발 과정에서 중요한 역할을 하여 개발자들이 명확하고 유지 관리가 용이하며 확장 가능한 API 정의를 생성할 수 있게 합니다.
Apidog은 YAML을 지원합니다
Apidog는 API 설계 및 디버깅을 지원하는 도구입니다. 개발자들이 API를 빠르게 생성하고 API 관련 정보를 정의하며 요청 및 응답 매개변수를 처리할 수 있도록 합니다.
구성 및 데이터 표현을 위해 YAML을 사용하면 API 개발 및 테스트를 위한 강력한 환경을 만듭니다. YAML은 개발 및 테스트 환경을 구성하고 테스트 데이터를 정의하며 다양한 설정을 관리하는 데 도움을 줍니다.

API 작업을 수행하고 있다면, Apidog은 요청을 보내기 위한 시각적 인터페이스를 제공하고 API 디버깅을 위해 모의 데이터를 사용하는 데 유용할 수 있습니다.
YAML을 사용하여 Apidog에 API 가져오기
- Apidog을 열고 API를 가져올 프로젝트로 이동합니다.

2. 설정으로 가서 “데이터 가져오기”를 클릭합니다.

3. 시스템에 YAML 파일이 있는 경우 “파일 가져오기”를 선택합니다. 파일을 지정된 영역으로 드래그 앤 드롭하거나 해당 영역을 클릭하여 파일 관리자에서 파일을 선택할 수 있습니다.

4. 파일이 온라인에 호스팅된 경우 “URL 가져오기”를 선택하고 YAML 데이터 파일의 URL을 제공합니다.

Apidog은 그러면 API 커버리지 모드를 구성하고 특정 그룹으로 가져올 것인지 또는 API 테스트 사례를 포함할 것인지 결정할 수 있는 고급 설정을 제공합니다.

결론
보시다시피, YAML은 소프트웨어 개발 및 운영의 여러 분야에서 중요한 역할을 하는 다재다능하고 사용자 친화적인 데이터 직렬화 언어입니다. Kubernetes와 같은 복잡한 시스템을 구성하는 것부터 API를 정의하고 배포 프로세스를 자동화하는 것까지, YAML의 간단하고 읽기 쉬운 특성 덕분에 많은 개발자와 운영 팀이 선호합니다.
그러므로 여러분이 기술 분야에 처음 입문하든, 경력이 풍부한 전문가이든, YAML을 배우는 것은 가치 있는 투자입니다. 이것은 사라지지 않을 언어이며, 점점 더 많은 도구와 프레임워크가 이를 채택함에 따라 그 중요성은 계속 커질 것입니다.