🔥알림🔥
① 테디노트 유튜브 - 구경하러 가기!
② LangChain 한국어 튜토리얼 바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs) 바로가기 🙌

5 분 소요

오늘은 IT 세계에서 자주 사용되지만, 비전공자 분들에게는 조금 생소할 수 있는 'YAML' 에 대해 이야기해보려고 합니다.

[참고] YAMLYML 사이의 차이

  • YML: 이 확장자는 “YAML”의 축약형으로, YAML 파일을 나타내기 위해 더 짧은 형식으로 사용됩니다. 일부 시스템이나 도구에서는 이 세 글자 확장자를 선호할 수 있습니다.

  • 기능적으로 두 확장자 사이에 차이는 없습니다.

YAML이란?

YAML (발음은 “야멜”이라고 합니다)은 “YAML Ain’t Markup Language”의 줄임말로, 처음에는 “Yet Another Markup Language”라는 의미였습니다. 이 재미있는 이름은 YAML이 단순한 마크업 언어가 아니라는 점을 강조합니다.

그렇다면, YAML은 정확히 무엇을 위해 사용되는 걸까요?

간단히 말해서, YAML은 데이터를 저장하고 전달하기 위한 형식입니다. 웹사이트의 설정 파일, 애플리케이션의 설정, 서버 구성 등 IT 분야에서 매우 다양하게 사용되죠. YAML의 가장 큰 특징은 그 가독성에 있습니다. 사람이 읽기 쉽도록 설계되어 있어, 기술적 배경이 없는 분들도 이해하기 쉽습니다.

YAML은 어디에 사용되나요?

YAML은 주로 설정 파일을 작성할 때 사용됩니다. 예를 들어, 웹사이트를 만드는 데 사용되는 여러 프레임워크와 서버 설정에서 볼 수 있어요. 또한, 데이터를 다른 시스템으로 전송할 때도 종종 사용됩니다. 특히 클라우드 컴퓨팅과 관련된 기술, 예를 들어 쿠버네티스(Kubernetes) 같은 오케스트레이션 시스템에서 매우 중요한 역할을 합니다.

YAML은 그 구조가 명확하고 간결하여, 복잡한 정보도 쉽게 표현할 수 있습니다. 이는 IT 분야에서 매우 중요한 요소인데, 이렇게 명확한 구조 덕분에 개발자들은 프로그램이나 시스템을 보다 효율적으로 관리할 수 있습니다.

YAML의 기본 구조 및 특징

YAML의 기본 구조와 주요 특징에 대해 좀 더 자세히 알아보겠습니다.

가독성

YAML의 가장 큰 장점 중 하나는 그 가독성입니다. YAML 파일은 사람이 읽고 이해하기 쉽게 설계되었습니다. 복잡한 중괄호나 태그 대신, 간단한 들여쓰기와 명확한 구조를 사용합니다. 이는 YAML을 처음 접하는 분들도 쉽게 익힐 수 있게 해줍니다.

YAML은 그 가독성으로 유명합니다.

예를 들어, JSON 형식의 데이터는 아래와 같이 표현할 수 있다면

{
  "name": "John Doe",
  "age": 30,
  "isEmployee": true
}

위 JSON 데이터를 YAML로 변환하면 다음과 같습니다

name: John Doe
age: 30
isEmployee: true

데이터 구조

YAML은 다양한 데이터 구조를 지원합니다. 크게 세 가지 유형으로 나눌 수 있습니다.

  1. 스칼라 (Scalar): 문자열, 숫자, 불리언 (참/거짓) 값과 같은 기본 데이터 타입입니다.

    예를 들어, age: 30은 정수 스칼라입니다.

  2. 리스트 (List): 배열이나 목록을 표현합니다. 각 항목은 동일한 들여쓰기 레벨에서 하이픈 (-)으로 시작합니다.

    hobbies:
      - Reading
      - Hiking
      - Coding
    

    여기서 hobbies는 세 가지 취미를 나타내는 리스트입니다.

  3. 맵 (Map): 키-값 쌍으로 데이터를 구성합니다. 이는 객체나 레코드를 표현하는 데 유용합니다.

    address:
      street: 123 Main St
      city: Anytown
      zip: 12345
    

    address는 여러 개의 키-값 쌍을 포함하는 맵(map) 입니다.

