IT STUDY LOG
[YAML] 01. YAML과 JSON 본문
# 학습 목표
- 구조화된 데이터를 표현하는 방식을 학습한다.
- XML, JSON, YAML의 차이점을 이해한다.
- 데이터를 YAML 형식으로 표현할 수 있다.
- 간단한 YAML 문법을 학습한다.
- 데이터를 표현하는 키-값 형태를 이해한다.
- Array, Dictionary 등의 구조를 이애한다.
- 작성된 데이터가 여러 줄일 때, 표현하는 방식을 학습한다.
- 간단한 YAML 문법을 학습한다.
- 스프린트를 통해 데이터를 보고 YAML 형식으로 작성하여 실습한다.
# 학습 내용
목차
1. YAML Ain't Markup Language
2. 대표적인 데이터 교환 포맷 JSON
1. YAML Ain't Markup Language
YAML: YAML Ain't Markup Language
- 구조를 가진 데이터 표현 양식의 한 종류
- JSON, XML도 동일한 데이터 표현 양식의 한 종류
- 데이터 주고 받을 때 서로 쉽게 이해하기 위함
- 확장자 : .yml .yaml
YAML 문법
1. 데이터 정의
- 형태 : key: value 형태
> 콜론(:) 뒤에는 키와 값을 구분하기 위해 반드시 공백 문자가 있어야 함
- 사용 가능한 데이터 타입 : Number, String, Boolean
> 문자열에 \n, @ 등 특수 문자가 포함된 경우에만 따옴표를 (" ") 사용해 작성
- 주석 : #
2. Array / Lists
- 배열 리스트 구조 표현 시 -, [ ] 사용
> - : 배열의 한 요소를 나타냄
> [ ] : 대괄호 안의 요소가 문자열일 경우 " " 사용
- 요소의 순서 중요
# 아래 두 YAML 은 다른 파일
# 1번
Fruits:
- Orange
- Apple
- Banana
Vegetables:
- Carrot
- Lettuce
# 2번
Fruits:
- Apple
- Orange
- Banana
Vegetables:
- Lettuce
- Carrot
3. Dictionary / Map
- 계층 구조를 표현하고 싶을 경우 2칸, 4칸의 들여쓰기를 사용하며 각 아이템에 대해 꼭 같은 수의 공백 문자를 사용해야 함
- 요소의 순서가 중요하지 않음
Fruits:
Name: Apple
Quantity: 5
Origin: Seoul
Vegetables:
Name: Peppermint
Quantity: 10
Origin: Paju
4. Advanced
- 데이터 구조를 섞어 사용 가능
- YAML 형태와 JSON 형태의 데이터 구조 비교
# YAML
Fruits:
- Banana:
Calories: 105
Fat: 0.4g
Carbs: 27g
- Grape:
Calories: 62
Fat: 0.3g
Carbs: 15g
# JSON
{
"Fruits": [
{
"Banana": {
"Calories": 105,
"Fat": "0.4g",
"Carbs": "27g"
}
},
{
"Grape": {
"Calories": 62,
"Fat": "0.3g",
"Carbs": "25g"
}
}
]
}
5. Multi-lines
- 값으로 여러 행의 문장을 작성할 경우 기본적으로 \n을 사용
example: "this is multiline string \n and this is nextline \n and nextline \n"
- |, > 을 사용해 줄바꿈도 가능
> > : 한 줄을 모두 비웠을 때만 줄바꿈으로 인식하고, 그냥 줄바꿈을 할 때에는 공백 문자로 인식
#YAML
example1: >
this is multiline string
and this is nextline
and nextline
example2: >
this is multiline string
and this is nextline
and nextline
#JSON
{
"example1": "this is multiline string and this is nextline and nextline\n"
}
{
"example2": "this is multiline string \nand this is nextline and nextline\n"
}
> | : 모든 줄바꿈을 인식하며 마지막 문장의 끝도 마찬가지로 줄바꿈으로 인식
#YAML
example1: |
this is multiline string
and this is nextline
and nextline
#JSON
{
"example1": "this is multiline string \nand this is nextline \nand nextline\n"
}
2. 대표적인 데이터 교환 포맷 JSON
JSON의 탄생 배경
- JavaScript Object Notation
- 데이터 교환을 위해 만들어진 객체 형태의 포맷
JSON이 필요한 예시
const message = {
sender: "김코딩",
receiver: "박해커",
message: "해커야 오늘 저녁 같이 먹을래?",
createdAt: "2021-01-12 10:10:10"
}
- 객체 전송을 위한 조건
> 수신자(reciever)와 발신자(sender)가 같은 프로그램을 사용 or 문자열처럼 범용적으로 읽을 수 있어야 함
- 객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않음
> (ex) message.toString, String(message) 시 [object Object] 리턴
∴ 객체를 JSON 형태로 변환하거나 JSON을 객체 형태로 변환하여 해결
JSON과 관련한 메소드
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage) // `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) // `string`
JSON.stringify - 직렬화를 통해 객체를 문자열로 변환
- Object type을 JSON으로 변환
JSON.parse - 역직렬화를 통해 문자열을 객체로 변환
- JSON을 Object type으로 변환
let packet = `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
let obj = JSON.parse(packet)
console.log(obj)
/*
* {
* sender: "김코딩",
* receiver: "박해커",
* message: "해커야 오늘 저녁 같이 먹을래?",
* createdAt: "2021-01-12 10:10:10"
* }
*/
console.log(typeof(obj))
// `object`
JSON의 기본 규칙
자바스크립트 객체 | JSON | |
키 | 키는 따옴표 없이 쓸 수 있음 | 반드시 큰 따옴표를 부텽야 함 |
문자열 값 | 문자열 값은 어더한 형태의 따옴표도 사용 가능 | 반드시 큰 따옴표로 감싸야 함 |
비고 | - | 키와 값 사이, 키-값 쌍 사이에 공백이 있으면 안 됨 |
Action Items
JSON과 XML
구조
- XML: 태그(tag)를 사용하여 데이터를 계층적으로 표현. 태그는 시작 태그와 종료 태그로 이루어져 있고, 계층적으로 중첩되어 데이터의 구조를 표현
- JSON: 중괄호({})와 대괄호([])를 사용하여 데이터를 표현하는데, 중괄호는 객체(object)를, 대괄호는 배열(array)을 나타냄
가독성
- XML : 태그들이 중첩되어 복잡하게 구조화되기 때문에 가독성이 떨어지고, 데이터의 크기가 크기 때문에 전송에 비효율적일 수 있음
- JSON : 사람이 읽고 쓰기에 용이하며, 데이터의 크기가 작아서 효율적인 전송이 가능
데이터 타입
- XML : 데이터 타입이나 스키마를 명시적으로 정의할 수 있어, 데이터의 유효성을 검증하기 용이
- JSON : 데이터 타입이나 스키마를 명시적으로 정의하기 어렵기 때문에, 데이터의 유효성 검증이 상대적으로 어려움
확장성
- XML : 태그를 사용하여 확장성이 높은 데이터 구조를 표현 가능
- JSON : 태그 대신 키-값 쌍을 사용하기 때문에, 확장성이 XML에 비해 상대적으로 낮음
데이터 처리
- XML : 파싱이 복잡하고 처리가 비교적 번거로워서 데이터 처리에 높은 비용이 발생 가능
- JSON : 파싱이 간단하고 처리가 용이하여 데이터 처리에 효율적
언어 지원
- XML : 태그를 사용하기 때문에, 다양한 언어에서 사용 가능
- JSON : 자바스크립트 객체 표기법이므로 자바스크립트를 비롯한 몇몇 프로그래밍 언어에서 지원
텍스트 형식의 데이터 교환 포맷과 이진 형식의 데이터 교환 포맷의 차이점과 장단점
텍스트 형식의 데이터 교환 포맷
- 데이터를 텍스트로 표현하는 방식
- 대표적인 예 : XML (eXtensible Markup Language), JSON (JavaScript Object Notation), CSV (Comma-Separated Values) 등
- 텍스트 형식의 데이터 교환 포맷은 사람이 읽고 이해하기 쉽고, 다양한 프로그래밍 언어나 플랫폼에서 지원되는 보편적인 형식
- 텍스트 형식의 데이터는 텍스트 편집기를 통해 직접 편집이 가능하고, 디버깅이 용이하며, 버전 관리 시스템 등의 형상 관리 도구와 함께 사용하기 편리
- 텍스트 형식은 데이터의 크기가 크거나 복잡한 구조를 가질 경우에는 용량이 크고, 데이터를 직렬화하고 역직렬화하는 과정에서 오버헤드가 발생 가능
- 텍스트로 표현되기 때문에 데이터의 전송 속도가 상대적으로 느릴 수 있음
이진 형식의 데이터 교환 포맷
- 데이터를 이진 형태로 표현하는 방식
- 대표적인 예 : Protocol Buffers, MessagePack, BSON (Binary JSON) 등
- 텍스트 형식보다 용량이 작고, 직렬화와 역직렬화 과정에서 오버헤드가 적어 전송 속도가 빠름
- 이진 형식은 특정 언어나 플랫폼에 종속되는 경우가 많아, 다양한 환경에서 지원이 제한될 수 있음
- 이진 형식은 사람이 읽고 이해하기 어렵고, 직접 편집이 불가능하며, 디버깅이 복잡할 수 있습니다. 또한, 버전 관리 시스템 등의 형상 관리 도구와 함께 사용하기 어려울 수 있음
# References
챗GPT
The Official YAML Web Site
yaml.org
YAML Ain’t Markup Language (YAML™) revision 1.2.2
yaml.org
JSON
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language Standard ECMA-262 3rd Edition
www.json.org
'devops bootcamp 4 > 클라우드 서비스 운영' 카테고리의 다른 글
[Docker] 02. Docker CLI (0) | 2023.04.12 |
---|---|
[Docker] 01. 왜 Docker인가? (0) | 2023.04.11 |
[Docker] 00. Before You Learn (0) | 2023.04.11 |
[네트워크 기초] 02. 아키텍처를 구성하는 요소들 (0) | 2023.04.07 |
[네트워크 기초] 01. OSI 7계층과 TCP/IP 4계층 (0) | 2023.04.06 |