JSON 직렬화와 역직렬화

김세빈·2025년 4월 1일

CS

목록 보기
1/22

JSON이란?

JSON(JavaScript Object Notation)은 데이터를 교환하기 위한 경량의 포맷으로, 자바스크립트 객체 문법을 차용해서 구조화된 데이터를 표현하는 방식입니다. 하지만 이름에 ‘JavaScript’가 들어 있음에도 언어와 플랫폼에 독립적으로 사용할 수 있다는 점이 가장 큰 특징입니다.


JSON의 특징

  1. 키(key)와 값(value) 쌍으로 구성된 오브젝트 형태를 가진다.
    {
      "name": "홍길동",
      "age": 20
    }
  2. 배열 형태도 가능하다.
    [1, 2, 3, "hello", true]
  3. 문자열(String), 숫자(Number), 부울(Boolean), null 등을 포함하지만,
    • undefined나 함수(() => {}) 같은 자바스크립트 특유의 요소는 JSON에서 사용할 수 없다.
  4. 플랫폼 및 언어에 독립적으로 쓰인다.

주의: 자바스크립트 객체(Object)와 헷갈리면 안 됩니다.
JSON은 단순히 데이터를 담는 문자열 포맷이며, 자바스크립트 객체와 형태는 유사하지만 실제로는 별개입니다.


JSON이 데이터 교환형식으로서 중요한 이유

  • 데이터는 추상적인 아이디어, 실험, 조사, 관찰 등을 통해 얻은 사실 혹은 자료를 말합니다.
  • 이 데이터를 여러 시스템 간에 교환하려면, 한 가지 규칙(포맷)으로 일관되게 표현해야 합니다.
  • JSON은 가볍고 사람이 읽기 쉬우며, 많은 언어에서 기본 라이브러리로 지원하기 때문에 가장 많이 쓰이는 방식 중 하나입니다.

JSON의 활용

  1. 웹 API 통신:
    서버와 클라이언트가 데이터를 주고받을 때 JSON 형태를 주로 사용합니다.
  2. 구성(Configuration) 파일:
    프로젝트 설정, 웹 서비스 환경 설정 등을 JSON으로 관리하기도 합니다.
  3. 데이터 저장:
    간단한 구조의 데이터는 JSON 파일로 영구 저장하기도 합니다.

JSON 파싱(Parsing)

JavaScript에서

const jsonString = '{"name": "홍길동", "age": 20}';
const obj = JSON.parse(jsonString);

console.log(obj.name); // "홍길동"
console.log(obj.age);  // 20
  • JSON.parse()JSON 문자열자바스크립트 객체로 변환해준다.
  • 반대로, 자바스크립트 객체를 JSON 문자열로 바꾸려면 JSON.stringify()를 사용합니다.

Python에서

import json

json_str = '{"name": "홍길동", "age": 20}'
obj = json.loads(json_str)  # dict로 변환

print(obj["name"])  # "홍길동"
print(obj["age"])   # 20
  • json.loads()는 JSON 문자열을 파이썬 딕셔너리(dict)로 변환합니다.
  • 반대로 딕셔너리를 JSON 문자열로 만들 때는 json.dumps() 함수를 사용합니다.

JSON 스키마와 타입

JSON은 구조화된 데이터를 표현하기에 스키마(Schema)를 어떻게 설계하느냐가 중요합니다.

  • 어떤 키가 들어가고
  • 어떤 타입의 값이 들어가는지
    명확히 정의해 주어야 합니다.

유니온 타입(Union Type)은 뭘까?

자바스크립트/타입스크립트 관점에서, 유니온 타입이란 값이 여러 가지 타입 중 하나일 수 있음을 의미합니다. 예를 들어,

type Status = "success" | "fail" | "pending";

Status 타입은 "success", "fail", "pending" 중 하나가 될 수 있습니다.

JSON을 설계할 때도, 특정 키가 여러 타입을 가질 수 있도록 설계될 수 있는데, 이는 문서나 스키마에서 유연성과 복잡성을 동시에 증가시킵니다. 따라서 스키마 설계를 잘 해야 JSON을 사용하는 모든 곳에서 혼동 없이 데이터를 핸들링할 수 있어요.


JSON과 자바스크립트 객체의 차이점

  • JSON: 문자열 기반의 데이터 포맷
    { "name": "홍길동" }
  • 자바스크립트 객체: 실제 동작하는 프로퍼티, 메서드를 가질 수 있는 ‘실체’
    { name: "홍길동", sayHello: () => console.log("Hello!") }
  • undefined나 함수 같은 요소는 JSON에 포함할 수 없음.

결론

  • JSON언어와 플랫폼에 독립적으로 데이터를 교환할 수 있는 포맷입니다.
  • 자바스크립트와 유사한 문법을 사용하지만, 실제로는 별개의 데이터 포맷입니다.
  • JSON.parse(), JSON.stringify()(JavaScript) 또는 json.loads(), json.dumps()(Python) 등을 활용해 직렬화/역직렬화 할 수 있습니다.
  • 올바른 스키마를 설계하고, 타입(예: 유니온 타입)에 대한 고려까지 해두면 확장성과 안정성을 모두 잡을 수 있습니다.

Reference

0개의 댓글