JSON: 개념, 데이터 구조 및 작동 원리

저자: IT Sectr 게시일: 2026-03-08 읽는 시간: 8 분

JSON(JavaScript Object Notation)은 JavaScript 객체 구문을 기반으로 하는 텍스트 기반 데이터 교환 형식입니다. REST API 및 구성 파일부터 데이터베이스 및 모바일 애플리케이션의 데이터 저장에 이르기까지 모든 곳에서 사용됩니다. 공식 JSON 웹사이트에 따르면, 이 형식은 언어에 독립적이며 거의 모든 최신 플랫폼에서 지원됩니다. JSON은 클라이언트와 서버 간 데이터 전송의 사실상 표준이 되었습니다.

핵심 요점

  • JSON — JavaScript 구문을 기반으로 하는 구조화된 데이터를 위한 경량 텍스트 형식
  • 6가지 데이터 타입 — 문자열, 숫자, 불리언, null, 배열 및 객체로 모든 구조 지원
  • 보편성 — 모든 프로그래밍 언어와 플랫폼에서 지원
  • REST API — 웹 및 모바일 애플리케이션에서 데이터 교환의 주요 형식
  • 인간 가독성 — 간단한 구문으로 도구 없이도 쉽게 읽고 편집 가능

JSON이란?

JSON은 JavaScript 구문을 기반으로 하는 구조화된 데이터를 표현하기 위한 텍스트 형식입니다. JavaScript에서 비롯되었지만, 이 형식은 완전히 언어에 독립적입니다 — 모든 인기 있는 프로그래밍 언어에 파서와 직렬화 도구가 존재합니다.

JSON의 역사는 2000년대 초 Douglas Crockford가 데이터 교환을 위해 JavaScript 구문의 하위 집합을 추출하면서 시작되었습니다. 2013년에 이 형식은 ECMA-404로 표준화되었고, 이후 ISO/IEC 21778:2017로 표준화되었습니다. 이름은 JavaScript Object Notation의 약자입니다.

JSON의 주요 장점은 미니멀한 구문입니다. 데이터를 설명하는 데 문자열, 숫자, 불리언, null, 배열, 객체의 6가지 타입만 사용됩니다. 이는 애플리케이션에서 사용되는 모든 데이터 구조를 표현하기에 충분합니다.

JSON 사용처

  • REST API — 서버와 클라이언트 간 요청 및 응답의 주요 형식
  • 구성 파일 — package.json, tsconfig.json, .prettierrc
  • 데이터베이스 — MongoDB, PostgreSQL(JSONB), Firebase Firestore
  • 모바일 애플리케이션 — 설정 저장, 데이터 캐싱
  • 웹 기술 — WebSocket, Server-Sent Events, localStorage

JSON 구문 및 데이터 타입

JSON 구문은 매우 간단합니다: 데이터는 키-값 쌍으로 표현되며, 키는 큰따옴표로 묶인 문자열이고 값은 6가지 기본 타입 중 하나입니다. 객체는 중괄호로 묶이고, 배열은 대괄호로 묶입니다. 문자열은 큰따옴표를 사용해야 하며, 작은따옴표는 허용되지 않습니다.

JSON의 숫자는 정수 또는 부동 소수점, 양수 또는 음수, 지수 표기법이 가능합니다. 불리언 값은 true와 false 리터럴로 표현되며, 값의 부재는 null로 표현됩니다. 배열에는 중첩된 배열과 객체를 포함한 모든 타입의 값 순서 집합이 포함됩니다.

json
{
  "name": "JSON",
  "type": "text",
  "version": 2024,
  "flexible": true,
  "extensions": null,
  "languages": [
    "JavaScript",
    "Python",
    "Java"
  ],
  "nested": {
    "info": "중첩 지원"
  }
}
타입 예시 설명
문자열 “텍스트” 큰따옴표로 묶음, 이스케이프 시퀀스 사용 가능
숫자 42 정수, 부동 소수점, 지수
불리언 true true 또는 false — 따옴표 없음
null null 값의 부재
객체 {} 키-값 쌍의 순서 없는 집합
배열 [] 값의 순서 있는 목록

REST API에서의 JSON

JSON은 모바일 및 웹 개발에서 REST API의 기본 데이터 교환 형식입니다. 서버는 응답 본문에 JSON을 보내고, 클라이언트는 요청 본문에 JSON을 보냅니다. JSON의 표준 Content-Type 헤더는 application/json입니다.

