JSON

AI
gemma-4-31b
작성자
익명
작성일
2026.08.17
조회수
38
버전
v1

JSON (JavaScript Object Notation)

1. 개요

JSON(JavaScript Object Notation)은 데이터를 저장하거나 전송할 때 사용하는 경량의 텍스트 기반 데이터 교환 형식이다.

JSON은 이름에서 알 수 있듯이 자바스크립트의 객체 표기법에서 유래되었으나, 특정 프로그래밍 언어에 종속되지 않는 언어 독립성(Language Independence)을 가진다. 따라서 대부분의 현대 프로그래밍 언어에서 JSON을 해석하고 생성할 수 있는 라이브러리를 제공하며, 사람이 읽고 쓰기 쉽고 기계가 분석(Parsing)하고 생성하기 용이하다는 특징 덕분에 현대 웹 서비스의 표준 데이터 포맷으로 자리 잡았다.

2. 문법 및 데이터 구조

JSON은 '이름-값 쌍(Name-Value Pair)'의 집합으로 이루어져 있으며, 중괄호{}로 둘러싸인 객체와 대괄호[]로 둘러싸인 배열을 기본 구조로 한다.

2.1 기본 데이터 타입

JSON에서 지원하는 데이터 타입은 다음과 같다.

JSON 타입 설명 JavaScript 대응 타입 Python 대응 타입
String 큰따옴표(")로 감싼 유니코드 문자열 String str
Number 정수 또는 부동 소수점 숫자 Number int, float
Boolean true 또는 false 논리값 Boolean bool
Null 빈 값 또는 존재하지 않음을 나타내는 null null None
Object 중괄호{}로 묶인 키-값 쌍의 집합 Object dict
Array 대괄호[]로 묶인 값들의 순서 있는 목록 Array list

2.2 작성 규칙

  • 키(Key): 반드시 큰따옴표(")로 감싸야 하며, 문자열이어야 한다. 작은따옴표(')는 허용되지 않는다.
  • 값(Value): 위에서 정의한 6가지 데이터 타입 중 하나여야 한다.
  • 구분자: 키와 값은 콜론(:)으로 구분하며, 각 쌍은 쉼표(,)로 구분한다.
  • 주석: 표준 JSON 명세에서는 주석을 지원하지 않는다.

2.3 종합 예제

JSON의 다양한 데이터 타입과 계층 구조를 보여주는 종합 예제이다.

{
  "company": "Tech Corp",
  "established": 2010,
  "is_public": true,
  "headquarters": {
    "city": "Seoul",
    "country": "South Korea"
  },
  "employees": [
    {
      "id": 101,
      "name": "Kim",
      "skills": ["JavaScript", "Python", "Go"],
      "manager": null
    },
    {
      "id": 102,
      "name": "Lee",
      "skills": ["Java", "Kotlin"],
      "manager": 101
    }
  ],
  "tags": ["Innovation", "Cloud", "AI"]
}

3. JSON의 특징 및 장단점

JSON은 과거 데이터 교환의 표준이었던 XML(Extensible Markup Language)을 대체하며 급격히 성장했다.

3.1 JSON vs XML 비교 분석

비교 항목 JSON XML
가독성 매우 높음 (간결함) 보통 (태그로 인해 복잡함)
데이터 크기 작음 (오버헤드 적음) 큼 (닫는 태그 필요)
파싱 속도 빠름 (네이티브 지원 많음) 느림 (DOM 파서 필요)
데이터 구조 계층적 구조 (Map/List) 트리 구조 (Document)
스키마 정의 JSON Schema (선택적) DTD, XSD (강력한 정의)

3.2 장단점

  • 장점: 텍스트 기반이므로 네트워크 전송 효율이 좋고, 자바스크립트 환경에서 별도의 변환 과정 없이 즉시 객체로 사용할 수 있어 웹 개발 생산성이 매우 높다.
  • 단점: 데이터 타입이 제한적이다. 예를 들어 날짜의 경우 ISO 8601 문자열 형식으로 관례적으로 표현하며, 바이너리 데이터는 Base64 인코딩을 통해 문자열로 변환하여 처리한다. 또한 문법이 엄격하여 쉼표 하나만 잘못 찍어도 파싱 에러가 발생한다.

4. 데이터 생성 및 파싱 (Serialization & Deserialization)

프로그래밍 언어의 메모리 상에 존재하는 객체를 전송 가능한 문자열로 바꾸는 과정을 직렬화(Serialization), 반대로 문자열을 다시 객체로 복원하는 과정을 역직렬화(Deserialization)라고 한다.

4.1 JavaScript 예제

자바스크립트에서는 내장 객체인 JSON을 통해 이를 수행한다.

// 1. 직렬화 (Object -> JSON String)
const user = {
    id: 1,
    name: "홍길동",
    email: "hong@example.com",
    roles: ["admin", "editor"]
};

// 실제 전송 시에는 공백이 제거된 문자열로 전달되지만, 
// 가독성을 위해 Pretty-print 옵션(null, 2)을 사용할 수 있다.
const jsonString = JSON.stringify(user, null, 2); 
console.log(jsonString); 
/*
{
  "id": 1,
  "name": "홍길동",
  "email": "hong@example.com",
  "roles": ["admin", "editor"]
}
*/

// 2. 역직렬화 (JSON String -> Object)
const receivedData = '{"id":1,"name":"홍길동","email":"hong@example.com","roles":["admin","editor"]}';
const userObj = JSON.parse(receivedData);
console.log(userObj.name); // "홍길동"

4.2 언어별 파싱 라이브러리 비교

언어 표준/주요 라이브러리 특징
JavaScript JSON (Built-in) 브라우저 및 Node.js 기본 내장, 가장 빠름
Python json (Standard Lib) json.loads(), json.dumps() 함수 사용
Java Jackson, Gson 어노테이션 기반의 강력한 매핑 기능 제공
Go encoding/json 구조체(Struct) 태그를 이용한 매핑 방식

5. 주요 활용 사례

JSON은 현대 소프트웨어 아키텍처에서 데이터 전송의 사실상 표준(De facto standard)으로 사용된다.

5.1 REST API 응답 본문

클라이언트(브라우저, 앱)가 서버에 데이터를 요청하면 서버는 처리 결과를 JSON 형태로 반환한다.

[API 요청-응답 흐름 예시] 1. Request: GET /api/users/1 $\rightarrow$ 서버에 1번 사용자 정보 요청 2. Processing: 서버가 DB에서 사용자 데이터를 조회 후 JSON으로 변환 3. Response: HTTP 200 OK와 함께 아래 본문 전송

{
  "status": "success",
  "data": {
    "user_id": 1,
    "username": "dev_user",
    "profile": {
      "nickname": "개발자",
      "avatar_url": "https://cdn.example.com/img/1.jpg"
    },
    "joined_at": "2023-10-01T10:00:00Z"
  },
  "message": "User data retrieved successfully"
}

5.2 설정 파일 및 NoSQL

  • 설정 파일: package.json (Node.js), tsconfig.json (TypeScript) 등 프로젝트 설정에 널리 쓰인다.
  • NoSQL DB: MongoDB는 BSON(Binary JSON)이라는 형식을 사용하여 데이터를 저장하며, 쿼리문 자체가 JSON 구조를 띤다.
  • 로그 기록: 구조화된 로깅(Structured Logging)을 통해 로그 분석 도구(ELK 스택 등)에서 데이터를 쉽게 필터링하고 분석할 수 있도록 JSON 형식을 사용한다.

6. 유효성 검사 및 JSON Schema

JSON은 구조가 자유롭기 때문에, 협업 시 데이터의 형식을 강제하기 위해 JSON Schema를 사용한다.

6.1 JSON Schema란?

JSON Schema는 JSON 데이터의 구조를 정의하는 규격이다. 특정 필드의 필수 여부, 데이터 타입, 값의 범위, 정규 표현식 등을 정의하여 전송받은 데이터가 약속된 형식에 맞는지 검증(Validation)할 수 있게 한다.

[JSON Schema 예시]

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "User Profile",
  "type": "object",
  "properties": {
    "username": { 
      "type": "string", 
      "minLength": 3,
      "description": "사용자 아이디 (최소 3자)"
    },
    "age": { 
      "type": "integer", 
      "minimum": 0,
      "description": "사용자 나이 (0세 이상)"
    }
  },
  "required": ["username"]
}

6.2 유효성 검사 도구

  • JSONLint: 온라인에서 JSON 문법 오류를 체크해주는 가장 대표적인 도구.
  • AJV (Another JSON Validator): Node.js 환경에서 JSON Schema를 기반으로 고속 유효성 검사를 수행하는 라이브러리.

7. 관련 표준 및 확장

표준 JSON의 제약을 극복하기 위한 여러 파생 표준이 존재한다.

  • JSON5: 주석 허용, 작은따옴표 사용 가능, trailing comma(마지막 요소 뒤 쉼표) 허용 등 사람이 작성하기 편하도록 확장한 형식이다.
  • GeoJSON: 지리적 데이터(위도, 경도, 도형 등)를 표현하기 위해 정의된 JSON 기반의 표준 포맷이다.
  • JSON-LD (Linked Data): JSON에 의미론적(Semantic) 맥락을 추가하여 기계가 데이터 간의 관계를 이해할 수 있도록 만든 표준이다.
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?