구조를 가진 데이터의 표현 양식중 하나, 데이터를 형식에 맞춰 사용하여 데이터를 주고받을 때 서로 이해하게 하기 위해서 사용함
YAML에서는 기본적으로 [key : value] 형태로 데이터를 정의합니다. 이때 : 뒤에는 키와 값을 구분하기위해 꼭 공백을 두어야합니다.
사용가능한 타입은 Numver, String, Boolean이있고, 문자열뒤에 \n , @ 등의 특수 문자가 포함된 경우에는 쌍따음표(" , ")를 사용하여 작성하여야 합니다.
Boolean값은 True/False 외에 On/Off 나 Yes/No로도 작성 가능합니다.
#주석
Fruit: Apple
Quantity: 5
Origin: Chungju
위와같이 주석을 사용할때에는 #을 사용합니다.
배열 혹은 리스트 구조를 표현할때에는 앞에 -를 붙여 사용합니다. -는 배열의 한요소를 가리킵니다. 이때 각 요소들은 순서가 중요합니다.
#1번
Fruits:
- Orange
- Apple
- Banana
#2번
Fruits:
- Apple
- Orange
- Banana
값이 동일하게 들어있지만, 순서가 다르므로 1번,2번은 같은 YAML파일이 아닙니다.
계층 구조를 표현하고 싶은 경우에는 기본적으로 2칸, 4칸의 들여쓰기를 사용합니다. 들여쓰기를 할 때에는 각 아이템에 대해서 꼭 같은 수의 공백문자를 사용하여야합니다. 위의 Array/List 형식과는 다르게 요소들의 순서는 중요하지 않습니다.
#YAML
Fruits:
Name: Apple
Quantity: 5
Origin: Chungju
Vegetables:
Name: Lettuces
Quantity: 10
Origin: Daekwan
위의 Name, Quantity, Origin은 각각 Fruits와 Vegetables에 속하는 것을 나타내기위에 들여쓰기를 잘해주여야합니다.
위의 데이터 형식을 혼합하여 사용도 가능합니다.
#YAML
Fruits:
- Banana: #Array/List
Calories: 105 #Dictionary / Map
Fat: 0.4g
Carbs: 27g
- Grape: #Array/List
Calories: 62 #Dictionary / Map
Fat: 0.3g
Carbs: 15g
값으로 여러 행의 문장을 작성할 때에는 기본적으로 \(역슬래쉬)n 을 사용합니다. 예를 들면 다음과 같습니다.
example: "kim \n han \n su"
다른 옵션으로는 > 와 | 가 있습니다.
>는 한줄을 모두 비웠을 때만 줄바꿈으로 인식하고, 그냥 줄바꿈을 할 때에는 공백 문자로 인식합니다.
#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"
}
JSON은 JavaScript Object Notation 의 줄임말로, 데이터의 교환을 위해 만들어진 객체 형태의 포맷입니다.
const message = {
sender: "김코딩",
receiver: "박해커",
message: "해커야 오늘 저녁 같이 먹을래?",
createdAt: "2021-01-12 10:10:10"
}
위의 예를 보면, message로 값을 넣어 데이터를 주고 받습니다.
전송가능한 조건은 다음과 같습니다.
주의 : 객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않습니다. JavaScript에서 객체에 메소드( message.toString())나 형변환( String(message))을 시도하면, [object Object] 라는 결과를 리턴합니다. 이문제를 해결하려면 아래와같은 메소드를 이용하여야합니다.
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage) // `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) // `string`
stringify하는 이러한 과정을 직렬화 라고 합니다.
JSON.stringify(직렬화)의 정반대의 기능을 수행하는 JSON.parse를 사용하여 객체의 형태로 변환합니다. 아래는 parse의 예시입니다.
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.parse를 적용하는 이과정을 역직렬화 라고 합니다.
다음은 JSON의 기본 규칙입니다.
JSON은 자바스크립트의 객체와 별반 다를 바 없어보이지만, 자바스크립트의 객체와는 미묘하게 다른 규칙이 있습니다.
이외에도 JSON은 키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 있어서는 안됩니다.
Chapter 11, AWS[작성중] (0) | 2023.04.19 |
---|---|
Chapter 10, 도커[작성중] (0) | 2023.04.19 |
Chapter 8, 데이터 베이스의 기초(OSI 7 계층 및 TCP/IP 4계층) (0) | 2023.04.06 |
Chapter 7, 데이터베이스 문제 상황에 따른 해결책 (0) | 2023.03.29 |
Chapter 7, 데이터베이스 기초 (0) | 2023.03.29 |