YAML은 무엇을 위해 사용됩니까?

또 다른 텍스트 데이터 형식은 YAML( Yet Another Markup Language ; 나중에 YAML Ai't Markup Language )입니다. 네트워크를 통한 전송을 위해 개체를 직렬화하는 데 사용됩니다(XML 및 JSON이 이 방식으로 사용되는 것처럼). 사람이 읽을 수 있기 때문에 Docker, Kubernetes, Ansible 등과 같은 구성 파일을 작성하는 데에도 사용됩니다. YAML을 파일(예: 구성 파일)에 저장해야 하는 경우 두 가지 중 하나를 사용합니다. 확장자: .yaml 또는 .yml.

언어 구문

XML에서 꺾쇠 괄호( <> )는 태그를 지정하는 데 사용됩니다. JSON에서는 중괄호( {} )를 사용합니다. YAML은 새 줄과 들여쓰기를 사용합니다.

데이터는 키-값 쌍으로 저장되며 여기서 키는 문자열이고 값은 다양한 데이터 유형(문자열, 숫자, 참/거짓, 배열 등)이 될 수 있습니다. 키는 따옴표 없이 작성됩니다.

정보가 YAML에 저장되는 방식을 살펴보겠습니다.

유형 자바 YAML
정수

int number = 5
번호: 5
분수

double number = 4.3
번호: 4.3
부울 변수

boolean valid = false
유효: 거짓
유효: 아니요
유효: 꺼짐

* 유효한 부울 값: 참/거짓, 예/아니오, 켜기/끄기.


String city = "New York"
도시: 뉴욕
시: '뉴욕'
도시: "뉴욕"

* 세 가지 옵션 모두 동일합니다.

특수 문자가 포함된 문자열

String line = "aaa\nbbb"
줄: "aaa\nbbb"
코드의 주석

// comment
# 논평
물체

public class Person {
  String name = "Dennis";
  int age = 32;
}

* 객체의 클래스를 부여하여 객체의 구조를 볼 수 있습니다.

사람:
  이름: "데니스"
  나이: 32

* 속성 앞 들여쓰기에 주의하세요. 모든 속성에 대해 동일해야 합니다.

단순 값 목록

var ages = 
    List.of(1, 3, 5, 9, 78, -5);
나이: [1, 3,5,9,78, -5]
나이:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* 두 옵션 모두 동일합니다.
** 목록의 각 요소는 하이픈으로 표시됩니다.

개체 목록

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
…
List<Person> people = List.of(
        new Person("Ian", 21),     
        new Person("Marina", 25),     
        new Person("Owen", 73)      );
사람들:
  - 이름: "Ian"
    나이: 21
  - 이름: "Marina"
    나이: 25
  - 이름: "Owen"
    나이: 73

Java에서와 마찬가지로 목록의 요소는 목록이 될 수 있습니다. 즉, 객체는 서로 중첩될 수 있습니다. 목록의 다음 요소를 나타내는 하이픈은 상위 키를 기준으로 수평으로 오프셋되거나 바로 아래에 위치할 수 있습니다. 가장 중요한 것은 모든 요소의 형식이 동일하다는 것입니다. 이렇게 하면 혼란과 모호한 중첩 계층 구조를 피하는 데 도움이 됩니다.

연령:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
연령:
- 1
- 3
- 5
- 9
- 78
- -5

텍스트 값으로 작업할 때 두 가지 뉘앙스가 더 있습니다.

  1. 여러 줄 텍스트. 다음과 같이 텍스트를 저장할 수 있습니다.

    multilineText: "라인 1\n라인 2\n....라인 n"

    그러나 그것을 읽으려고 시도하는 것은 매우 불쾌할 것입니다. 그래서 | (파이프) 기호: 텍스트를 다르게 작성하는 데 사용할 수 있습니다.

    여러 줄 텍스트: |
     라인 1
     라인 2
     ....
     라인 n

    두 번째 옵션이 더 편리하다는 데 동의하시겠죠?

  2. 긴 줄. 텍스트를 한 줄에 유지하면서 IDE의 보이는 작업 공간에도 맞추려면 > (보다 큼) 기호를 사용할 수 있습니다.

    singlelineText: >
     시작
     ...
     같은 줄 계속
     ...
     종료

    모든 텍스트는 한 줄로 처리됩니다.

여러 YAML 데이터 구조를 하나의 파일에 작성해야 하는 경우 --- (하이픈 3개) 로 구분해야 합니다 . 실제로 이것이 필요한 경우는 거의 없지만 이러한 가능성을 인식하는 것이 가장 좋습니다.

YAML 문서의 예

Java 데이터 구조(클래스)와 해당 객체를 생성하고 객체를 YAML로 표현해 봅시다.


class Family {
   private Date weddingDate;
   private Person wife;
   private Person husband;
   private List<Person> children;

   // Getters and setters are omitted
}

class Person {
   private final String name;
   private final boolean isWoman;
   private int age;

   public Person(String name, int age, boolean isWoman) {
       this.name = name;
       this.age = age;
       this.isWoman = isWoman;
   }

// Getters and setters are omitted

}

public static void main(String[] args) {
   Person wife = new Person("Ann", 37, true);
   Person husband = new Person("Alex", 40, false);
   var children = List.of(
           new Person("Iris", 12, true),
           new Person("Olivia", 5, true)
   );
   Date weddingDate = new Date(/* some long */);

   Family family = new Family();
   family.setWeddingDate(weddingDate);
   family.setWife(wife);
   family.setHusband(husband);
   family.setChildren(children);
}

YAML의 유효한 표현:

---
weddingDate: 2000-12-03
아내:
 이름: Ann
 나이: 37
 isWoman: 예
남편:
 이름: Alex
 나이: 40
 isWoman:
자녀 없음:
 - 이름: Iris
   나이: 12
   isWoman: true
 - 이름: Olivia
   나이: 5
   isWoman: 사실
---