Web

JSON이 뭔가요?

Yepchani 2024. 8. 23. 22:18

들어가며

개발과 관련된 일을 하다 보면 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 대신 고려할 수 있는 다른 대안들이 있습니다.

 

  1. XML (eXtensible Markup Language)
    • 직렬화 serialization, 즉 임의의 데이터를 저장, 전송 및 재구성하기 위한 마크업 언어 및 파일 형식입니다. 
    • 장점
      • 복잡한 데이터 구조를 지원합니다.
      • 속성을 통해 더 많은 메타데이터를 허용합니다.
      • 스키마(e.g. XSD)를 사용한 유효성 검사를 지원합니다.
    • 단점
      • JSON보다 더 장황해 더 큰 페이로드로 이어집니다.
      • 사람이 읽고 쓰기 더 어렵습니다.
  2. YAML (YAML Ain't Markup Language)
    • 모든 프로그래밍 언어에 대해 인간 친화적인 데이터 직렬화 언어입니다.
    • 장점
      • 사람이 읽고 쓰기 쉽습니다.
      • 복잡한 데이터 구조를 지원합니다.
      • 주석을 지원합니다.
    • 단점
      • JSON보다 파싱이 느릴 수 있습니다.
      • API에서 덜 일반적이어서 일부 언어에서는 지원이 덜 될 수 있습니다.
  3. Protocol Buffers (Protobuf)
    • 구조화된 데이터를 직렬화하기 위한 언어 중립적이고 플랫폼 중립적인 확장 메커니즘입니다.
      구글에서 개발했으며, 구글에서 널리 사용됩니다.
    • 장점
      • JSON 및 XML보다 더 컴팩트하고 효율적입니다.
      • 미래에 다른 언어나 시스템과의 상호 운용성이 필요한 경우 효과적입니다.
    • 단점
      • 코드를 생성하려면 스키마 정의(프로토 파일)와 컴파일러가 필요합니다.
      • 바이너리 형식으로 사람이 읽기 힘듭니다.
      • 라이브러리가 즉시 압축을 제공하지 않습니다.
      • 객체 지향이 아닌 언어에서 잘 지원되지 않습니다. e.g. Fortran
  4. MessagePack
    • JSON과 유사하지만 더 효율적인 바이너리 직렬화 형식입니다.
      성능과 대역폭 효율이 중요한 시나리오에서 사용됩니다.
    • 장점
      • JSON에 비해 데이터 크기가 작습니다.
      • JSON보다 더 빠른 직렬화 및 병렬화를 지원합니다.
    • 단점
      • 바이너리 형식으로 사람이 읽기 힘듭니다.
      • JSON만큼 광범위하게 지원되지 않습니다.
  5. CSV (Comma-Separated Values)
    • 콤마로 값을 구분하고 새 줄로 레코드를 구분하는 텍스트 파일 형식입니다.
      표 형식의 데이터에 일반적으로 사용되며, 특히 스프레드시트나 데이터베이스로 데이터를 쉽게 가져올 필요가 있는 경우에 사용됩니다.
    • 장점
      • 구조가 간단합니다.
      • 표 형식의 데이터를 표현하는 데 이상적입니다.
      • 광범위하게 지원됩니다.
    • 단점
      • 중첩된 데이터 구조에는 적합하지 않습니다.
      • 데이터 타입에 대한 내장 지원이 없습니다.
  6. SOAP (Simple Object Access Protocol)
    • 메시지 포맷을 위해 XML을 자주 사용하는 메시징 프로토콜 규격입니다.
      일반적으로 기업 환경에서 사용되며 REST보다 더 복잡한 작업을 지원합니다.
    • 장점
      • 복잡한 운영, 보안 및 트랜잭션을 지원합니다.
      • 엔터프라이즈 수준 애플리케이션에 적합합니다.
    • 단점
      • JSON보다 더 복잡합니다.
      • 더 큰 XML 페이로드로 인해 더 많은 대역폭이 필요합니다.
  7. Plain Text or Custom Formats
    • 일반 텍스트 또는 사용자 정의 형식입니다.
      특히 레거시 시스템이나 전문 응용 프로그램에서 사용될 수 있습니다.
    • 장점
      • 매우 유연합니다.
      • 특정 요구 사항에 맞게 조정될 수 있습니다.
    • 단점
      • 표준화가 부족한 경우가 많아 구문 분석 및 사용이 더 어렵습니다.
      • 개발 환경에 대한 지원이 부족합니다.

 

마치며

이번 시간에 알아본 것처럼 JSON은 단순한 구조, 가벼움, 언어 독립적이라는 특징으로 인해 널리 채택되는 데이터 교환 형식입니다. 다만 아쉬운 점 또한 존재하므로 개발 요구사항에 맞춰 필요한 데이터 교환 형식을 채택하는 게 좋습니다.

 

지적이나 다른 의견은 언제나 환영합니다 :D

감사합니다.

 

References

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

Learn JSON in 10 Minutes

https://en.wikipedia.org/wiki/XML

https://yaml.org/

https://en.wikipedia.org/wiki/YAML

https://protobuf.dev/

https://en.wikipedia.org/wiki/Protocol_Buffers

https://msgpack.org/index.html

https://en.wikipedia.org/wiki/MessagePack

https://en.wikipedia.org/wiki/Comma-separated_values

https://en.wikipedia.org/wiki/SOAP

'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