
JSON 직렬화를 통한 직렬화 상세 핸드북
핵심 요약 JSON(JavaScript Object Notation) 직렬화는 객체의 상태를 텍스트 기반의 JSON 문자열로 변환해 저장·전송하고, 역직렬화를 통해 원본 객체로 복원하는 과정이다. 경량 포맷 특성 덕분에 웹 API, 모바일 애플리케이션, IoT, 분산 시스템 등 다양한 환경에서 주로 사용된다1.
1. JSON 기본 구조와 문법
JSON은 여섯 가지 기본 자료형과 두 가지 복합 구조로 이루어진다1:
- 원시값: 숫자(Number), 문자열(String), 불리언(Boolean: true/false), null
- 복합값: 객체(Object:
{}
), 배열(Array:[]
)
객체는 키–값 쌍으로, 배열은 값들의 순차적 나열로 표현된다.
{
"id": 123, // 숫자
"name": "Alice", // 문자열
"active": true, // 불리언
"roles": ["admin","user"], // 배열
"profile": { // 중첩 객체
"age": 30,
"email": null
}
}
2. 직렬화·역직렬화 과정
- 직렬화(Serialization)
- 역직렬화(Deserialization)
// JavaScript 예시
const obj = { foo: [1,4,7], bar: "baz" };
const jsonStr = JSON.stringify(obj); // '{"foo":[1,4,7],"bar":"baz"}'
const restored = JSON.parse(jsonStr); // { foo: [1,4,7], bar: "baz" }
3. 언어별 구현 방식
3.1 JavaScript
- 내장 함수:
JSON.stringify()
,JSON.parse()
- 커스텀 리플레이서(replacer)·리바이브(reviver) 기능으로 직렬화 제어 가능
3.2 Python
- 표준 모듈:
import json
json.dumps()
/json.dump()
→ 문자열/파일json.loads()
/json.load()
→ 메모리/파일3
3.3 C# (.NET)
System.Text.Json
:JsonSerializer.Serialize()
/JsonSerializer.Deserialize<T>()
4Newtonsoft.Json
(Json.NET) 라이브러리 활용 가능
3.4 Java
- Jackson:
ObjectMapper.writeValueAsString()
/readValue()
5 - Gson:
new Gson().toJson()
/fromJson()
3.5 Dart(Flutter)
- 내장
dart:convert
:jsonEncode()
/jsonDecode()
- 자동화:
json_serializable
코드 생성6
4. 고급 기능 및 옵션
4.1 포맷 제어
- ** 들여쓰기·개행**
- JavaScript:
JSON.stringify(obj, null, 2)
- .NET:
JsonSerializerOptions.WriteIndented = true
4
- JavaScript:
- 날짜 형식
- ISO 8601 문자열로 저장하거나, 타임스탬프로 변환
4.2 커스텀 변환
- 리플레이서(replacer): 특정 키·값 필터링
- 리바이브(reviver): 파싱 시 타입 변환(JavaScript)
- 커스텀 컨버터: .NET
JsonConverter
구현7
4.3 스트리밍 직렬화
대용량 데이터 처리 시 전체 문자열 생성 대신 스트림으로 직렬화·역직렬화하여 메모리 사용량 최소화
5. 활용 및 주의 사항
5.1 활용 사례
- 웹 API: 클라이언트-서버 간 RESTful 통신
- 구성 파일: 설정·스크립트 적재
- 로그 및 이벤트: 비정형 로그 저장
- 모바일 앱: 네이티브 데이터 교환
5.2 성능 최적화
- 작은 페이로드: 기본
stringify
방식 - 대용량/실시간: 스트리밍 또는 이진 포맷(protobuf·MessagePack) 고려
5.3 보안 취약점
- 역직렬화 공격:
eval
사용 금지,JSON.parse
권장1 - 입력 검증: 외부 입력 JSON 구조·스키마 검증
5.4 스키마 정의
- OpenAPI·JSON Schema로 API 계약 문서화
- 자동 검증·문서 생성 지원
결론 JSON 직렬화는 가독성과 범용성, 언어 독립성을 갖춘 경량 포맷으로, 다양한 플랫폼·언어에서 표준 기능으로 제공된다. 복잡한 데이터 구조에도 대응 가능하며, 필요에 따라 포맷 제어, 커스텀 변환, 스트리밍 방식을 활용해 성능·보안·유연성을 높일 수 있다.
Footnotes
-
https://stackoverflow.com/questions/3316762/what-is-deserialize-and-serialize-in-json ↩ ↩2 ↩3
-
https://learn.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json/how-to ↩ ↩2
-
https://blogs.oracle.com/javamagazine/post/java-json-serialization-jackson ↩
-
https://docs.flutter.dev/data-and-backend/serialization/json ↩
-
https://learn.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json/converters-how-to ↩