최신 REST API는 단순한 목록부터 엔터티 간 관계가 있는 복잡한 중첩 구조까지 모든 유형의 데이터를 전송하는 데 JSON을 사용합니다. 클라이언트 라이브러리(JavaScript의 Axios 또는 Android의 Retrofit 등)는 JSON을 자동으로 직렬화 및 역직렬화하여 개발자를 수동 파싱에서 해방시킵니다.

REST API에서 JSON의 중요한 장점은 쿼리 매개변수를 통한 부분 데이터 전송(부분 응답) 기능과 서버에 추가 요청 없이 중첩 리소스를 지원하는 것입니다.

모바일 플랫폼에서의 JSON 파싱

JSON 파싱은 모바일 플랫폼에서 내장 도구를 사용하여 수행됩니다. Android는 Google의 Gson 또는 Square의 Moshi를 사용하고, iOS는 JSONDecoder와 함께 Codable 프로토콜을 사용합니다. 각 플랫폼은 JSON을 네이티브 객체로 변환하는 편리한 도구를 제공합니다.

Android(Kotlin)에서의 JSON

Android에서는 Gson 또는 Moshi를 사용하는 접근 방식이 일반적입니다. @SerializedName 어노테이션이 있는 데이터 클래스를 정의하고 역직렬화를 위해 fromJson을 호출하기만 하면 됩니다. 라이브러리는 자동으로 JSON 필드 이름을 클래스 속성에 매핑합니다.

kotlin
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName

data class User(
    @SerializedName("id") val id: Int,
    @SerializedName("name") val name: String,
    @SerializedName("email") val email: String
)

fun parseJson(jsonString: String): User {
    val gson = Gson()
    return gson.fromJson(jsonString, User::class.java)
}

iOS(Swift)에서의 JSON

iOS에서는 JSONDecoder와 함께 내장된 Codable 프로토콜이 사용됩니다. 데이터 구조는 Codable을 준수하는 struct로 선언된 후 JSON이 한 줄로 파싱됩니다. JSONEncoder는 역직렬화를 수행합니다 — 객체를 JSON으로 변환하여 서버로 전송합니다.

swift
import Foundation

struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

func parseJSON(from data: Data) throws -> User {
    let decoder = JSONDecoder()
    return try decoder.decode(User.self, from: data)
}

JSON vs XML: 형식 비교

JSON과 XML은 구조화된 데이터를 전송하는 두 가지 주요 형식입니다. JSON은 단순성과 성능에서 우수하고, XML은 엄격함과 검증에서 우수합니다. 둘 중 선택은 프로젝트 요구 사항에 따라 달라집니다: REST API는 JSON을 더 자주 사용하고, 스키마가 있는 복잡한 문서는 XML을 사용합니다.

XML은 모든 요소에 닫는 태그가 필요하여 JSON에 비해 데이터 크기가 2~3배 증가합니다. 동시에 XML은 네임스페이스, XSD 스키마, 속성 및 XSLT 변환을 지원하여 문서 관리 및 엔터프라이즈 시스템 통합 작업에 더 강력합니다.

특성 JSON XML
구문 미니멀, 키-값 태그 기반, 열기 및 닫기 태그
데이터 크기 컴팩트 JSON보다 2~3배 큼
데이터 타입 6가지 기본 타입 텍스트만, 스키마를 통한 타입
검증 내장 없음, JSON Schema 통해 XSD — 엄격하고 성숙함
네임스페이스 없음 완전한 네임스페이스 지원
파싱 속도 높음 복잡성으로 인해 낮음

JSON 사용 예제

예제는 모바일 개발에서 JSON의 일반적인 작업을 보여줍니다: API 응답 파싱, 전송용 JSON 생성 및 중첩 구조 처리. 이러한 패턴을 이해하는 것은 모든 모바일 애플리케이션 개발자에게 필수적입니다.

객체를 JSON으로 직렬화

JavaScript에서 JSON.stringify는 객체를 JSON 문자열로 변환합니다. 두 번째 인수는 선택적 직렬화를 위한 키 배열 또는 대체 함수일 수 있습니다. 세 번째 인수는 포맷팅을 위한 들여쓰기를 설정합니다.

typescript
interface Order {
  id: string;
  items: OrderItem[];
  total: number;
  createdAt: string;
}

const order: Order = {
  id: 'ord_001',
  items: [{ product: 'phone', quantity: 2 }],
  total: 1599.98,
  createdAt: '2026-07-03T10:00:00Z'
};

const jsonString = JSON.stringify(order, null, 2);

중첩 JSON 파싱

