JSON XML YAML

seyeon·2025년 4월 7일

데이터 직렬화 형식?
처음 들어본 형식이다,, 🧐

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 🧐

JSON은 JavaScript Object Notation의 줄임말으로, 말 그대로 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.

  • 사람과 기계가 모두 읽기 쉬운 텍스트 기반 형식, 간단한 포맷
  • JSON은 키:값의 형태로 이뤄져 있으며, 가장 상위 레벨은 {}으로 감싼다.
  • 웹 API와의 통신에 널리 사용되며, 다양한 프로그래밍 언어에서 지원된다.
  • 자바스크립트의 문법과 굉장히 유사하지만, 텍스트 형식일 뿐이다.
  • 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용된다.
  • 과거에는 데이터를 포맷할 수 있는 방식 중에 XML이 지배적이었지만, 요즘은 JSON도 거의 비슷한 사용 횟수를 보이고 있다.
{
  "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"
    }
  ]
}

장점 👍

  • 저장 용량을 적게 차지한다
  • 파싱이 간편
  • 처리 속도가 빠르다
  • 사용하기 쉽다
  • 가독성이 좋다

단점 👎

  • 문법 오류에 취약
  • 구조가 단순해서 복잡한 데이터 표현이 어려움

XML

eXtensible Markup Language의 약자로, 웹 사이트, 데이터베이스, 어플리케이션 등과 같은 컴퓨터 시스템 간 정보 교환에 사용되거나, 문서를 구조화하여 정리하는 용도 등으로 사용된다.

  • 데이터를 저장하고 전송하는 데 사용되는 마크업 언어
  • HTML과 유사한 구조를 가지고 있으나, HTML이 웹 페이지의 구조와 디자인을 정의하는 데 주로 사용되는 반면, XML은 데이터의 구조와 의미를 정의하는 데 초점을 맞춤
  • 목적에 따라 태그를 직접 정의할 수 있기 때문에 자유로운 형식으로 유연하게 구조화된 문서를 만들 수 있음
  • XML은 플랫폼과 독립적이며, 데이터를 소프트웨어와 하드웨어 사이에서 쉽게 공유할 수 있도록 설계되었음
  • 웹 서비스에서 데이터를 교환할 때 JSON과 함께 널리 사용되며, 복잡한 데이터 구조를 표현하는 데 용이
  • XML은 데이터를 계층적으로 구조화하고 태그로 둘러싸서 각 데이터의 의미를 명확하게 전달한다.
  • XML 문서는 요소(element), 속성(attribute), 텍스트 데이터(text data), 주석(comment), 처리 명령(processing instruction) 등으로 구성된다.
<!-- 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>

장점 👍

  • 데이터 구조를 계층적으로 표현할 수 있음
  • 메타데이터를 포함할 수 있어 데이터 설명에 유용
  • 문서 형식으로 표현할 수 있어 문서 교환에 적합하다

단점 👎

  • XML은 파일 크기가 크고, 파싱(parsing) 시간이 오래 걸릴 수 있다.
  • 태그가 많아 무겁고 복잡함
  • JSON에 비해 비효율적이다.
  • JSON처럼 객체를 자유롭게 표현하기 어렵다.

YAML 🧐

Yet Another Markup Language의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어를 의미함

  • YAML은 쉽게 읽고 이해할 수 있도록 설계되어 있다.
  • 파일로 작성시 확장자는 .yaml 혹은 .yml 확장자를 가진다.
  • 다른 프로그래밍 언어와 함께 사용할 수도 있다.
  • 주로 설정 파일이나 데이터 교환에 사용되며, JSON과 유사하지만 더 간결하고 직관적이다.
  • 들여쓰기를 사용하여 계층 구조를 표현하며, 복잡한 구조를 간단하고 보기 좋게 작성할 수 있다.
#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

장점 👍

  • JSON과 비교하여 구조가 간단하고 사람이 읽기 쉬운 형태로 작성할 수 있다.
  • 들여쓰기를 사용하여 계층 구조를 명확하게 표현한다.
  • 중괄호 {}나 대괄호 [] 대신 들여쓰기를 사용하여 코드가 더 깔끔하다.
  • JSON, XML과 달리 데이터 형식을 유연하게 다룰 수 있다.

단점 👎

  • 들여쓰기로 계층 구조를 표현하다 보니, 들여쓰기 오류가 발생하면 파싱이 되지 않는다.
  • 복잡한 구조 표현이 어려움(간단한 데이터에는 적합하지만, 복잡한 중첩 구조를 표현할 때는 오히려 가독성이 떨어진다.)
  • JSON이나 이진 형식에 비해 처리 속도가 느리다.

어떤 경우에 쓸까? 💁‍♀️

API 통신: JSON (가볍고 빠름)
데이터 저장: JSON (구조가 간단하고 직렬화 쉬움)
대용량 데이터 전송: JSON (텍스트 기반이지만 가볍고 효율적)

문서 교환: XML (구조화된 문서에 유리)
웹 서비스 (SOAP): XML (엄격한 구조와 데이터 검증 가능)
복잡한 데이터 구조: XML (계층적 구조 표현에 유리)

설정 파일: YAML (가독성 좋음, 사람이 직접 수정하기 쉬움)
CI/CD 파이프라인: YAML (직관적이고 수정이 쉬움)
인프라 설정: YAML (구성 관리 도구와 잘 맞음)

정리해보자면!

0개의 댓글