JSON의 탄생 배경
> JavaScript Object Notation의 줄임말
> 데이터 교환을 위해 만들어진 객체 형태의 포맷
const message = {
sender: "김코딩",
receiver: "박해커",
message: "해커야 오늘 저녁 같이 먹을래?",
createdAt: "2021-01-12 10:10:10"
}
> 메시지 객체가 전송 가능하려면, 메시지를 보내는 발신자와 메시지를 받는 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태여야 함
전송 가능한 조건 (transferable condition)
- 수신자(reciever)와 발신자(sender)가 같은 프로그램을 사용한다.
- 또는, 문자열처럼 범용적으로 읽을 수 있어야 한다.
> 객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않음
> JavaScript에서 객체에 메서드(message.toString())나 형변환(String(message))을 시도하면, [object Object]라는 결과를 리턴
> 이 문제를 해결하는 방법은 객체를 JSON의 형태로 변환하거나 JSON을 객체의 형태로 변환
- JSON.stringify : Object type을 JSON으로 변환
- JSON.parse : JSON을 Object type으로 변환
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage) // `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) // `string`
-> stringify 하는 이 과정을 직렬화(serialize)한다고 함
> JSON으로 변환된 객체의 타입은 문자열
> 발신자는 객체를 직렬화한 문자열을 누군가에게 객체의 내용을 보낼 수 있음
> 수신자는 'JSON.parse'를 사용하여 문자열 메시지를 객체 형태로 변환할 수 있음
let packet = `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
let obj = JSON.parse(packet)
console.log(obj)
/*
* {
* sender: "김코딩",
* receiver: "박해커",
* message: "해커야 오늘 저녁 같이 먹을래?",
* createdAt: "2021-01-12 10:10:10"
* }
*/
console.log(typeof(obj))
// `object`
-> JSON.parse를 적용하는 이 과정을 역직렬화(deserialize)한다고 함
> JSON은 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷
> JSON 포맷은 자바스크립트를 포함한 많은 언어에서 범용적으로 사용하는 유명한 포맷
JSON의 기본 규칙
자바스크립트 객체 | JSON | |
키 | 키는 따옴표 없이 쓸 수 있음 | 반드시 큰따옴표를 붙여야 함 |
문자열 값 | 문자열 값은 어떠한 형태의 따옴표도 사용 가능 | 반드시 큰따옴표로 감싸야함 |
JSON이 XML 보다 유리한 점이 무엇인가요?
- 가독성: JSON은 더욱 간결하며, 눈으로 쉽게 읽고 이해할 수 있습니다. XML은 복잡한 구조와 태그로 인해 가독성이 떨어집니다.
- 용량: JSON은 데이터를 더 적은 용량으로 표현할 수 있습니다. 이는 네트워크 대역폭과 저장 공간을 절약하는 데 도움이 됩니다.
- 파싱: JSON은 파싱 속도가 더 빠릅니다. XML은 파싱 할 때 많은 메모리를 사용하기 때문에 대규모 데이터를 처리할 때 시간이 오래 걸립니다.
- 지원: JSON은 다양한 프로그래밍 언어에서 지원됩니다. 특히 JavaScript에서 사용하기 용이합니다. XML은 구조가 복잡하기 때문에 파싱 하기 어렵습니다.
- 유연성: JSON은 데이터를 계층적으로 표현할 수 있으며, 필요한 데이터만 선택적으로 포함시킬 수 있습니다. 이는 데이터를 쉽게 확장하고 조작할 수 있게 합니다.
XML 예시
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>Harry Potter and the Philosopher's Stone </title>
<author> J.K. Rowling </author>
<publisher> Bloomsbury Publishing </publisher>
<year>1997 </year>
</book>
텍스트 형식의 데이터 교환 포맷과 이진 형식의 데이터 교환 포맷의 차이점과 장단점은 무엇인가요?
텍스트 형식의 데이터 교환 포맷의 장점은 다음과 같습니다.
- 가독성이 좋습니다. 사람이 직접 읽을 수 있기 때문에 디버깅과 유지보수가 쉽습니다.
- 다양한 텍스트 에디터와 프로그래밍 언어에서 지원됩니다.
- 텍스트 데이터이기 때문에 압축이나 인코딩 등의 처리가 용이합니다.
하지만, 텍스트 형식의 데이터 교환 포맷은 다음과 같은 단점도 가지고 있습니다.
- 데이터 크기가 크기 때문에 전송 시에 대역폭을 많이 차지할 수 있습니다.
- 파싱(Parsing) 속도가 느릴 수 있습니다.
- 구조화된 데이터의 계층 구조를 표현하기 위해 태그, 인덴트 등의 추가 정보가 필요하기 때문에 불필요한 데이터가 포함될 수 있습니다.
반면, 이진 형식의 데이터 교환 포맷은 다음과 같은 장점이 있습니다.
- 데이터 크기가 작아서 전송 시에 대역폭을 적게 차지합니다.
- 파싱 속도가 빠릅니다.
- 텍스트 형식보다 더욱 효율적인 데이터 압축 방식을 사용할 수 있습니다.
하지만, 이진 형식의 데이터 교환 포맷은 다음과 같은 단점도 가지고 있습니다.
- 사람이 직접 읽을 수 없어서 디버깅과 유지보수가 어렵습니다.
- 다양한 데이터 타입과 포맷을 지원하기 어렵습니다.
- 다양한 플랫폼과 언어에서 지원하지 않을 수 있습니다.
'DevOps BootCamp > 마이크로서비스' 카테고리의 다른 글
메시지 브로커를 이용한 비동기식 통신 (0) | 2023.05.08 |
---|---|
동기식 요청/응답 통신 REST (0) | 2023.05.08 |
API 디자인과 프로세스 간 통신 (0) | 2023.05.08 |
도메인 주도 설계 예시 (0) | 2023.05.04 |
서버리스 (0) | 2023.05.03 |