들어가며
개발과 관련된 일을 하다 보면 JSON 형식을 많이 보셨을 텐데요. 이번 시간에는 JSON이 무엇인지에 대해 알아보도록 하겠습니다.
JSON이 뭔가요?
JSON(JavaScript Object Notation)은 키-값 쌍을 기반으로 구조화된 데이터를 나타내는 텍스트 형식입니다.
아래와 같이 나타냅니다.
{
"name": "Leo Kim",
"age": 30,
"isStudent": false,
"languages": ["Korean", "English"],
"address": {
"street": "123 St",
"city": "Seoul",
}
}
사용가능한 데이터 타입은 아래와 같습니다.
- String
- Number
- Boolean
- null
- Array
- Object
왜 인기가 많을까요?
JSON은 널리 사용되는 데이터 교환 형식인데요. 다음과 같은 이유로 인해 많이 사용되고 있습니다.
- 구조가 단순하고 가독성이 좋습니다.
사람이 읽고 쓰기 쉽습니다. - 가볍고 효율적입니다.
데이터 전송을 빠르게 처리할 수 있습니다. - 언어 독립적입니다.
JSON이 비록 자바스크립트에서 파생되었지만, 언어에 구애받지 않습니다. 대부분의 프로그래밍 언어 내에는 JSON을 위한 내장 라이브러리가 있어 JSON 데이터를 쉽게 처리할 수 있습니다.
e.g. 자바스크립트의 JSON.parse() 메서드는 JSON text를 해당하는 자바스크립트 값으로 변환합니다.
어디에 사용되나요?
JSON은 주로 다음과 같이 사용됩니다.
- API
e.g. 유저 정보 반환, 검색 정보 반환 - Config Files
e.g. 에디터 설정, 사용자 기본 설정 - Data Storage
e.g. MongoDB를 포함한 일부 NoSQL의 경우, JSON 또는 JSON 유사 방식으로 데이터를 저장할 수 있습니다.
아쉬운 점도 있나요?
JSON은 매력적이지만 아쉬운 점 또한 존재합니다.
- 깊은 중첩을 가진 복잡한 구조에는 적합하지 않을 수 있습니다.
- 주석을 지원하지 않습니다.
YAML과 같은 형식과 달리, JSON 파일에는 주석을 달 수 없습니다.
대안으로는 뭐가 있나요?
JSON은 API, 특히 RESTful API에서 가장 인기 있는 데이터 형식이지만, 아쉬운 점 또한 존재하는데요. 이때 JSON 대신 고려할 수 있는 다른 대안들이 있습니다.
- XML (eXtensible Markup Language)
- 직렬화 serialization, 즉 임의의 데이터를 저장, 전송 및 재구성하기 위한 마크업 언어 및 파일 형식입니다.
- 장점
- 복잡한 데이터 구조를 지원합니다.
- 속성을 통해 더 많은 메타데이터를 허용합니다.
- 스키마(e.g. XSD)를 사용한 유효성 검사를 지원합니다.
- 단점
- JSON보다 더 장황해 더 큰 페이로드로 이어집니다.
- 사람이 읽고 쓰기 더 어렵습니다.
- YAML (YAML Ain't Markup Language)
- 모든 프로그래밍 언어에 대해 인간 친화적인 데이터 직렬화 언어입니다.
- 장점
- 사람이 읽고 쓰기 쉽습니다.
- 복잡한 데이터 구조를 지원합니다.
- 주석을 지원합니다.
- 단점
- JSON보다 파싱이 느릴 수 있습니다.
- API에서 덜 일반적이어서 일부 언어에서는 지원이 덜 될 수 있습니다.
- Protocol Buffers (Protobuf)
- 구조화된 데이터를 직렬화하기 위한 언어 중립적이고 플랫폼 중립적인 확장 메커니즘입니다.
구글에서 개발했으며, 구글에서 널리 사용됩니다. - 장점
- JSON 및 XML보다 더 컴팩트하고 효율적입니다.
- 미래에 다른 언어나 시스템과의 상호 운용성이 필요한 경우 효과적입니다.
- 단점
- 코드를 생성하려면 스키마 정의(프로토 파일)와 컴파일러가 필요합니다.
- 바이너리 형식으로 사람이 읽기 힘듭니다.
- 라이브러리가 즉시 압축을 제공하지 않습니다.
- 객체 지향이 아닌 언어에서 잘 지원되지 않습니다. e.g. Fortran
- 구조화된 데이터를 직렬화하기 위한 언어 중립적이고 플랫폼 중립적인 확장 메커니즘입니다.
- MessagePack
- JSON과 유사하지만 더 효율적인 바이너리 직렬화 형식입니다.
성능과 대역폭 효율이 중요한 시나리오에서 사용됩니다. - 장점
- JSON에 비해 데이터 크기가 작습니다.
- JSON보다 더 빠른 직렬화 및 병렬화를 지원합니다.
- 단점
- 바이너리 형식으로 사람이 읽기 힘듭니다.
- JSON만큼 광범위하게 지원되지 않습니다.
- JSON과 유사하지만 더 효율적인 바이너리 직렬화 형식입니다.
- CSV (Comma-Separated Values)
- 콤마로 값을 구분하고 새 줄로 레코드를 구분하는 텍스트 파일 형식입니다.
표 형식의 데이터에 일반적으로 사용되며, 특히 스프레드시트나 데이터베이스로 데이터를 쉽게 가져올 필요가 있는 경우에 사용됩니다. - 장점
- 구조가 간단합니다.
- 표 형식의 데이터를 표현하는 데 이상적입니다.
- 광범위하게 지원됩니다.
- 단점
- 중첩된 데이터 구조에는 적합하지 않습니다.
- 데이터 타입에 대한 내장 지원이 없습니다.
- 콤마로 값을 구분하고 새 줄로 레코드를 구분하는 텍스트 파일 형식입니다.
- SOAP (Simple Object Access Protocol)
- 메시지 포맷을 위해 XML을 자주 사용하는 메시징 프로토콜 규격입니다.
일반적으로 기업 환경에서 사용되며 REST보다 더 복잡한 작업을 지원합니다. - 장점
- 복잡한 운영, 보안 및 트랜잭션을 지원합니다.
- 엔터프라이즈 수준 애플리케이션에 적합합니다.
- 단점
- JSON보다 더 복잡합니다.
- 더 큰 XML 페이로드로 인해 더 많은 대역폭이 필요합니다.
- 메시지 포맷을 위해 XML을 자주 사용하는 메시징 프로토콜 규격입니다.
- Plain Text or Custom Formats
- 일반 텍스트 또는 사용자 정의 형식입니다.
특히 레거시 시스템이나 전문 응용 프로그램에서 사용될 수 있습니다. - 장점
- 매우 유연합니다.
- 특정 요구 사항에 맞게 조정될 수 있습니다.
- 단점
- 표준화가 부족한 경우가 많아 구문 분석 및 사용이 더 어렵습니다.
- 개발 환경에 대한 지원이 부족합니다.
- 일반 텍스트 또는 사용자 정의 형식입니다.
마치며
이번 시간에 알아본 것처럼 JSON은 단순한 구조, 가벼움, 언어 독립적이라는 특징으로 인해 널리 채택되는 데이터 교환 형식입니다. 다만 아쉬운 점 또한 존재하므로 개발 요구사항에 맞춰 필요한 데이터 교환 형식을 채택하는 게 좋습니다.
지적이나 다른 의견은 언제나 환영합니다 :D
감사합니다.
References
https://en.wikipedia.org/wiki/JSON
https://en.wikipedia.org/wiki/XML
https://en.wikipedia.org/wiki/YAML
https://en.wikipedia.org/wiki/Protocol_Buffers
https://msgpack.org/index.html
https://en.wikipedia.org/wiki/MessagePack
'Web' 카테고리의 다른 글
브라우저 핑거프린팅(Browser fingerprinting)이란? (0) | 2024.07.26 |
---|---|
웹 스토리지 이해하기 (0) | 2024.03.05 |
HTTP 세션 이해하기 (0) | 2024.02.20 |
HTTP 쿠키 이해하기 (0) | 2024.02.13 |
REST API? 그게 뭔가요? (0) | 2024.02.06 |