π YAML μ ꡬ쑰λ₯Ό κ°μ§ λ°μ΄ν° νν μμ μ ν μ’ λ₯μ΄λ€.
λ°μ΄ν°λ λ€μν ννλ‘ ννλ μ μλλ° μΌλ°μ μΌλ‘ μ¬μ©νλ JSON μ΄λ XMLλ νν μμμ ν μ’ λ₯μ΄λ€.
λ°μ΄ν°λ₯Ό νμμ λ§μΆ° μ¬μ©νλ μ΄μ λ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λ μλ‘ μ΄ν΄νκ² νκΈ° μν΄μ μ΄λ€.
YAML μ μ΅κ·Ό λ€μ΄ λ§μ΄ νμ©λκ³ μλ λ°μ΄ν° νμμ΄λ©°, μ¬λμ΄ μ½κ³ μ΄ν΄νκΈ° μ¬μ΄ ννλ₯Ό κ°μ§κ³ μλ€. DevOps μ§κ΅°μμλ λ€μν μ€μ νμΌλ€μ YAML νμμΌλ‘ μμ±νλ κ²½μ°κ° λ§λ€. μ΄λ νμΌ νμ₯μλ .yml λλ .yaml μ μ¬μ©νλ€.
YAML μ κΈ°λ³Έμ μΌλ‘ λ°μ΄ν°λ₯Ό μ μ ν λ, key: value ννλ‘ λ°μ΄ν°λ₯Ό μ μνλ€. μ΄ λ μ½λ‘ : λ€μλ ν€μ κ°μ ꡬλΆνκΈ° μν΄ βοΈλ°λμ 곡백문μ(whitespace)βοΈκ° μμ΄μΌ νλ€.
μ¬μ© κ°λ₯ν λ°μ΄ν° νμ μΌλ‘λ Number, String, Booleanμ΄ μμΌλ©°, λ¬Έμμ΄(String)μ \n , @ λ±μ νΉμ λ¬Έμκ° ν¬ν¨λ κ²½μ°μλ§ λ°μ΄ν(" ")λ₯Ό μ¬μ©νμ¬ μμ±νλ€.
#μ£Όμ
Fruit: Apple
Quantity: 5
Origin: Chungju
κ·Έ λΏλ§ μλλΌ YAML νμΌμμ μ£Όμμ μμ±ν΄μΌ ν λλ ν΄λΉ μ€μ 맨 μμ # μ μ λ ₯νλ€.
λ°°μ΄μ΄λ 리μ€νΈ ꡬ쑰μ λ°μ΄ν°λ₯Ό νννκ³ μΆμ λλ - μ μ¬μ©νλ€. - λ λ°°μ΄μ ν μμλ₯Ό κ°λ¦¬ν¨λ€.
μ΄ λ κ° π μμλ€μ μμκ° μ€μνλ° μλμ λ΄μ©μ 1λ²κ³Ό 2λ²μ κ°κΈ° λ€λ₯Έ YAML νμΌμ΄λ€.
λν - λ₯Ό μ΄μ©νμ Array/List λ₯Ό ννν μ λ μμ§λ§, κ°μ μλ―Έλ‘ [ ] λ μ¬μ©λλ€. [ ] κ° μ¬μ©λ κ²½μ°, λκ΄νΈ μμ μμκ° λ¬Έμμ΄(String) λΌλ©΄ " " λ₯Ό μ¬μ©νλ€.
κ³μΈ΅ ꡬ쑰λ₯Ό νννκ³ μΆμ κ²½μ°, κΈ°λ³Έμ μΌλ‘ 2μΉΈ νΉμ 4μΉΈμ λ€μ¬μ°κΈ°λ₯Ό μ¬μ©νλ€. λ€μ¬μ°κΈ°λ₯Ό μ¬μ©ν λ, κ° μμ΄ν μ λν΄μ κΌ κ°μ μμ 곡백문μλ₯Ό μ¬μ©νμ¬ λ€μ¬μ°κΈ°λ₯Ό ν΄μΌνλ€. μμ Array/List νμκ³Όλ λ€λ₯΄κ² μμλ€μ μμκ° μ€μνμ§ μλ€.
Fruits:
Name: Apple
Quantity: 5
Origin: Chungju
Vegetables:
Name: Lettuces
Quantity: 10
Origin: Daekwan
μμ μμμμ Name, Quantity, Origin μ κ°μ μλ§νΌμ λ€μ¬μ°κΈ°λ₯Ό νκΈ° λλ¬Έμ κ°μ κ³μΈ΅μΌλ‘ κ°κ° Fruits μ Vegetables μ μνλ€.
μ΄μ κ°μ΄ λ€μ¬μ°κΈ°λ₯Ό ν΅ν΄ μ΄λ€ κ³μΈ΅μ μνλμ§ λ¬λΌμ§κΈ° λλ¬Έμ λ€μ¬μ°κΈ°λ₯Ό μ£Όμν΄μΌ νλ€.
μμ λ°μ΄ν° ꡬ쑰λ₯Ό μμ΄μ μ¬μ©ν μλ μλ€. μλμ μμλ Dictionary ꡬ쑰λ₯Ό ν¬ν¨νκ³ μλ λ°°μ΄μ ννλ₯Ό νννκ³ μλ€. λλΆμ΄ 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": {
"Caloreis": 62,
"Fat": "0.3g",
"Carbs": "15g"
}
}
]
}
κ°μΌλ‘ μ¬λ¬ νμ λ¬Έμ₯μ μμ±ν λ κΈ°λ³Έμ μΌλ‘ \n μ μ¬μ©νλ€.
νμ§λ§ \n μ μ¬μ©νμ§ μκ³ |, > λ₯Ό μ¬μ©νμ¬ μ€λ°κΏμ ν μλ μλ€.
> : μ΄ λ¬Έμλ ν μ€μ λͺ¨λ λΉμ μ λλ§ μ€λ°κΏμΌλ‘ μΈμμ
νκ³ , κ·Έλ₯ μ€λ°κΏμ ν λμλ 곡백문μλ‘ μΈμνλ€.
| : μ΄ λ¬Έμλ λͺ¨λ μ€λ°κΏμ μΈμνλ©°, λ§μ§λ§ λ¬Έμ₯μ λλ
λ§μ°¬κ°μ§λ‘ μ€λ°κΏμΌλ‘ μΈμνλ€.
JSONμ JavaScript Object Notation μ μ€μλ§λ‘, λ°μ΄ν° κ΅νμ μν΄ λ§λ€μ΄μ§ κ°μ²΄ ννμ ν¬λ§· μ΄λ€. λ€νΈμν¬λ₯Ό ν΅ν΄, μ΄λ€ κ°μ²΄ λ΄μ©μ λ€λ₯Έ νλ‘κ·Έλ¨μκ² μ μ‘νλ€κ³ κ°μ ν λ μ΄ κ°μ²΄ λ΄μ©μ μΌμ’ μ λ©μ μ νΉμ μ±ν νλ‘κ·Έλ¨μμ μ°λ νλμ λ©μμ§λΌκ³ νλ€λ©΄, λ€μ κ°μ²΄λ₯Ό μ΄λ»κ² μ μ‘ν κΉ?
const message = {
sender: "κΉμ½λ©",
receiver: "λ°ν΄μ»€",
message: "ν΄μ»€μΌ μ€λ μ λ
κ°μ΄ λ¨Ήμλ?",
createdAt: "2021-01-12 10:10:10"
}
λ©μμ§ κ°μ²΄κ° μ μ‘ κ°λ₯νλ €λ©΄, λ©μμ§λ₯Ό 보λ΄λ λ°μ μμ λ©μμ§λ₯Ό λ°λ μμ μκ° κ°μ νλ‘κ·Έλ¨μ μ¬μ©νκ±°λ, λ¬Έμμ΄μ²λΌ λ²μ©μ μΌλ‘ μ½μ μ μλ ννμ¬μΌ νλ€.
μ μ‘ κ°λ₯ν 쑰건(transferable condition)
- μμ μ(reciever)μ λ°μ μ(sender)κ° κ°μ νλ‘κ·Έλ¨μ μ¬μ©.
- λλ, λ¬Έμμ΄ μ²λΌ λ²μ©μ μΌλ‘ μ½μ μ μμ΄μΌ νλ€.
κ°μ²΄λ νμ λ³νμ μ΄μ© String μΌλ‘ λ³νν κ²½μ° κ°μ²΄ λ΄μ©μ ν¬ν¨νμ§ μλλ€. JavaScript μμ κ°μ²΄μ λ©μλ(message.toString()) λ νλ³ν(String(message)) μ μλνλ©΄, [object object] λΌλ κ²°κ³Όλ₯Ό 리ν΄νλ€.
βμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ κ°μ²΄λ₯Ό JSON ννλ‘ λ³ννκ±°λ JSON κ°μ²΄μ ννλ‘ λ³ννλ λ°©λ²μ΄λ€.
- JSON.stringify : Object typeμ JSONμΌλ‘ λ³ν
- JSON.parse : JSONμ Object typeμΌλ‘ λ³ν
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage) // `{"sender":"κΉμ½λ©","receiver":"λ°ν΄μ»€","message":"ν΄μ»€μΌ μ€λ μ λ
κ°μ΄ λ¨Ήμλ?","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) // `string`
[μ½λ] message κ°μ²΄λ₯Ό JSONμΌλ‘ λ³ννλ λ©μλ
JSON.stringify
stringifyνλ μ΄ κ³Όμ μ μ§λ ¬ν(serialize)νλ€κ³ νλ€.
JSON μΌλ‘ λ³νλ κ°μ²΄μ νμ μ λ¬Έμμ΄μ΄λ€. λ°μ μλ κ°μ²΄λ₯Ό μ§λ ¬νν λ¬Έμμ΄μ λκ΅°κ°μκ² κ°μ²΄μ λ΄μ©μ λ³΄λΌ μ μλ€. κ·Έλ λ€λ©΄ μμ μλ μ΄ λ¬Έμμ΄ λ©μμ§λ₯Ό μ΄λ»κ² λ€μ κ°μ²΄μ ννλ‘ λ§λ€ μ μμκΉ?
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.parse λ₯Ό μ μ©νλ©΄ λ€μ κ°μ²΄μ ννλ‘ λ³νν μ μλ€.
JSON.parseλ₯Ό μ μ©νλ μ΄ κ³Όμ μ μμ§λ ¬ν(deserialize)νλ€κ³ νλ€.
μ΄μ²λΌ, JSON μ μλ‘ λ€λ₯Έ νλ‘κ·Έλ¨ μ¬μ΄μμ λ°μ΄ν°λ₯Ό κ΅ννκΈ° μν ν¬λ§·. κ·Έλ¦¬κ³ JSON ν¬λ§·μ μλ°μ€ν¬λ¦½νΈλ₯Ό ν¬ν¨ν λ§μ μΈμ΄μμ λ²μ©μ μΌλ‘ μ¬μ©νλ μ λͺ ν ν¬λ§·μ΄λ€.
JSONμ κΈ°λ³Έ κ·μΉ
JSONμ μΌν 보기μ μλ°μ€ν¬λ¦½νΈμ κ°μ²΄μ λ³λ° λ€λ₯Ό λ°κ° μμ΄ λ³΄μ΄μ§λ§, μλ°μ€ν¬λ¦½νΈμ κ°μ²΄μλ λ―Έλ¬νκ² λ€λ₯Έ κ·μΉμ΄ μλ€.