Overview
JSON은 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉬운 경량 텍스트 기반 데이터 교환 형식입니다. 웹 API, 설정 파일, 구조화된 데이터 교환에서 지배적인 형식으로 자리 잡았습니다.
JSON은 데이터를 키-값 쌍(객체)과 순서 있는 리스트(배열)로 표현하며, JavaScript에서 파생된 문법을 사용합니다. 단순함과 언어 독립성 덕분에 현대 소프트웨어 개발의 공용어가 되었습니다.
History
더글라스 크락포드가 2000년대 초반 XML보다 간결한 데이터 교환 대안으로 JSON을 대중화했습니다. RFC 4627(2006)에서 처음 규격화되었고, RFC 7159(2014)를 거쳐 2017년 RFC 8259 및 ECMA-404로 최종 확정되었습니다.
JSON은 컴팩트한 문법과 JavaScript에서의 네이티브 지원 덕분에 웹 API에서 XML을 빠르게 대체했습니다. 현재 사실상 모든 프로그래밍 언어가 내장 또는 표준 라이브러리 수준의 JSON 지원을 제공합니다.
Technical Details
JSON은 여섯 가지 값 타입을 정의합니다. 큰따옴표로 감싼 문자열, 정수 또는 부동소수점 숫자, 불리언(true/false), null, 키-값 쌍의 비순서 집합인 객체({}), 순서 있는 리스트인 배열([])입니다.
문자열은 반드시 큰따옴표를 사용하며 유니코드 이스케이프 시퀀스(\uXXXX)를 지원합니다. 숫자는 JavaScript 문법을 따르되 선행 0, NaN, Infinity는 허용하지 않습니다. 스펙상 객체에 중복 키가 허용되지만, 실제 동작은 구현에 따라 다릅니다.
JSON은 UTF-8, UTF-16, UTF-32로 인코딩할 수 있으며, 대부분의 경우 UTF-8이 기본입니다. 표준 JSON에서는 주석, 후행 쉼표, 날짜 타입을 지원하지 않습니다.
Pros & Cons
Pros
- 한눈에 파악할 수 있을 만큼 읽기 쉬움
- 불필요한 구문이 최소화된 경량 문법
- JavaScript를 비롯한 대부분의 프로그래밍 언어에서 네이티브 지원
- REST API 및 웹 서비스의 사실상 표준 형식
- 검증기, 포매터, 쿼리 언어(jq, JSONPath) 등 풍부한 도구 지원
Cons
- 날짜, 바이너리, 스키마 타입이 내장되어 있지 않음
- 표준 JSON에서 주석 미지원
- 깊이 중첩되거나 반복적인 데이터에서는 장황해짐
- 숫자 정밀도 제한 (IEEE 754)
- 스트리밍 표준이 없음 (NDJSON이 이 역할을 보완)
Common Use Cases
- REST 및 GraphQL API 응답
- 설정 파일 (package.json, tsconfig.json)
- NoSQL 데이터베이스 데이터 저장 (MongoDB, CouchDB)
- 마이크로서비스 아키텍처에서의 서비스 간 통신
- 구조화된 로깅 및 이벤트 데이터