게시일: 2023년 12월 11일
기고자: Tasmiha Khan, Michael Goodwin
YAML은 구성 파일을 작성하는 데 일반적으로 사용되며 사람이 읽을 수 있는 다목적 데이터 직렬화 언어입니다.
사람이 쉽게 이해할 수 있고 기계가 해석할 수 있는 방식으로 구조화된 데이터를 표현하는 표준화 형식을 제공합니다. 'YAML'은 'YAML은 마크업 언어가 아니다(YAML Ain't Markup Language)' 또는 '또 다른 마크업 언어(Yet Another Markup Language)'의 약어입니다. 전자는 이 언어가 문서가 아닌 데이터를 위한 언어라는 점을 강조하는 의미를 갖고 있습니다.
YAML은 기본적으로 단순성과 가독성을 염두에 두고 설계되었습니다. 들여쓰기, 키-값 쌍, 직관적인 규칙을 기반으로 최소한의 깔끔한 구문을 사용합니다. 이러한 접근 방식을 통해 개발자와 사용자는 복잡한 데이터 구조를 자연어와 유사하고 한눈에 이해하기 쉬운 형식으로 표현할 수 있습니다.
사람이 읽을 수 있는 가독성을 강조하는 YAML은 구성(config) 파일과 서로 다른 시스템 간의 데이터 교환을 비롯한 다양한 애플리케이션에 특히 적합합니다. 간단하고 직관적인 구조로 다양한 도메인에서 사용성이 향상되어 사용자가 명확하고 이해하기 쉬운 방식으로 데이터를 정의하고 구성할 수 있습니다. YAML은 유니코드 문자를 지원하므로 다양한 언어와 문자 집합의 광범위한 문자와 기호를 표현할 수 있습니다. 유효한 YAML은 구문 오류 없이 사양에 맞는 결과를 생성합니다.
YAML은 적응성이 뛰어나 다양한 애플리케이션에서 다용도로 사용할 수 있습니다. 구성 관리부터 데이터 교환 및 자동화에 이르기까지 다양한 영역에 걸쳐 데이터를 표현하고 관리할 수 있는 접근 가능하고 구조화된 수단을 제공합니다.
AI 확장을 위한 개선 및 비용 최적화 기회 등의 데이터 레이크하우스 전략을 데이터 아키텍처에 통합하는 것의 이점을 살펴보세요.
YAML 구문에는 다양한 속성과 핵심 요소가 있습니다. 효율적인 데이터 표현과 가독성을 보장하려면 YAML 파일에 사용되는 구조, 데이터 유형 및 규칙을 이해하는 것이 중요합니다.
YAML에서 사전은 매핑으로 표현됩니다. 이러한 매핑은 각 키가 값과 연결된 키-값 쌍의 모음으로, 다양한 프로그래밍 언어에서 볼 수 있는 사전 또는 맵의 개념과 유사한 데이터 구조입니다.
YAML 구문은 데이터 구조를 나타내기 위해 들여쓰기와 공백 수에 크게 의존합니다. YAML에서는 계층과 중첩을 나타내기 위해 탭 문자가 아닌 공백을 사용하며, 이러한 용도로 탭 문자를 사용하는 것은 YAML에서 금지되어 있습니다. YAML은 구조에 들여쓰기를 사용하므로 YAML 문서 전체의 일관성이 중요합니다.
새줄 문자는 줄 바꿈 또는 YAML 형식 내에서 다른 요소를 구분하는 데 사용되는 줄 끝을 나타냅니다.
YAML의 대부분의 스칼라에는 따옴표가 필요하지 않습니다. 그러나 특수 문자가 포함되어 있어 YAML 구문으로 오인될 수 있는 텍스트 문자열과 같은 특정 시나리오에서는 혼동을 피하기 위해 따옴표가 필요할 수 있습니다. 또는 "true"로만 구성된 문자열을 부울로 변환하지 않으려는 경우 등에 사용할 수 있습니다. 이러한 경우 데이터와 표현해야 하는 내용에 따라 작은따옴표 또는 큰따옴표를 사용할 수 있습니다.
YAML은 데이터 연결을 표현하기 위해 콜론으로 구분된 간단한 키-값 쌍 형식을 사용합니다.
이에 대한 예시는 다음과 같습니다.
profession: teacher
시퀀스(다른 언어의 배열 또는 목록)를 사용하면 YAML에서 항목의 목록을 정의할 수 있습니다. 들여쓰기는 시퀀스와 상위 시퀀스를 구분하며, 각 목록 항목은 대시(-)로 시작하고 그 뒤에 공백이 옵니다. 시퀀스의 모든 항목은 같은 간격으로 들여쓰기해야 합니다.
예:
fruits:
- apple
- orange
- pear
시퀀스는 대괄호와 쉼표를 사용하여 흐름 시퀀스로 표현할 수도 있습니다.1
fruits: [apple, orange, pear]
YAML은 문자열, 정수, 부동 소수점, 부울 및 null 값과 같은 다양한 데이터 유형을 지원합니다. 이러한 데이터 유형은 다양한 종류의 정보를 유연하게 표현할 수 있도록 해줍니다.
YAML은 # 기호로 표시된 주석을 지원합니다. 주석은 YAML 파일 내에 설명, 메모 또는 컨텍스트를 추가하는 데 도움이 됩니다.
YAML은 여러 줄 문자열을 지원하므로 명시적인 줄 바꿈 없이도 여러 줄에 걸쳐 텍스트를 포함할 수 있습니다. 여러 줄 문자열은 YAML 문서에 텍스트 블록을 포함할 때 유용합니다.
YAML 파일은 일반적으로 .yaml 또는 .yml과 같은 확장자를 사용합니다. YAML 파일의 이름을 지정하고 구조화하는 규칙은 데이터의 일관성과 적절한 해석을 보장합니다. YAML 파일은 Perl, Ruby 및 Python에서도 읽을 수 있습니다.
YAML과 JSON은 데이터 표현에서 유사한 점이 있지만, 가독성, 표현력, 복잡한 데이터 구조에 대한 지원 면에서는 YAML이 더 뛰어납니다. YAML은 JSON의 상위 집합으로 JSON의 모든 기능, 나아가 확장된 기능 및 명령어까지 포함하고 있습니다.
JSON(JavaScript Object Notation)은 중괄호 {}, 대괄호 [] 및 쉼표가 포함된 보다 명시적인 구문을 사용합니다. JSON의 구문은 간결하고 널리 사용되지만, 대규모 데이터 세트의 경우 가독성이 떨어질 수 있습니다. JSON의 데이터 구조 지원은 비교적 제한적이며 주로 배열, 객체 및 스칼라 값만 지원합니다.
JSON은 웹 애플리케이션과 API에서 데이터 교환을 위한 상호 호환성 때문에 선호되는 반면, YAML은 구성 파일이나 특정 유형의 데이터 문서 및 교환과 같이 사람이 읽을 수 있고 보다 복잡한 데이터 구조가 필요한 시나리오에서 더 일반적으로 사용됩니다.2
XML과 비교하여 YAML은 보다 간결하고 인간 친화적인 대안을 제공하는데, 데이터 표현과 교환에서 단순성과 이해의 용이성을 강조합니다. YAML과 XML은 구문과 목적에 있어 근본적인 차이가 있습니다.
XML은 명시적인 열기 및 닫기 태그에 따라 고도로 구조화되어 있어 약간 혼란스러울 수 있습니다. 반면, YAML은 명시적인 닫기 태그 없이 들여쓰기와 키-값 쌍을 통한 가독성에 중점을 두어 보다 단순하고 자연어와 같은 구조를 사용합니다.
YAML은 모든 프로그래밍 언어와 함께 사용할 수 있으며 구성 파일은 물론 데이터 교환 및 문서화에도 자주 사용됩니다. 즉, 사람이 읽을 수 있는 형식으로 문서의 명확성을 높여줍니다.
YAML은 DevOps에서 중추적인 역할을 하며 자동화, 오케스트레이션 및 구성 관리에서 중요하게 사용됩니다. DevOps 관행 내에서 YAML 파일은 쉽게 이해할 수 있는 형식으로 일련의 작업 및 구성을 정의하는 청사진 역할을 합니다. 이러한 파일은 자동화에 필요한 단계와 절차를 정확하게 설명하는 데 사용되므로 복잡한 워크플로우를 명확하고 간결하게 표현할 수 있습니다.
YAML은 코드형 인프라를 정의하는 데 사용되며, 이는 수동 프로세스가 아닌 코드를 사용하여 IT 인프라를 정의하고 관리하는 것을 의미합니다. IaC는 보다 효율적이고 일관된 IT 인프라 구성을 가능하게 합니다. YAML을 사용하여 가상 머신, 네트워크 및 스토리지와 같은 인프라의 원하는 구성을 정의하고 IT 인프라 구성 요소 간의 관계를 설명할 수 있습니다.
YAML은 애플리케이션 구성, 종속성, 리소스 제한 및 효율적인 애플리케이션 배포와 성능에 중요한 기타 정보를 지정하는 애플리케이션의 배포 파일을 만드는 데 사용됩니다. YAML 파일은 버전 제어 및 자동화를 통해 배포 오류를 줄이고 애플리케이션 제공 속도를 높이는 데 도움이 됩니다.
YAML은 중요한 애자일 DevOps 워크플로우인 지속적 통합 및 지속적 배포(CI/CD) 파이프라인에서 중요한 역할을 할 수 있습니다. 인프라 구성 및 배포와 마찬가지로, YAML 파일은 파이프라인 단계와 대상을 정의하는 데 사용되며 궁극적으로 CI/CD 프로세스를 자동화하는 데 도움이 됩니다.
다음과 같이 DevOps 팀에서 사용하는 많은 도구와 프로그램에서 YAML을 활용하고 있습니다.
Ansible은 플레이북이라고 하는 YAML 형식의 파일을 사용하여 작업과 자동화 절차를 정의하는 오픈 소스 자동화 소프트웨어 애플리케이션입니다. YAML 템플릿을 사용하면 고급 프로그래밍 언어에 대한 지식 없이도 반복 작업의 자동화를 프로그래밍할 수 있습니다.3
사용자는 IBM watsonx™ Code Assistant for Red Hat Ansible Lightspeed를 사용하여 일반적인 영어로 작업을 작성하고 자동화 작업에 대한 YAML 코드 추천을 받을 수 있습니다.이러한 코드 추천은 Ansible 플레이북을 만드는 데 사용됩니다.3
Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 데 사용되는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 '상태'를 기반으로 작동하며 특정 지침에 따라 현재 상태에서 원하는 상태에 도달하려고 시도합니다. YAML 파일은 팟, 오브젝트, 배포와 같은 Kubernetes 리소스를 생성할 뿐만 아니라 원하는 Kubernetes 오브젝트의 상태를 지정하고 통신하는 데에도 사용할 수 있습니다.
소프트웨어 개발의 버전 관리 및 협업을 위한 웹 기반 플랫폼인 GitHub는 워크플로우를 정의하기 위해 YAML을 통합합니다. GitHub 리포지토리의 YAML 기반 구성을 통해 지속적인 통합 및 프로젝트 관리를 위한 자동화된 워크플로우를 설정할 수 있습니다.
Docker Compose는 멀티 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다.4 Docker Compose에서는 애플리케이션의 서비스를 구성할 때 YAML 파일을 사용합니다.
YAML은 언어 독립적이므로 언어 간 데이터 공유에 이상적입니다. YAML 파일이 정의되면 Python이나 Ruby와 같은 다른 언어로 실행할 수 있습니다.
로그 파일은 컴퓨터에서 생성된 텍스트 데이터 파일로 애플리케이션, 시스템, 서버 및 기타 IT 리소스나 디바이스 내의 작업 및 패턴에 대한 정보를 담고 있습니다. 로그 파일은 리소스 성능을 측정하는 데 사용되며 시스템 관측 가능성에서 중요한 역할을 합니다. YAML은 단순하기 때문에 직관적이고 깔끔한 로그 파일을 만드는 데 사용됩니다.
YAML은 단순성, 호환성, 구성 파일 생성 시 유용성 등 여러 가지 이유로 널리 사용되는 데이터 직렬화 언어가 되었습니다.
YAML의 구문은 자연어 구조와 유사합니다. 단순하고 미니멀한 설계로 개발자와 비전문가 사용자 모두 쉽게 이해할 수 있어 이해도를 높이고 오류를 줄일 수 있습니다.
YAML은 구조화되고 읽기 쉬운 형식이기 때문에 구성 파일에 적합합니다. 들여쓰기 및 키-값 쌍을 사용하여 구성을 정의하는 프로세스를 간소화하여 다양한 소프트웨어 애플리케이션에 맞게 관리하고 적용할 수 있습니다.
YAML은 플랫폼 독립적인 특성으로 여러 시스템과 프로그래밍 언어 간의 호환성을 보장하여 다양한 플랫폼과 환경 간의 원활한 데이터 교환과 상호 운용성을 촉진합니다.
PyYAML은 Python 기반 애플리케이션에서 YAML 파일을 구문 분석하고 작업하는 데 사용되는 대표적인 Python 라이브러리로, YAML 데이터를 Python 객체로 로드하는 메서드를 제공합니다. PyYAML을 사용하면 YAML 파일을 Python 애플리케이션 내에서 실용적인 데이터 구조로 변환할 수 있으며 그 반대로 변환도 가능합니다.5
PyYAML과 같은 도구와 기타 YAML 구문 분석기 및 유효성 검사기(예: yamllint 및 YAML Validator)는 YAML 파일의 정확성, 유효성 및 무결성을 보존하는 데 중요한 역할을 합니다. 주요 기능은 YAML 구문의 유효성을 검사하고, 오류를 식별하며, YAML 문서 내에서 일관성을 보장하는 것입니다.
IBM watsonx Code Assistant for Red Hat Ansible Lightspeed는 생성형 AI 기반 콘텐츠 추천을 통해 Ansible 플레이북 생성 프로세스를 명확하게 설명합니다. IT 자동화를 가속화하기 위해 특별히 제작된 이 제품은 향상된 Ansible 경험을 위한 자동화 콘텐츠 권장 사항을 제공하도록 설계되었습니다.
IBM watsonx Code Assistant는 생성형 AI를 활용해 신뢰 원칙, 보안, 컴플라이언스를 중심에 두는 동시에 개발 속도를 높여줍니다. 개발자와 IT 운영자는 애플리케이션 현대화 작업을 가속화하고 자동화를 생성해 IT 환경을 빠르게 확장할 수 있습니다.
등록하고 IBM watsonx Code Assistant for Red Hat Ansible Lightspeed의 기술 미리 보기를 확인해 보세요.
생성형 AI를 ITOps에 적용하여 대규모 비즈니스 성과를 달성하는 방법을 전문가, 시장 분석가 및 연구 과학자로부터 알아보세요.
자동화 및 AI 기술을 통해 IT 조직은 기술 격차를 좁히고 개발자가 더 효율적으로 고품질 코드를 작성할 수 있도록 지원할 수 있습니다.
동료로부터 배우고, 아이디어를 공유하고, 커뮤니티와 협업하세요.
1 'YAML로 배열을 표현하는 방법'(ibm.com 외부 링크), Tarun Telang, Educative, Inc., 2023년
2 'YAML과 JSON의 차이점은 무엇인가요?'(ibm.com 외부 링크), Amazon Web Services, 2023년
3 'YAML이란 무엇인가요?'(ibm.com 외부 링크), Redhat.com, 2023년 3월 3일
4 'Docker Compose 개요' (ibm.com 외부 링크), Docker.com, 2023년
5 'Python YAML | YAML 파일 처리 가이드'(ibm.com 외부 링크), Gabriel Ramuglia, 2023년 9월 11일