YAML 이란 무엇인지 yaml 기본 사용 방법 정리

yaml 또는 yaml 파일을 자주 보게 되는데요. 요즘 많은 소프트웨어와 애플리케이션에서 설정 파일을 작성하고 관리하는 데 YAML(YAML Ain't Markup Language)1형식을 자주 보게 되는데요. YAML은 괄호나 따옴표처럼 복잡한 구문 기호가 없고 들여쓰기에 기반한 구조와 간단한 반각기호로 구성된 키와 값 구분자가 사용되어 JSON과 비슷한 구조를 가졌습니다.

그래서 YAML형식을 사용하면 구성 파일과 같은 일반적인 사용자들이 쉽게 읽을 수 있는 중심적인 데이터 구조를 구성할 수 있습니다. 공식 사이트인 https://yaml.org 를 열어보면 사이트 레이아웃 자체가 YAML 형식으로 구성되어 있어 보다 단순하고 직접적인 정보 전달 방식을 가지고 있는 것을 확인할 수 있습니다.

이번 글에서는 YAML의 개념, 기본 사용법, 그리고 실전적인 팁들을 하나씩 정리해 보도록 하겠습니다.

아래 설명은 iboxcomein.com 에서 테스트 및 검증 후 작성 된 내용이지만 이것이 본문의 내용의 정확성이나 신뢰성에 대해 보증을 하는 것은 아니니 단순 하게 참고용으로 확인바랍니다.

튜토리얼 환경: YAML 1.2 버전

YAML이란

YAML은 사람과 기계 모두에게 읽기 쉬운 형식을 제공하며, 주로 설정 파일, 데이터 전송 및 저장 등에 사용됩니다. YAML은 프로그래밍 언어와 독립적이며, 다양한 프로그래밍 언어에서 지원되는 표준으로 사용됩니다. 우선 YAML 기본적인 정의 사용처와 YAML과 유사하게 활용되는 JSON과의 차이점도 같이 정리합니다.

WireGuard

기본적인 정의 사용처

  • 구성 설정 파일: 소프트웨어나 프레임워크의 구성 설정 파일로 사용됩니다. 예를 들어, 서버 설정, 데이터베이스 연결 정보, 로깅 설정 등을 YAML 파일에 작성할 수 있습니다.
  • 프레임워크 설정: 다양한 프레임워크에서 YAML을 사용하여 설정 정보를 관리합니다. 예를 들어, 웹 프레임워크에서 URL 라우팅 규칙, 데이터베이스 연결 정보, 보안 설정 등을 YAML 파일에 정의할 수 있습니다.
  • 데이터 교환: YAML은 데이터를 표현하고 전송하기 위한 형식으로 사용될 수 있습니다. 다양한 시스템 간에 데이터를 교환하거나, 다른 시스템에서 처리할 수 있는 형식으로 변환하기 위해 YAML을 사용할 수 있습니다.

JSON과의 차이점

JSON 과 YAML 비교
JSON 과 YAML 비교

JSONJavaScript Object Notation 파일도 데이터 교환 형식을 나타내는 텍스트 파일입니다. JSON 파일은 .json 확장자를 가지며, 웹 상에서 데이터를 전송하는 데 주로 사용됩니다. YAML과 JSON은 모두 데이터 직렬화 형식으로 유사한 부분이 많지만, 다음과 같은 몇 가지 차이점이 있습니다.

  • 가독성: YAML은 가독성에 더 초점을 맞춘 디자인으로, 들여쓰기를 사용하여 계층 구조를 표현하고 중괄호({})나 대괄호([]) 등의 기호를 사용하지 않습니다. 반면에 JSON은 구조를 대괄호와 중괄호로 구분합니다.
  • 주석: YAML은 주석을 지원하며, '#' 문자를 사용하여 주석을 작성할 수 있습니다. JSON에서는 주석이 지원되지 않습니다.
  • 기본 데이터 타입: YAML은 스칼라, 시퀀스, 매핑의 세 가지 기본 데이터 타입을 지원합니다. JSON은 기본 데이터 타입으로 문자열, 숫자, 부울, 객체, 배열, null을 지원합니다. 두 형식 모두 형식 간 변환을 지원하기 때문에 데이터 타입의 차이를 해결할 수 있습니다.
  • 파싱 속도: JSON이 일반적으로 더 빠른 파싱 속도를 보이며, 더 대중적인 라이브러리나 파서를 지원합니다. YAML은 상대적으로 느린 파싱 속도를 가지고 있습니다.
  • 용도: 일반적으로, JSON은 웹 API, 파이프라인, 프론트엔드 및 백엔드 사이의 응용 프로그램간 데이터 전송에 사용됩니다. 반면에 YAML은 구성 파일, 프레임워크 설정 등 인간과 직접적으로 인터랙션 하는 경우에 적합합니다.
한컴오피스 한글에서 표를 추가하고 수정하는 방법

기본 사용법

YAML의 기본 구조적인 요소들인 들여쓰기와 구분 등과 같은 중요한 작성법을 소개합니다.

기본 구문

key1: value1
key2:
  - item1
  - item2
key3:
  nested_key1: nested_value1
  nested_key2: nested_value2

위의 예제에서 key1value1을 가지고 있고, key2는 리스트 형태로 item1item2를 가지고 있습니다. key3는 중첩된 구조를 가지며, nested_key1nested_key2라는 하위 키를 가지고 있습니다.

  • 키-값 쌍: 각 라인은 YAML에서 키-값 쌍을 나타냅니다.
    • key1value1을 가지고 있는 키-값 쌍입니다.
    • key2는 리스트 형태로 - item1- item2를 가지고 있는 맵입니다.
    • 리스트는 하이픈(-)으로 시작하며, 여러 값을 포함하는 배열을 나타냅니다.
    • key3은 중첩된 구조를 가지는 맵입니다.
    • nested_key1nested_key2라는 하위 키를 가지며, 이들은 각각 nested_value1nested_value2 값을 갖습니다.
  • 들여쓰기와 구분: 들여쓰기는 계층 구조를 나타내는 데 사용됩니다.
    • 예를 들어, key2key3key1과 같은 레벨에 있지 않고 들여쓰기로 구분되어 있습니다. 이것은 key2key3key1의 하위 요소임을 나타냅니다.
    • 들여쓰기는 공백 문자로 구성되며, 일반적으로 공백 2칸 또는 공백 4칸을 사용합니다. 중요한 것은 일관성을 유지하는 것입니다.
    • 모든 하위 요소는 그들의 상위 요소와 동일한 들여쓰기를 가져야 합니다.
    • 이를 통해 YAML은 계층 구조를 시각적으로 표현하고 데이터의 관계를 명확하게 표현할 수 있습니다.

YAML을 이용한 대표적인 구성 파일의 예로 Docker Compose 파일을 들 수 있습니다. YAML 형식을 사용하여 구성 파일을 작성하면 코드의 가독성이 좋아지며, 데이터를 쉽게 파악할 수 있습니다.

version: '3.8'
services:
  web:
    build: .
    ports:
      - '80:80'
  database:
    image: 'mysql:5.7'
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_DATABASE: 'app_db'
  redis:
    image: 'redis:alpine'

위의 예시는 다음과 같은 내용을 포함합니다.

  • version: Docker Compose 구성 파일의 버전을 나타냅니다.
  • services: 이 컴포즈 파일에서 정의할 컨테이너(서비스) 목록을 나타냅니다.
  • web: 웹 서비스를 구성하며, 현재 디렉토리의 Dockerfile을 이용하여 빌드하고 호스트와 컨테이너의 80 포트를 바인딩합니다.
  • database: MySQL 데이터베이스 서비스를 구성하며, mysql:5.7 이미지를 사용하고 환경변수를 설정합니다.
  • redis: Redis 데이터 저장소 서비스를 구성하며, redis:alpine 이미지를 사용합니다.
MS 오피스 워드 Word 에디터 페이지 배경 화면 색상 변경 하는 방법

YAML의 다양한 요소

YAML의 다양한 요소에서는 목록, 사전, 스트링, 멀티라인 문자열 등 다양한 데이터 유형과 작성법을 설명합니다. 주석과 앵커 및 별칭 사용 등 주요 기능에 대해 다룹니다. 기본 문법에서 다룬 내용들이 중복될 수 있지만 이해를 돕기 위한 것이니 다시 한번 더 확인합니다.

목록 작성

YAML에서 목록은 순서가 지정된 항목의 컬렉션입니다. 목록 항목은 하이픈(-)으로 시작하며, 균일한 들여쓰기를 사용합니다.

shopping_list:
  - apples
  - bananas
  - oranges

groceries:
  - fruits:
    - apples
    - bananas
    - oranges
  - vegetables:
    - carrots
    - lettuce
    - spinach

mixed_data_list:
  - item1
  - 42
  - True
  - sub_list:
    - item2
    - item3
  - key: value

YAML에서 목록은 강력한 구조를 제공합니다. 간단한 문자열을 나열하는 일상적인 작업에서부터 복잡한 데이터 구조를 표현하는 데 사용되며, 작성 및 파싱이 쉽게 되어 있어 이해하기 쉽게 합니다. 이러한 옵션들로 인해 YAML에서 목록의 사용성이 더욱 강화됩니다.

  • 기본 문법: 목록 항목은 하이픈(-)으로 시작하며, 각 항목은 하이픈 앞에서 동일한 들여쓰기를 사용해야 합니다. 이렇게 하면 목록 구조가 더 명확하게 표현됩니다.
  • 중첩 목록: YAML 목록은 groceries:과 같이 중첩이 가능합니다. 이를 통해 계층 구조를 가진 목록을 쉽게 작성할 수 있으며, 들여쓰기를 사용하여 서브 목록을 추가할 수 있습니다.
  • 복합 데이터 유형: YAML 목록은 mixed_data_list:와 같이 다양한 데이터 유형을 포함할 수 있습니다. 예를 들어 문자열, 숫자, 불리언 값뿐만 아니라 사전dictionary또는 다른 목록list 등 복합 데이터 유형을 포함할 수 있습니다.

사전(Dictionary)

YAML에서 사전Dictionary은 키-값 쌍으로 구성된 데이터 구조로서, 매핑mapping이라고도 불립니다.

person:
  name: John Doe
  age: 25
  city: New York
  education:
    high_school: Good High School
    university: Best University

위의 예시에서 사전을 표현한 person내부에 name, age, city, 그리고 education이라는 키(key)가 있는 것을 확인할 수 있습니다.

  • 각 키에 대응하는 값(value)은 콜론(:)을 기준으로 오른쪽에 위치했습니다.
  • 또한, 한 단계 더 들어간 education 키에는 또 다른 사전이 중첩되어 있어 더 복잡한 데이터 구조를 보여줍니다. 들여쓰기는 사전의 계층 구조를 표현하는 데 사용됩니다.

스트링(String)

YAML에서 문자열은 큰따옴표("") 또는 작은따옴표('')를 사용하거나 따옴표 없이 작성할 수 있습니다. 큰 따옴표 사용시 공백 문자와 이스케이프 문자를 인식할 수 있습니다. 작은 따옴표를 사용하면 문자열을 원시 문자열로 작성할 수 있습니다.

simple_string: Hello, world!
double_quoted: "Hello, world! \nThis is a new line."
single_quoted: 'Hello, world! \nThis is not a new line.'

YAML 파일에서 문자열을 작성할 때 어떤 따옴표를 사용할지는 상황과 주어진 문자열에 따라 판단합니다. 이스케이프 문자를 염두에 두고 큰따옴표를 사용하거나, 원시 문자열을 사용하려면 작은따옴표를 사용하십시오. 이를 통해 YAML 문자열에 대한 처리 방식을 효과적으로 구분하고 제어할 수 있습니다.

  • 따옴표 없이 입력: 기본적인 문자열에서는 따옴표 없이 작성 가능합니다. 이 경우 간단하고 직관적인 문자열 표현을 위한 방법입니다.
  • 큰따옴표(" ") 사용: 큰따옴표로 문자열을 감싸면 이스케이프 문자가 유효하게 작동하며, 공백 문자와 개행 등의 제어 문자를 처리할 수 있습니다. 예를 들어, \n은 개행(newline)으로 인식되고 처리되며, 여러 공백 문자와 제어 문자도 유효하게 작동합니다.
  • 작은따옴표(' ') 사용: 작은따옴표로 문자열을 감싸면 원시 문자열(raw string)을 작성할 수 있습니다. 이 경우 이스케이프 문자는 일반 문자로 처리되며, 제어 문자의 동작이 무시됩니다.

멀티라인 문자열

YAML에서 멀티라인 문자열을 작성할 때는 > 또는 |를 사용합니다.

folded_multiline: >
  This is a folded
  multiline string.
  All newlines are removed.

literal_multiline: |
  This is a literal
  multiline string.
  All newlines are preserved.

>를 사용하면 개행 문자를 무시하고 문자열을 한 줄로 표시합니다. |는 문자열에 개행 문자를 유지합니다.

  • 접기 지시자 사용: > 기호를 사용하여 멀티라인 문자열을 작성하면, 개행 문자는 무시되고 문자열이 접혀 한 줄로 표시됩니다. 연속된 개행 문자는 하나의 개행 문자로 처리되어 단락을 구분할 수 있습니다.
  • 리터럴 지시자 사용: | 기호를 사용하여 멀티라인 문자열을 작성하면, 개행 문자가 문자열 내에 유지됩니다. 이를 통해 원래 문자열의 줄바꿈 구조를 그대로 보존할 수 있습니다.

주석

주석은 코드의 가독성과 이해를 높이는 데 도움을 주는 유용한 도구입니다. 주석을 활용하여 데이터의 의도를 명확하게 설명하고, 다른 사람들과 코드를 공유할 때 추가적인 정보를 제공할 수 있습니다. YAML에서 주석은 옥타샵(#) 기호로 시작합니다.

# This is an example of a standalone comment
person:
  name: John Doe # This is an inline comment
  age: 25

주석은 독립된 줄에 작성하거나 데이터의 뒤쪽에도 추가할 수 있습니다.

  • 독립된 주석: 주석이 별도의 줄에 작성됩니다. 주석 기호(#) 이후에 나오는 모든 내용은 주석으로 처리됩니다. 이러한 주석은 데이터 구조와 독립적으로 사용되며, 해당 줄의 데이터와는 직접적인 연관이 없습니다. 다른 사람이 코드를 이해하거나 유지보수하는 데 도움을 주는 역할을 합니다.
  • 인라인 주석: 주석이 데이터 구조 내의 특정 위치에 인라인으로 작성됩니다. 인라인 주석은 데이터 구조와 함께 사용되며, 해당 줄의 데이터와 관련된 설명을 제공합니다.

앵커 및 별칭 사용

YAML에서 앵커(&)와 별칭(*)을 사용하여 중복되는 구조를 재사용할 수 있습니다. 앵커를 사용해 구조에 이름을 지정하고, 별칭을 사용해 해당 구조를 참조합니다.

person: &person_anchor
  name: John Doe
  age: 25

employee:
  <<: *person_anchor
  position: Developer

위의 예시에서 앵커와 별칭을 사용해 personemployee의 구조가 동일하게 유지되는 것을 볼 수 있습니다. 이는 중복을 피하고 데이터를 재사용할 수 있어 유지보수성을 향상시키는 데 도움이 됩니다.

  • person은 앵커 &person_anchor를 가지는 맵입니다. 이 맵은 nameage라는 키-값 쌍으로 구성되어 있습니다.
  • employee는 별칭 *person_anchor를 사용하여 person의 데이터를 참조합니다. 이를 통해 employee의 데이터는 person과 동일한 구조를 가지게 됩니다. 또한 position이라는 추가적인 키-값 쌍을 가질 수 있습니다.

확장자

YAML 파일은 일반적으로 .yaml 또는 .yml 확장자를 가지는 텍스트 파일로 저장됩니다. 이러한 확장자는 YAML 포맷을 나타내고 해당 파일이 YAML 문법을 따른 데이터를 포함하고 있음을 나타냅니다.

  • 확장자 .yaml.yml은 기능적으로 동일하며, YAML 파일을 구분하고 인식하는 데 사용됩니다. 어느 확장자를 선택하더라도 YAML 파일을 읽고 쓸 수 있습니다. 두 확장자는 기능상 동일하며, 프로젝트 또는 개발자의 선호에 따라 선택할 수 있습니다. 파일 확장자와 관계없이 파일 내용은 동일한 YAML 구문을 따릅니다.
  • 예를 들어, 서버 설정, 데이터 교환, 프레임워크 설정 등을 YAML 파일로 저장한다면, config.yaml 또는 settings.yml와 같은 파일명으로 사용할 수 있습니다. 그러나 이러한 확장자는 일반적인 관례이지 강제적인 규칙은 아닙니다. 파일명과 확장자는 개발자의 선호도나 팀의 규칙에 따라 다를 수 있습니다.
  • YAML 파일은 구조적인 데이터를 표현하기 위해 사용되며, 키-값 쌍, 리스트, 맵 등의 요소를 활용하여 계층적인 구조를 표현하는 것으로 확장자는 단지 해당 파일이 YAML 포맷을 따르고 있는지를 나타내는 용도로 사용됩니다.
IDM (Internet Download Manager) 주소로 다운로드 하는 방법

사용 팁

YAML 파일을 작성할 때 몇 가지 사용 팁을 따르면 가독성을 높이고 효율적인 구조를 구성할 수 있습니다.

가독성 높이기

  • 적절한 들여쓰기: 들여쓰기는 계층 구조를 나타내는 데 중요합니다. 일관된 들여쓰기 규칙을 사용해 코드를 깔끔하게 유지합니다.
  • 데이터 유형에 맞는 따옴표 사용: 문자열을 입력할 때 원시 문자열을 유지해야 할 경우 작은따옴표('')를 사용하고, 이스케이프 문자 등의 특수 문자를 인식해야 할 경우 큰따옴표("")를 사용합니다.
  • 주석 사용: YAML 파일의 가독성을 높이려면 주석을 사용하여 구조, 데이터 또는 다른 중요한 부분을 설합니다. 이를 통해 동료 개발자나 코드를 처음보는 사람들이 이해하기 쉽게 도와줍니다.
Word 워드 문서에 워터마크 삽입하는 방법

효율적인 구조 구성

  • 앵커 및 별칭 활용: 중복되는 데이터 구조가 있는 경우 앵커(&)와 별칭(*)을 사용하여 중복을 피하고 코드를 간결하게 만듭니다.
  • 적절한 데이터 유형 사용: 사용 사례에 맞게 데이터 유형을 선택하여 구조 구성을 개선합니다 (예: 목록, 사전, 숫자 및 논리 값). 이렇게 하면 데이터를 탐색하고 사용하기 쉬워집니다.
  • 복잡한 계층 구조 피하기: 가능하다면 단순한 계층 구조를 유지하여 코드를 관리하고 이해하기 쉽게 만드는 것이 좋습니다. 용도에 맞게 구조를 효과적으로 분리할 수 있으며, 이를 통해 유지 관리가 용이해집니다.

마치며

YAML 이란 무엇인지 yaml 파일의 기본적인 사용 방법에 대해서 알아보았습니다. 최근에는 노트앱의 기본 설정도 YAML 파일을 사용하는 경우도 어렵지 않게 경험할 수 있는데요. 이는 YAML 파일이 가독성이 좋고 사용자 친화적인 특성 때문입니다. 이로 인해 개발자뿐만 아니라 일반 사용자들도 설정 파일을 쉽게 작성하고 수정할 수 있게 되었습니다.

YAML의 발전으로 많은 소프트웨어와 도구들이 YAML 파일을 기본 설정으로 사용하기 시작했습니다. 이는 표준화와 확장성을 제공하며, 애플리케이션 간 데이터 교환을 편리하게 해줍니다. 결과적으로, YAML이 다양한 애플리케이션에서 설정 파일의 선호하는 포맷이 되었으며, 점차 다양한 분야에서 더 많이 사용될 것으로 예상됩니다.

따라서 앞으로 노트 앱, 텍스트 에디터, 개발 도구 등 다양한 애플리케이션에서 YAML 파일로 설정을 관리하고 변경하는 경험이 더 많아질 것으로 기대할 수 있습니다. 가독성과 편의성을 바탕으로 더 많은 사용자들이 YAML 형식의 설정 파일에 접근할 수 있다는 것은 직접 설정을 변경하며 애플리케이션을 자신의 환경에 맞춰 사용하는 데 큰 도움이 됩니다.

윈도우 11에서 파워토이즈 Power Toys 설정을 백업하거나 복원하는 방법

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment