목차
JSON(JavaScript Object Notation)의 정의
{
"user": {
"email": "umbeloper@tistory.com",
"username": "jws",
"image": "https://example.io",
"token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIwNzc4NDgxZi0wODVlLTQzODUtOTc4MC0wM2Q3MjVlZjcyZDkiLCJleHAiOjE2NzIxMTE0NzZ9.JIabihFL6hoA8G2yVN8ZVISmrX9lONl8NHgxkPvvuqV4p_wf47PJEO1ANHic8DzVtPeer9IPLYrjOwqse4hErg"
}
}
확장자는 .json
JSON (JavaScript Object Notation) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values). It is a common data format with diverse uses in electronic data interchange, including that of web applications with servers.
장점과 단점
장점
○빠르고 효율적이다.
○클라이언트와 서버가 데이터 공유가 용이하다. - 프론트에서의 데이터를 직렬화한후 서버에서 비직렬화해서 데이터를 다루는데 있어서 json은 꽤나 빠르게 처리될 수 있다.
○호환성 - 거의 모든 프로그래밍 언어와 브라우저에서 지원한다.
단점
○No date data type - String으로 표현할 수 있지만 형식에서 불일치를 보일 수 있는 가능성을 내포한다.
○장황함 - 특정 목적의 경우에는 오히려 복잡해보이기도 해서, 다른 데이터 교환 형식을 선택해야 할 수가 있음
○주석 미지원
○Less secure
eval()함수를 사용할 경우 보안취약점이 될 수 있다.
데이터교환형식들
Readable Format(csv xml json yml etc.)
용량은 csv가 제일 작고 xml이 제일큼 무결성은 csv랑 xml이제일좋음
CSV(comma-seperated values)
구분문자(,[comma] 텍스트파일이다. 각 줄이 행이다.
표준은 rfc4810이나, 이미 관행적으로 쓰이는 방식들이 저마다 있어서, 엄격하게 지켜지지는 않는다.
Excel,RDB에서 이 형식을 많이 다루게 된다.
XML(Extensible Markup Language)
application/xml, text/xml
SGML의 하위집합. 즉, SGML보다 더 적은 규칙을 가진다. SGML은 인터넷이 떠오르기전인 1980년대 후반까지 많이 쓰였다.
1996년에 처음시작하고, 1998년에 처음으로 XML1.0이 정의됨.
임의의 데이터를 저장하고,전송하고, 재구성하는데 쓰이는 마크업언어이자 파일형식.
이것은 문서를 인코딩하는 데 있어서 몇가지 규칙들의 집합을 정의한다.
인터넷에서의 호환성을 위해 유니코드에 기반한 강력한 규칙을 지원한다.
원래 목표가 문서를 다루는 것이었지만, 자료구조를 표현하는 데 있어서도 많이 활용된다.
몇몇 XML기반 언어의 정의를 위해 Schema System이 있고, Xml 데이터 처리 api가 많이 개발되었다.
YAML
사람이 읽기 쉬운 데이터 직렬화 언어.
데이터저장용도나 config파일 설정에 많이 사용된다.
JSON files are valid YAML 1.2. 그 역은 해당하지 않는다.
Binary Format(Rpc구현체들(protocol buffers, Thrift, avro),Bson, base64, etc.)
Protocol buffers(Rpc 구현체)
텐서플로우에서 많이 쓰인다.
프로토토콜 버퍼는 구글에서 개발하고 오픈소스로 공개한, 직렬화 데이타 구조 (Serialized Data Structure)이다. C++,C#, Go, Java, Python, Object C, Javascript, Ruby 등 다양한 언어를 지원하며 특히 *직렬화 속도가 빠르고 직렬화된 파일의 크기도 작아서 Apache Avro 파일 포맷과 함께 많이 사용된다.
(*직렬화란 데이타를 파일로 저장하거나 또는 네트워크로 전송하기 위하여 바이너리 스트림 형태로 저장하는 행위이다.)
grpc의 주요개념이기도 하다.
프로토콜 버퍼는 하나의 파일에 최대 64M까지 지원할 수 있으며, 재미있는 기능중 하나는 JSON 파일을 프로토콜 버퍼 파일 포맷으로 전환이 가능하고, 반대로 프로토콜 버퍼 파일도 JSON으로 전환이 가능하다. 이 기능을 사용하면, 클라이언트(모바일)에서 서버로 HTTP/JSON 과 같은 REST API를 구현할때, 전송전에, JSON을 프로토콜 버퍼 포맷으로 직렬화 해서, 전체적인 패킷양을 줄여서 전송하고, 서버에서는 받은 후에, 다시 JSON으로 풀어서 사용하는 구조를 취할 수 있다. 사실 이게 바로 GRPC 구조이다.
API 게이트웨이를 백앤드 서버 전면에 배치 해놓고, 프로토콜 버퍼로 들어온 메세지 바디를 JSON으로 변환해서 백앤드 API 서버에 넘겨주는 식의 구현이 가능하다.
Thrift(Rpc framework)
페이스북에서 2011년 개발되고 2020년 아파치재단으로 오픈소소화된 IDL이자 binary communication protocol. Thrift는 Protobuf에 비해 더 다양한 문법과 많은 언어를 제공해주고 있다.
사용예
JSON-RPC
JSON으로 인코딩된 원격 프로시저 호출이다.(XML-RPC와 매우흡사). HTTP에서도 동작하고 TCP위에서도 동작한다는 점에서 REST API랑은 다르다. crud에 기반한 동작만 가능한 REST API랑은 다르게 그외 동작도 표현할 수 있다.
AJAX
Asynchronous JavaScript and XML.JavaScript와 XML을 이용한 비동기적 정보 교환 기법. 요즘엔 XML을 사용하지 않고 JSON을 사용한다. XMLHttpRequest객체를 사용(or Jquery)하다가 최근에는 Fetch API를 많이 사용한다. Ajax 기술 위에서 구현된 실시간 통신 기술로 Long polling 기술이 있다.
JWT
JSON Web Token.서명과 암호화와 관련된 데이터를 생성하는데 사용되는 인터넷 표준이다. 2010년 처음 발행되어 2015년 RFC 7519에서 표준화되었다.
JWT는 다른 JSON관련 표준에 의존한다: JSON Web Signature and JSON Web Encryption.
추가목적을 위한 상위확장(Yaml,HjSON,HOCON,JSON5)
MongoDB(JSON-like data)
다양한 라이브러리(for Java)
참고사이트
JSON
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language Standard ECMA-262 3rd Edition
www.json.org
https://en.wikipedia.org/wiki/JSON
JSON - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search "Json" redirects here. For people with similar names, see J Son. Open standard file format and data interchange JSON (JavaScript Object Notation, pronounced ; also ) is an open standar
en.wikipedia.org
구글 프로토콜 버퍼 (Protocol buffer) (tistory.com)
구글 프로토콜 버퍼 (Protocol buffer)
구글 프로토콜 버퍼조대협 (http://bcho.tistory.com) 텐서 플로우로 모델을 개발하다가 학습이 끝난 모델을 저장하여, 예측하는 데 사용하려고 하니, 모델을 저장하는 부분이 꽤나 복잡하여 찾아보니,
bcho.tistory.com
9 Advantages and Disadvantages of JSON to Pay Heed to - Tech Quintal
Protobuf와 Thrift를 알아보자! (velog.io)
왜 JSON-RPC를 사용할까? - Real Insight Comes From Fixing Error (getoutsidedoor.com)