JSON 핸드북

핵심 요약: JSON(JavaScript Object Notation)은 Douglas Crockford가 2001년에 웹 애플리케이션 간 실시간 데이터 교환을 위해 고안한 경량·텍스트 기반의 데이터 교환 포맷이다1. 간결한 문법(객체·배열·원시값 6종)과 언어 독립성, 풍부한 활용 사례(API, 설정 파일, NoSQL 등)를 바탕으로 현재 모든 주요 프로그래밍 언어에서 지원되며, 웹·모바일·서버 애플리케이션의 표준 데이터 형식으로 자리잡았다23.

1. 탄생 배경 및 역사

  • 기원: 2001년, Crockford와 Chip Morningstar가 브라우저 플러그인(Flash·Java Applet) 없이 HTTP 기반으로 양방향 세션을 유지하는 경량 프로토콜이 필요해 개발1.
  • 이름 및 표준화: JSML(JS Markup Language) vs JSON 토의 끝에 ‘JavaScript Object Notation’으로 채택. 2006년 RFC 4627로 소개, 2013년 ECMA-404·ISO/IEC 21778로 국제 표준화4.
  • 철학: 최소주의(minimal), 텍스트(textual), *JavaScript의 부분집합(subset)*이라는 설계 원칙을 고수하며 불필요한 기능 확장을 배제5.

2. 문법과 구조

2.1 기본 데이터 타입 6종

타입JSON 표기법설명대응 언어 객체
객체(Object){}키-값 쌍의 집합dict (Python) 등
배열(Array)[]순서 있는 값의 목록list (Python) 등
문자열(String)"..."UTF-8 인코딩 문자열str (Python) 등
숫자(Number)123, 3.14정수·실수 지원 (NaN·∞ 불가)int·float (Python)
불리언(Boolean)true/false논리값True/False (Python)
널(Null)null값 부재None (Python)

2.2 문법 규칙

  • 키·문자열은 반드시 쌍따옴표로 감싸야 함.
  • 마지막 요소 뒤콤마 금지.
  • **네스팅(nesting)**은 객체·배열 간 자유롭게 허용하나, 가독성·성능 고려 필요6.

2.3 예시

{
  "user": {
    "id": 1001,
    "name": "홍길동",
    "roles": ["admin", "editor"],
    "profile": null
  }
}

3. 활용 사례

3.1 웹 API 데이터 교환

  • REST/GraphQL API 요청·응답에 표준 포맷으로 사용.
  • 자바스크립트 JSON.parse(), JSON.stringify()를 통해 객체 ↔ JSON 문자열 상호 변환이 용이2.

3.2 설정 파일 및 데이터 저장

  • 애플리케이션 설정(config.json), 환경 변수, 매니페스트(manifest.json) 등에 적용.
  • 가독성이 높아 DevOps·CI/CD 파이프라인에서 광범위하게 채택3.

3.3 NoSQL 문서 데이터베이스

  • MongoDB·CouchDB 등 JSON 문서 지향 데이터베이스에서 네이티브 포맷으로 사용.
  • RDBMS(MySQL·PostgreSQL)에서도 JSON 컬럼 타입 지원.

3.4 JSON Schema를 통한 검증·문서화

  • 스키마 정의 언어(JSON Schema)로 데이터 구조·유효성 검사, UI 자동 생성, API 계약 명세 등에 활용7.
  • 스키마 예시:
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Product",
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "name": { "type": "string" },
    "price": { "type": "number", "minimum": 0 }
  },
  "required": ["id", "name", "price"]
}

4. 심화 주제

4.1 보안 및 성능 고려사항

  • JSON Hijacking, XSS 등 클라이언트 보안 취약점 주의.
  • 대용량 데이터 전송 시 스트리밍(JSON Stream), 압축 기법 활용.

4.2 확장 포맷

  • JSON-LD: 링크드 데이터 연동을 위한 시맨틱 확장.
  • BSON: 바이너리 직렬화 형식, MongoDB 내부 포맷.
  • NDJSON: Newline-delimited JSON, 로그 처리 등에 적합.

4.3 JSON 처리 도구

  • 파싱/시리얼라이저: RapidJSON, Jackson, Gson, Serde(Json) 등.
  • 검증 라이브러리: Ajv, Newtonsoft.Json.Schema 등.
  • 문서화: Swagger/OpenAPI, AsyncAPI 등과 연계.

결론

JSON은 가독성, 경량성, 범용성을 모두 갖춘 데이터 교환 포맷으로, 웹·모바일·서버·데이터베이스 등 현대 소프트웨어 전 영역에서 핵심 인프라로 자리매김했다. JSON의 구조와 사용법을 완벽히 이해하고, JSON Schema를 사용한 검증·문서화, 보안·성능 최적화 기법을 숙지하면 안정적이고 효율적인 데이터 처리 시스템을 구축할 수 있다.

Footnotes

  1. https://en.wikipedia.org/wiki/JSON 2

  2. https://www.w3schools.com/js/js_json_intro.asp 2

  3. https://www.oracle.com/jp/database/what-is-json/ 2

  4. https://www.nic.ad.jp/ja/basics/terms/json.html

  5. https://www.wearedevelopers.com/en/magazine/481/douglas-crockford---json-and-beyond

  6. https://note.com/gorogoro_ch/n/nccaba08b722c

  7. https://json-schema.org/learn/json-schema-examples