데이터 직렬화 형식?
처음 들어본 형식이다,, 🧐
json, yaml, xml... 이것들은 데이터를 직렬화할 때 사용하는 데이터 형식 중 하나이다.
(구조화된 정보를 주는 쪽과 받는 쪽이 의도에 맞게 잘 주고받기 위해서는 양측 사이에 잘 설계되어 합의된 어떤 형식)
그렇다면 이 데이터 직렬화는 무엇이며 왜 필요할까?

데이터 직렬화(serialization)이란 메모리의 데이터를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 말한다.
1) 컴퓨터가 쉽게 이해할 수 있는 0과 1의 디지털 형식으로 된 이진(binary) 방식
2) 사람이 쉽게 읽을 수 읽는 형태로 직렬화하는 텍스트 방식
XML, JSON, YAML 같은 형식은 텍스트 형식 직렬화이고,
한글의 HWP 파일, 워드의 DOC 혹은 DOCX 파일, 이미지를 위한 JPG, PNG, GIF 같은 형식들, 오디오를 위한 WAV, MP3, OGG, AAC 같은 형식들, 영상을 위한 AVI, MOV, MP4와 같은 형식들은 이진 방식 직렬화다.
역직렬화(deserialization)이란 그 반대 개념으로, 디스크나 네트워크에서 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다.
그렇다면 이게 왜 필요할까?
다양한 환경에서 데이터를 주고받기 위해서이다.
컴퓨터 프로그램끼리 데이터를 주고받을 때, 서로 이해할 수 있는 공통된 형태로 변환해서 주고 받아야 하는데 이때 데이터를 문자열로 바꿔서 저장하거나 전송할 수 있도록 만드는 것이 직렬화이다
마치 서로 다른 언어를 쓰는 사람들끼리 소통할 때 공통 언어(ex> 영어)를 쓰는 것과 비슷하다.
프로그램끼리 데이터를 주고받을 때도 공통 언어가 필요한데, 그게 바로 JSON, XML, YAML 같은 형식이다.
그렇다면 이제 JSON, XML, YAML에 대해서 자세히 공부해보자
JSON은 JavaScript Object Notation의 줄임말으로, 말 그대로 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.
{
"employees": [
{
"id": 1,
"first_name": "Sebastian",
"last_name": "Eschweiler",
"email": "sebastian@codingthesmartway.com"
},
{
"id": 2,
"first_name": "Steve",
"last_name": "Palmer",
"email": "steve@codingthesmartway.com"
},
{
"id": 3,
"first_name": "Ann",
"last_name": "Smith",
"email": "ann@codingthesmartway.com"
}
]
}
eXtensible Markup Language의 약자로, 웹 사이트, 데이터베이스, 어플리케이션 등과 같은 컴퓨터 시스템 간 정보 교환에 사용되거나, 문서를 구조화하여 정리하는 용도 등으로 사용된다.
<!-- XML 주석 -->
<?xml version="1.0" encoding="UTF-8"?>
<TITLE color="red" type="bold">내용</TITLE>
<users>
<user>
<name>홍길동</name>
<score>95</score>
<hobby>
<element>Soccer</element>
<element>Ninza</element>
</hobby>
</user>
<user>
<name>이순신</name>
<score>100</score>
<hobby>
<element>Sing</element>
<element>Dancing</element>
</hobby>
</user>
</users>

Yet Another Markup Language의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어를 의미함
#Comment: Student record
#Describes some characteristics and preferences
---
name: Martin D'vloper #key-value
age: 26
hobbies:
- painting #first list item
- playing_music #second list item
- cooking #third list item
programming_languages:
java: Intermediate
python: Advanced
javascript: Beginner
favorite_food:
- vegetables: tomatoes
- fruits:
citrics: oranges
tropical: bananas
nuts: peanuts
sweets: raisins
API 통신: JSON (가볍고 빠름)
데이터 저장: JSON (구조가 간단하고 직렬화 쉬움)
대용량 데이터 전송: JSON (텍스트 기반이지만 가볍고 효율적)
문서 교환: XML (구조화된 문서에 유리)
웹 서비스 (SOAP): XML (엄격한 구조와 데이터 검증 가능)
복잡한 데이터 구조: XML (계층적 구조 표현에 유리)
설정 파일: YAML (가독성 좋음, 사람이 직접 수정하기 쉬움)
CI/CD 파이프라인: YAML (직관적이고 수정이 쉬움)
인프라 설정: YAML (구성 관리 도구와 잘 맞음)

끗