들여쓰기를 통한 계층 구조

YAML에서 들여쓰기는 매우 중요합니다. 이 들여쓰기는 데이터의 계층 구조를 나타내며, 탭 대신 공백을 사용합니다.

잘못된 들여쓰기는 오류를 발생시킬 수 있으니 주의해야 합니다.

  • 들여쓰기는 2칸 들여쓰기 합니다.

아래의 예시는 들여쓰기를 통한 계층 구조를 표현합니다.

- name: John Doe
  details:
    age: 30
    city: New York

detailsname에 대한 하위 요소입니다. 들여쓰기를 통해 이 계층적 관계가 명확해집니다.

스칼라 타입

YAML은 다양한 스칼라 타입을 지원합니다. 예를 들어, 문자열, 정수, 부동 소수점 숫자, 불리언 (참/거짓) 등이 있습니다. 이러한 타입의 데이터를 쉽게 표현하고 읽을 수 있습니다.

YAML은 다양한 스칼라 타입을 지원합니다.

integerExample: 25
stringExample: "Hello, YAML"
booleanExample: true

여기서 integerExample, stringExample, booleanExample은 각각 정수, 문자열, 불리언 타입의 스칼라 값을 나타냅니다.

앵커와 별칭 사용

YAML에서는 앵커(&)와 별칭(*)을 사용하여 데이터를 재사용할 수 있습니다. 이 기능은 중복을 피하고, 복잡한 구조에서도 데이터 관리를 용이하게 합니다.

# 앵커
defaultAddress: &address
  street: 123 Main St
  city: Anytown
  zip: 12345

# 앵커참조
johnsAddress: *address
janesAddress:
  <<: *address
  street: 456 Elm St

여기서 defaultAddress는 앵커로 사용되며, johnsAddressjanesAddress는 이 앵커를 참조합니다.

줄바꿈

리터럴 스타일 (Literal Style): | 기호를 사용합니다. 이 스타일은 줄바꿈을 유지하며, 문자열을 그대로 보존합니다.

예를 들어

| 
  여러 줄의
  텍스트를
  그대로 보존합니다.

위 예시에서, 각 줄의 줄바꿈이 그대로 유지됩니다.

폴디드 스타일 (Folded Style): > 기호를 사용합니다. 이 스타일은 연속된 줄바꿈을 하나의 공백으로 치환하며, 개별 줄바꿈은 유지됩니다.

예를 들어

> 
  이것은 하나의
  긴 문장입니다.
  이 줄바꿈은 유지됩니다.

  새로운 단락입니다.

위 예시에서, 첫 번째와 두 번째 줄은 하나의 문장으로 결합되지만, 두 번째 단락은 별도로 유지됩니다.

다중 문서 지원

YAML은 하나의 파일 내에서 여러 문서를 지원합니다. 각 문서는 ---로 구분됩니다. 이를 통해 관련된 여러 설정을 한 파일 내에서 관리할 수 있습니다.

예시

# Document 1
---
name: John Doe
age: 30
---
# Document 2
name: Jane Smith
age: 25

주석 사용

YAML에서는 # 기호를 사용하여 주석을 추가할 수 있습니다. 이 주석은 코드에 대한 설명을 추가하거나, 임시로 코드를 비활성화할 때 유용합니다.

# 이것은 주석입니다
name: John Doe # 사용자의 이름

이러한 특징들 덕분에 YAML은 설정 파일을 작성하거나 데이터를 교환하는 데 널리 사용됩니다. 다음 섹션에서는 실제 YAML 문서의 예시와 함께 각 요소의 사용 방법에 대해 더 자세히 살펴보겠습니다.

YAML 사용 예시

YAML을 실제로 사용하는 예를 살펴보겠습니다. 이 예시는 YAML을 어떻게 활용할 수 있는지 보여줍니다.

예시: 설정 파일

YAML은 종종 설정 파일을 작성하는 데 사용됩니다. 예를 들어, 간단한 웹 서버 설정은 다음과 같이 YAML 형식으로 작성할 수 있습니다:

server:
  port: 8080
  host: localhost

database:
  type: mysql
  username: user
  password: passwd

