Jump to section

YAML이란?

URL 복사

YAML은 사람이 읽을 수 있는 데이터 직렬화 언어로서, 구성 파일 작성에 자주 사용됩니다. YAML을 yet another markup language로 생각하는 사람도 있고, YAML ain’t markup language(재귀 약어)로 생각하는 사람도 있습니다. 후자는 YAML이 문서가 아닌 데이터용임을 강조하는 말입니다. 

YAML은 쉽게 읽고 이해할 수 있도록 설계되어 프로그래밍 언어 중에서도 인기가 높습니다. 또한 다른 프로그래밍 언어와 함께 사용할 수도 있습니다. YAML은 그 유연성과 접근성으로 인해 Ansible 자동화 툴Ansible Playbook 형태로 자동화 프로세스를 생성하는 데 사용합니다.

YAML 파일은 .yml 또는 .yaml 확장자를 사용하며 특정 구문 규칙을 따릅니다. 

YAML에는 Perl, C, XML, HTML, 기타 프로그래밍 언어에서 유래한 기능이 있습니다. 또한 YAML은 JSON의 상위 집합이므로 YAML에서 JSON 파일을 사용할 수 있습니다.

중괄호, 대괄호, 닫기 태그 또는 따옴표와 같은 통상적인 형식 기호는 없습니다. 또한 YAML 파일은 Python 스타일의 들여쓰기를 사용해 구조를 결정하고 중첩을 표시하므로 더 읽기 쉽습니다. 시스템 전반에서 이식성을 유지하기 위해 의도적으로 탭 문자를 허용하지 않으므로 문자 그대로의 공백 문자인 공백이 대신 사용됩니다. 