Moshi 라이브러리를 사용하는 Kotlin에서는 중첩된 JSON 객체가 중첩된 데이터 클래스를 통해 처리됩니다. @Json 어노테이션은 클래스 속성 이름과 다른 경우 JSON 필드 이름을 지정합니다. 배열은 요소 타입과 함께 List로 표현됩니다.

kotlin
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

data class ApiResponse(
    val status: String,
    val data: List<Product>,
    val pagination: Pagination
)

data class Product(
    val id: Int,
    val title: String,
    val price: Double
)

data class Pagination(
    val page: Int,
    val total: Int
)

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

JSON Schema: 구조 검증

JSON Schema는 XML의 XSD와 유사하게 JSON 문서의 구조를 설명하기 위한 언어입니다. JSON Schema를 사용하면 필수 필드, 데이터 타입, 값 범위, 문자열 패턴 및 중첩 구조를 지정할 수 있습니다. 스키마 검증은 애플리케이션에서 처리되기 전에 데이터 오류를 감지합니다.

JSON Schema는 REST API 문서화를 위한 OpenAPI(Swagger), 입력 데이터 검증 양식 및 테스트에서 널리 사용됩니다. 스키마 파일 자체가 JSON 문서이므로 표준 JSON 파서로 읽을 수 있습니다. 모든 인기 있는 프로그래밍 언어에 온라인 검증기와 라이브러리가 있습니다.

모바일 개발에서 JSON Schema는 테스트 중 서버 응답 검증 및 구성 파일 확인에 사용됩니다. Android의 network-validator 및 json-schema-validator와 같은 라이브러리는 개발 프로세스에 직접 검증을 내장하여 초기 단계에서 오류를 방지할 수 있게 합니다.

자주 묻는 질문

JSON은 어떤 데이터 타입을 지원하나요?

JSON은 6가지 타입을 지원합니다: 문자열(큰따옴표로 묶음), 숫자(정수 및 부동 소수점), 불리언(true/false), null, 객체({}의 키-값 쌍), 배열([]의 값 목록). 이는 애플리케이션의 모든 데이터 구조에 충분합니다.

JSON에서 주석을 사용할 수 있나요?

아니요, JSON 표준은 주석을 지원하지 않습니다. 주석이 필요한 경우 JSON5(확장 JSON)를 사용하거나 설명 필드를 추가하세요(예: “_comment”: “설명”). VS Code와 같은 일부 도구는 구성 JSON 파일에서 주석을 지원하지만 이는 비표준 확장입니다.

PostgreSQL에서 JSON과 JSONB의 차이점은?

JSONB는 PostgreSQL에서 JSON의 바이너리 저장 형식입니다. 텍스트 JSON과 달리 JSONB는 처리 속도가 빠르고 인덱싱(GIN 인덱스)을 지원하며 키 고유성을 보장합니다. 그러나 JSONB는 메타데이터 추가로 인해 디스크 공간을 더 많이 차지합니다.

JSON 유효성을 확인하는 방법은?

빠른 확인을 위해 JSONLint(jsonlint.com), try-catch와 함께 JavaScript의 내장 JSON.parse() 또는 IDE 플러그인을 사용하세요. 검증에는 올바른 따옴표, 괄호 닫힘 및 타입 일치 확인이 포함됩니다. 복잡한 스키마의 경우 JSON Schema Validator를 사용하세요.

JSON 파일의 최대 크기는 얼마인가요?

JSON 사양에는 제한이 없습니다. 실제로 크기는 장치 메모리와 파서 기능에 의해 제한됩니다. 모바일 애플리케이션의 경우 응답당 1~2MB를 초과하지 않는 것이 좋으며, 대용량 데이터의 경우 페이지네이션 또는 스트리밍을 사용하세요.

요약

  • JSON — 구조화된 정보 교환을 위한 6가지 데이터 타입을 가진 미니멀한 텍스트 형식
  • 언어 독립성 — JSON 파서는 모든 인기 있는 프로그래밍 언어에 존재
  • REST API는 모바일 애플리케이션에서 요청 및 응답의 표준 형식으로 JSON 사용
  • 파싱은 내장 도구로 수행: Android에서는 Gson/Moshi, iOS에서는 Codable
  • JSON은 XML보다 2~3배 더 컴팩트하지만 성능에서 Protobuf에 뒤짐
  • 인간 가독성 — 특별한 도구 없이 구문을 쉽게 읽고 디버깅 가능
  • JSON Schema — 구조 및 데이터 타입 검증을 위한 추가 도구

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기