이 설정 파일은 serverdatabase라는 두 부분으로 구성되어 있으며, 각각 서버와 데이터베이스 설정을 담고 있습니다.

YAML과 다른 데이터 직렬화 언어와의 비교

YAML을 JSON과 XML과 같은 다른 데이터 직렬화 언어와 비교해보겠습니다.

YAML vs JSON

JSON은 웹에서 데이터를 전송하는 데 자주 사용되는 형식입니다. YAML과 JSON은 유사한 기능을 가지고 있지만, YAML은 보다 가독성이 높은 반면, JSON은 웹에서의 데이터 교환에 최적화되어 있습니다.

YAML로 설정 파일을 구성한 예시입니다

server:
  port: 8080
  host: localhost

database:
  type: mysql
  username: user
  password: passwd

위의 YAML 설정 파일을 JSON으로 표현하면 다음과 같습니다

{
  "server": {
    "port": 8080,
    "host": "localhost"
  },
  "database": {
    "type": "postgres",
    "username": "user",
    "password": "pass"
  }
}

YAML vs XML

XML은 마크업 언어로, 특히 복잡한 문서 구조를 가진 데이터를 표현하는 데 적합합니다. 반면, YAML은 들여쓰기를 사용하여 데이터의 계층 구조를 간단하게 표현합니다.

YAML로 설정 파일을 구성한 예시입니다

server:
  port: 8080
  host: localhost

database:
  type: mysql
  username: user
  password: passwd

같은 데이터를 XML로 표현하면 다음과 같습니다

<config>
  <server>
    <port>8080</port>
    <host>localhost</host>
  </server>
  <database>
    <type>postgres</type>
    <username>user</username>
    <password>pass</password>
  </database>
</config>

각 언어는 특정 상황과 필요에 따라 선택됩니다.

JSON은 웹 기반의 API와 통신할 때 주로 사용되고, XML은 문서 기반의 데이터를 다룰 때 자주 사용됩니다. 반면, YAML은 설정 파일과 같은 곳에서 그 가독성과 간결함 때문에 선호됩니다.

YAML 사용 시 주의점 및 일반적인 실수

YAML을 사용할 때 주의해야 할 몇 가지 중요한 사항들이 있습니다. 이러한 주의점을 알고 있으면, 실수를 피하고 보다 효과적으로 YAML을 활용할 수 있습니다.

들여쓰기에 주의하기

YAML에서 들여쓰기는 매우 중요합니다. 들여쓰기는 공백을 사용하여야 하며, 탭을 사용해서는 안 됩니다. 잘못된 들여쓰기는 오류의 주요 원인이 될 수 있습니다.

예를 들어, 다음 YAML은 들여쓰기 오류로 인해 문제가 발생할 수 있습니다:

- name: John Doe
   age: 30
  city: New York

agecityname과 동일한 들여쓰기 레벨을 가져야 합니다.

데이터 타입의 혼동 피하기

YAML은 다양한 데이터 타입을 지원하지만, 때때로 이로 인해 혼란이 발생할 수 있습니다. 특히, 숫자와 불리언 값이 문자열로 해석될 수 있습니다.

예를 들어, yes, no, on, off는 불리언 값으로 해석될 수 있으므로, 이들을 문자열로 사용하려면 따옴표로 묶어야 합니다.

valid: "yes"

복잡한 구조 관리

YAML은 복잡한 구조를 갖는 데이터도 표현할 수 있지만, 이러한 구조가 너무 복잡해지면 이해하기 어려워질 수 있습니다. 가능한 한 간결하고 명확하게 구조를 유지하는 것이 좋습니다.

파일 크기와 성능

매우 큰 YAML 파일은 파싱(해석)하는 데 시간이 오래 걸릴 수 있습니다. 따라서, 파일 크기가 큰 경우에는 데이터를 여러 파일로 분리하거나, 다른 형식을 고려하는 것이 좋습니다.

안전하지 않은 YAML 사용 피하기

YAML은 기본적으로 안전하지만, 외부 소스에서 가져온 YAML 파일을 그대로 사용하는 것은 위험할 수 있습니다. 악의적인 코드가 포함되어 있을 수 있으므로, 외부에서 가져온 YAML 파일은 항상 주의 깊게 검토해야 합니다.

댓글남기기