코멘트는 파운드 또는 해시 기호(#)로 식별할 수 있습니다. 코멘트는 코드의 의도를 설명해 주므로 코멘트를 사용하는 것은 항상 권장됩니다. YAML은 여러 줄의 코멘트를 지원하지 않으므로 각 줄의 맨 앞에는 파운드 문자가 와야 합니다.

YAML 초심자가 흔히 하는 질문은 "3개의 대시는 무엇을 뜻하나요?"입니다. 3개의 대시(---)는 문서의 시작을 알리는 데 사용되며, 각 문서의 끝에는 3개의 점(...)이 사용됩니다.  

YAML 파일의 매우 기본적인 예시는 다음과 같습니다.

 #Comment: This is a supermarket list using YAML #Note that - character represents the list --- food: - vegetables: tomatoes #first list item - fruits: #second list item citrics: oranges tropical: bananas nuts: peanuts sweets: raisins 

YAML 파일의 구조는 맵 또는 목록이며 들여쓰기와 키 값 정의 방식에 따라 계층 구조를 준수합니다. 맵 구조에서는 키-값 쌍을 연결할 수 있습니다. 각 키는 고유해야 하며 순서는 상관없습니다. Python 사전, 또는 Bash 스크립트의 변수 할당을 생각해 보세요.

YAML의 맵은 먼저 해결해야 닫을 수 있고, 그런 다음 새 맵이 생성됩니다. 들여쓰기 수준을 높이거나 이전 맵을 해결하고 인근 맵을 시작함으로써 새 맵을 생성할 수 있습니다.

목록의 값은 특정 순서로 나열되며, 목록 하나에 필요한 수의 항목을 포함할 수 있습니다. 목록 시퀀스는 대시(-) 및 공백으로 시작하며 들여쓰기로 상위 항목과 구분합니다. 여기서 시퀀스는 Python 목록 또는 Bash나 Perl의 어레이에 해당합니다. 목록을 맵에 포함할 수 있습니다.

위 예시에서 'vegetables' 및 'fruits'은 'food'이라는 이름을 가진 목록을 구성하는 항목들입니다.

또한 YAML은 스칼라를 포함할 수 있는데, 스칼라란 문자열, 정수, 날짜, 숫자 또는 부울 등의 값으로 사용할 수 있는 임의의 데이터(유니코드로 인코딩됨)를 말합니다.

YAML 파일을 생성할 때는 이러한 구문 규칙을 준수하고 파일이 유효한지 확인해야 합니다. 이를 위해 파일의 구문을 검증하는 애플리케이션인 린터(linter)를 사용할 수 있습니다. YAML 파일을 생성한 후 애플리케이션에 전달하기 전에 yamllint라는 커맨드로 유효성을 확인할 수 있습니다.

구문 규칙을 보여주는 학생 기록에 대한 단순한 YAML의 예시는 다음과 같습니다.

 #Comment: Student record #Describes some characteristics and preferences --- name: Martin D'vloper #key-value age: 26 hobbies: - painting #first list item - playing_music #second list item - cooking #third list item programming_languages: java: Intermediate python: Advanced javascript: Beginner favorite_food: - vegetables: tomatoes - fruits: citrics: oranges tropical: bananas nuts: peanuts sweets: raisins 

PyYAML 라이브러리를 사용해 이 파일을 Python으로 변환하면 다음과 같은 데이터 구조를 얻게 됩니다.

 [ { "name": "Martin D'vloper", "age": 26, "hobbies": ["painting", "playing_music", "cooking"], "programming_languages": { "java": "Intermediate", "python": "Advanced", "javascript": "Beginner", }, "favorite_food": [ {"vegetables": "tomatoes"}, { "fruits": { "citrics": "oranges", "tropical": "bananas", "nuts": "peanuts", "sweets": "raisins", } }, ], } ]

YAML의 가장 흔한 용도 중 하나는 구성 파일을 생성하는 것입니다. YAML과 JSON은 대부분의 경우 서로 바꿔서 사용할 수 있지만 YAML이 JSON보다 가독성이 높고 더 사용자 친화적이기 때문에 구성 파일은 JSON이 아닌 YAML로 작성하는 것이 좋습니다.  

YAML은 Ansible 외에 쿠버네티스 리소스 및 배포에도 사용됩니다. 

YAML의 장점은 변경 사항을 추적하고 감사하기 위해 GitHub와 같은 소스 제어에 YAML 파일을 추가할 수 있다는 것입니다.

Ansible과 Red Hat Ansible Automation Platform의 차이점은 무엇일까요?

Ansible에서 YAML 사용

Ansible Playbook은 IT 프로세스를 오케스트레이션하는 데 사용됩니다. 플레이북은 하나 이상의 플레이가 포함된 YAML 파일로, 시스템을 원하는 상태로 정의하는 데 사용됩니다. 

각 플레이는 한 개 이상의 태스크를 실행할 수 있고, 각 태스크는 Ansible 모듈을 호출합니다. Ansible에서는 이 모듈을 사용하여 자동화 태스크를 완료합니다. Ruby, Python 또는 Bash 등 JSON을 반환할 수 있는 언어라면 무엇이든 Ansible 모듈을 작성할 수 있습니다.

Ansible Playbook은 맵과 목록으로 이루어져 있습니다. 플레이북을 만들려면 플레이의 이름을 지정하는 YAML 목록을 시작하고 태스크를 순서에 따라 나열하세요. 들여쓰기가 논리적 상속을 의미하는 것은 아닙니다. 각 줄이 YAML 데이터 유형(목록 또는 맵)이라고 생각하면 됩니다.

YAML 템플릿을 사용하면 Ansible 사용자들은 고급 프로그래밍 언어를 배우지 않고도 반복적인 작업을 자동으로 프로그래밍할 수 있습니다. 또한 개발자는 Ansible Playbooks를 위한 YAML 린터인 ansible-lint command를 사용하여 실수를 식별하고 중요한 운영 단계에서 오류가 발생하지 않도록 할 수 있습니다.

IBM Watson Code Assistant의 Ansible Lightspeed 도입을 통해, 개발자들은 생성 AI 서비스인 Ansible 자동화 콘텐츠를 더 효율적으로 생성할 수 있습니다. 사용자는 일반 영어로 작업 요청을 입력하고, 그 결과로 생성된 Ansible Playbooks를 만들기 위해 사용되는 자동화 작업을 위한 깨끗하고 준수하는 YAML 코드 권장사항을 얻을 수 있습니다.

쿠버네티스용 YAML

쿠버네티스는 정의된 상태와 실제 상태를 기반으로 작동합니다. 쿠버네티스 오브젝트는 클러스터의 상태를 나타내며, 사용자가 바라는 워크로드 상태를 쿠버네티스에 알리는 역할을 합니다. YAML 파일을 사용해 포드, 오브젝트, 배포와 같은 쿠버네티스 리소스를 생성할 수 있습니다. 

쿠버네티스 오브젝트를 생성할 때는 원하는 오브젝트 상태를 정의하기 위한 사양을 포함해야 합니다. 쿠버네티스 API를 사용해 오브젝트를 생성할 수 있습니다. API에 대한 요청에는 오브젝트 사양이 JSON으로 포함됩니다. 하지만 대부분의 경우 필요한 정보를 kubectl에 YAML 파일로 제공하게 됩니다. Kubectl은 API 요청 시 이 파일을 YAML로 변환합니다.

일단 오브젝트가 생성 및 정의되고 나면 쿠버네티스가 작동하여 해당 오브젝트가 항상 존재하게 합니다. 

개발자 또는 시스템 관리자는 YAML 또는 JSON 파일을 사용하여 정의된 상태를 지정하고 쿠버네티스 API에 제출합니다. 쿠버네티스는 컨트롤러를 사용하여 새롭게 정의된 상태와 클러스터의 실제 상태 간 차이점을 분석합니다.

 

Red Hat Ansible Automation Platform의 사람이 읽을 수 있는 YAML 자동화 언어를 사용하면 조직 전체에서 자동화 콘텐츠를 공유, 검사, 관리할 수 있습니다. 플레이북, 분석 등 전사적 자동화를 구현하는 데 필요한 모든 툴이 포함되어 있습니다. 사용자는 시각적 대시보드, 역할 기반 액세스 제어 등을 통해 IT 인프라를 중앙에서 관리하고 제어하여 운영의 복잡성을 줄일 수 있습니다.

Red Hat 서브스크립션을 통해 인증된 콘텐츠, 강력한 파트너 에코시스템, 호스팅된 관리 서비스에 대한 액세스 권한, 팀이 조직 전반에서 자동화를 생성, 관리, 확장할 수 있도록 지원하는 라이프사이클 기술 지원을 확보할 수 있습니다. 또한 수천 명의 고객과 함께 실현한 성공을 통해 쌓은 전문 지식을 얻을 수 있습니다.

Red Hat OpenShift는 엔터프라이즈용 쿠버네티스입니다. 레지스트리, 네트워킹, 텔레메트리, 보안, 자동화, 서비스 등의 부가 기술이 모두 내장되어 있어 기업에서 강력하고 실효성 있는 쿠버네티스를 구축할 수 있습니다.

개발자는 Red Hat OpenShift의 확장성, 제어, 오케스트레이션 기능을 활용하여 컨테이너화된 새 애플리케이션을 빌드 및 호스팅하고 클라우드에 배포함으로써 멋진 아이디어를 빠르고 쉽게 새로운 비즈니스로 구현할 수 있습니다.

자동화가 얼마나 많은 시간을 절약해 줄 수 있을까요?

몇 개의 간략한 질문에 답하여, 기업이나 조직이 Ansible Automation Platform을 사용하여 얼마나 많은 시간을 절약할 수 있는지 알아보세요.

추가 자료

문서

Ansible 기본 사항 학습하기

Ansible은 프로비저닝 및 구성 관리와 같은 IT 프로세스를 자동화합니다. 여기서 소개하는 핵심 개념을 통해 Ansible의 기본 사항을 학습하세요.

문서

비즈니스 프로세스 관리란 무엇일까요?

비즈니스 프로세스 관리(Business Process Management, BPM)는 전략적 비즈니스 목표를 달성하기 위해 엔드 투 엔드 비즈니스 프로세스를 모델링, 분석, 최적화하는 프랙티스입니다.

문서

Red Hat의 자동화를 선택해야 하는 이유

Red Hat Ansible Automation Platform에는 여러 팀에서 자동화를 공유하고 전사적 자동화를 구현하는 데 필요한 모든 툴이 포함되어 있습니다.

자동화에 대한 자세한 내용

제품

다양한 시각으로 고객의 상황을 파악하고 이를 바탕으로 고객의 과제를 분석하여 종합적이고 비용 효율적인 솔루션을 통해 문제를 해결하도록 돕는 전략적인 조언자입니다.

자동화 과정의 어느 단계에 있든지 상관없이 전사적 자동화를 구현할 수 있는 플랫폼입니다.

리소스

교육

무료 교육 과정

Ansible Essentials: Simplicity in Automation Technical Overview

무료 교육 과정

Red Hat Ansible Automation for SAP