시스템 간 데이터를 주고받기 위해서는 일정한 포맷 규칙이 필요합니다. 우리가 흔히 접하는 CSV, XML, JSON, Properties 등이 이러한 포맷을 제공합니다. XML은 복잡하고 가독성이 떨어지기 때문에 최근에는 JSON을 많이 사용합니다. 그러나 JSON에도 주석을 달 수 없고 중괄호와 대괄호가 남발되는 단점이 있습니다. 이를 해결하기 위해 2001년 Clark Evans가 YAML을 제안했습니다.
YAML은 XML과 JSON처럼 시스템 간 데이터 교환을 위한 포맷입니다. YAML은 가독성에 중점을 두어 작성하기 쉬우며, 고급 프로그래밍 언어에 친화적입니다. JSON과 달리 주석을 달 수 있고, 간결한 문법 덕분에 코드 길이가 짧아집니다. YAML은 주로 Docker Compose, Kubernetes, Flutter, Spring Boot 프로젝트의 설정 파일로 사용됩니다.
YAML이란 무엇인가?
YAML은 ‘YAML Ain’t Markup Language’의 약자입니다. 이는 ‘yaml은 마크업언어가 아니다’라는 재귀적 유머를 담고 있습니다. 원래는 ‘Yet Another Markup Language’였으나, 데이터 중심의 포맷임을 강조하기 위한 이름이 변경되었습니다.
.yaml과 .yml차이
.yaml과 .yml 파일 확장자는 기능적으로 동일합니다. 과거 windows 시스템에서는 파일확장자가 3자로 제한되었기 때문에 .yml이 사용되었으나, 현재는 .yaml이 일반적으로 사용됩니다.
yaml 문법
YAML은 공백을 사용해서 데이터를 구분 표현합니다. json과 비교했을 때 몇 가지 주요 차이점이 있습니다.
key-value 문법
yaml에서는 key와 value가 콜론( : ) 으로구분되고 , 콜론 뒤에 반드시 공백이 필요합니다.
name: John Doe
age: 30
major: Computer Science
들여쓰기
yaml은 들여쓰기로 계층 구조를 표현합니다. 보통 2칸 또는 4칸 들여쓰기를 사용합니다.
person:
name: John Doe
age: 30
major: Computer Science
따옴표
yaml에서는 큰 따옴표와 작은 따옴표를사용하거나 따옴표 없이 문자열을 인식할 수 있습니다. 그러나 콜론( : )이 포함된 문자열은 반드시 따옴표로 감싸야합니다.’
name: "Jane Smith"
address: 'New York'
ratio: "1:2"
배열 리스트
yaml에서 배열은 하이픈( – )을 사용해서 표현합니다.
ingredients:
- chicken
- flour
- sauce
또는 대괄호를 사용해서 한 줄로 표현하는 경우도 있습니다.
ingredients: [chicken, flour, sauce]
객체 배열
객체 배열은 하이픈( – )과 key-value구조를 사용해 표현합니다.
students:
- name: Alice
major: Mathematics
age: 22
- name: Bob
major: Literature
age: 24
- name: Charlie
major: Physics
age: 26
yaml의 주요 사용 예
yaml은 Docker Compose, Kubernetes 설정 파일, Spring Boot의 application.yml파일 등 다양한 곳에서 사용됩니다. yaml은 간결하고 가독성이 높아 설정 파일 작성에 매우 유용하다.
yaml과 json의 비교
yaml과 josn은 데이터를표현하는 방식에서 몇 가지의 차이점이 존재합니다.
데이터표현
json은 중괄호와 대괄호를 사용하여 데이터를 표현합니다. 반면, yaml은들여쓰기를 사용하여 데이터를 계층적으로 표현합니다.
json예시
{
"name": "John Doe",
"age": 30,
"major": "Computer Science"
}
yaml 예시
name: John Doe
age: 30
major: Computer Science
주석
JSON은 주석을 지원하지 않지만, YAML은 주석을 달 수 있습니다.
# 이 파일은 학생 정보를 나타냅니다
name: John Doe
age: 30
major: Computer Science
따옴표 사용
JSON에서는 문자열을 표현할 때 반드시 따옴표를 사용해야 합니다. 그러나 YAML에서는 필요할 때만 따옴표를 사용하면 됩니다.
데이터 타입
JSON은 기본적으로 문자열, 숫자, 배열, 객체 등의 데이터 타입을 지원합니다. YAML도 이와 유사하지만, 더 다양한 데이터 타입을 직관적으로 표현할 수 있습니다.
YAML의 장단점
장점
- 가독성: YAML은 사람이 읽기 쉽게 설계되었습니다. 들여쓰기와 간결한 문법 덕분에 구조를 쉽게 파악할 수 있습니다.
- 주석: JSON과 달리 YAML에서는 주석을 사용할 수 있어, 설정 파일에 대한 설명을 추가하기 용이합니다.
- 다양한 데이터 타입: YAML은 다양한 데이터 타입을 직관적으로 표현할 수 있어 복잡한 구조를 쉽게 정의할 수 있습니다.
단점
- 속도: YAML의 파싱 속도는 JSON보다 느릴 수 있습니다. 복잡한 구조를 가진 YAML 파일을 파싱할 때는 성능 저하가 발생할 수 있습니다.
- 공백 민감도: YAML은 들여쓰기와 공백에 민감합니다. 잘못된 공백이나 들여쓰기로 인해 파일이 제대로 파싱되지 않을 수 있습니다.
- 표준화 부족: JSON에 비해 YAML은 표준화가 덜 되어 있어, 일부 코드에서는 YAML을 다르게 해석할 수 있습니다.
마무리
yaml은 간결하고 가독성이 높은형식을 제공하여 다양한 프로젝트에서 유용하게 사용되곤하는데요. yaml과 json은 각기 다른 장점을 가지고 있어서 상황에 맞게 선택해 사용할 수 있습니다. 데이터 포맷을 선택할 때는 프로젝트의 필요성과 환경을 고려해 최적의 포맷을 선택하는것이 중요합니다.
파이썬 강좌를 시작하고 있습니다. 파이썬을 어떻게 공부해야할지 모르시면 아래를 참고하세요.