API 에서 가져온 DATA를 직렬화 할 때 어떠한 형식으로 나타내야 가장 효율적인지 알아봅시다! API 데이터 폼에는 총 6가지 정도가 존재한다고 합니다.
XML부터 알아봅시다.
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
XML의 tree 구조는 자원을 표현하는 데에 그리 효과적인 포맷은 아닌 것 같다고 판단했다.(Array의 표현이 어려움) 옛날엔 많이 쓰였다고 하는데, 주관적인 의견을 덧대자면 진짜 이거 왜 쓰는지 모르겠다. 아직도 공공 API의 일부가 XML을 쓰는 게 정말 놀랍다. (출처 : https://velog.io/@city7310)
XML 언어는 유연하고 작성하기 쉬운 언어일 수 있습니다. 그러나 사람이 보기에는 눈에 잘 들어오지 않는 직관적이지 못한 언어라고 생각합니다. 이는 정보를 전달하는데 필요하지 않은 구문들을 포함하고 있으며, 사람이 읽고 해석하기 어려운 언어이기에 쓰는 곳이 거의 없습니다.
[a.b.c]
d = 'Hello'
e = 'World'
위의 내용이 아래와 같이 간결화 된다.
{
"a": {
"b": {
"c": {
"d": "Hello"
"e": "World"
}
}
}
}
TOML을 사용하면 깊이 중첩된 데이터 구조를 빠르고 간결하게 정의할 수 있습니다. JSON 과 비교할 수도 있지만 .ini 파일과 더 유사합니다.
TOML을 사용하면 시간과 파일 길이 모두를 절약할 수 있게 됩니다. 그렇지만 이와 유사한 시스템과 호환되는 시스템이 적기 때문에 단점으로 꼽힙니다. TOML을 해석하는 언어나 라이브러리는 대중적이지 않습니다.
CSON은 CoffeeScript Object Notation을 나타내며 코드는 다음과 같다.
books: [
id: 'bk102'
author: 'Crockford, Douglas'
title: 'JavaScript: The Good Parts'
genre: 'Computer'
price: 29.99
publish_date: '2008-05-01'
description: 'Unearthing the Excellence in JavaScript'
]
CSON은 JavaScript에 필요한 많은 추가 구문을 제거하기 때문에 작성을 더욱 쉽게 만듭니다. JSON에서 중괄호를 제거한 형태를 띄어 읽고 쓰기가 매우 쉽다고 볼 수 있습니다. 쉼표등으로 키-값 쌍을 구분할 필요가 없고 주석을 입력할 수 있습니다.
그러나 단점으로 꼽히는 것은 역시나 호환성의 문제입니다. CoffeeScript의 객체를 표기하고 이를 다른 시스템으로 전달할 때 이 시스템 안에서만 읽을 수 있는 직렬화 포맷이 있기 때문에 PHP 또는 JAVA 같은 언어로 사용하는 것이 불가능 합니다. 아마도 이 형식이 다른 시스템에서 이용된다면 개발자들에게 굉장히 유용할 것이다.
books:
- id: bk102
author: Crockford, Douglas
title: 'JavaScript: The Good Parts'
genre: Computer
price: 29.99
publish_date: !!str 2008-05-01
description: Unearthing the Excellence in JavaScript
YAML은 거의 모든 웹 프로그래밍 언어에서 사용할 수 있는 parser을 가지고 있습니다. CSON 만큼 간결하다는 큰 장점이 있습니다. 그래서 사람들이 읽기가 쉽고 해석하기도 어렵지 않습니다. 다만 YAML의 parser는 아직 많은 언어로 빌드되지 않았으며, 역직렬화가 어렵다는 단점을 가지고 있습니다.
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
직렬화 속도가 빠르고 직렬화된 파일의 크기도 작다. 또한 다양한 언어를 지원한다는 것이 큰장점이다. JSON으로 전환도 가능하다.
그러나 protobuf를 사용한다면 서비스 규모가 크지 않으므로 조직내의 다른 사람들에게 혼동을 줄 수 있다.
{
"books": [
{
"id": "bk102",
"author": "Crockford, Douglas",
"title": "JavaScript: The Good Parts",
"genre": "Computer",
"price": 29.99,
"publish_date": "2008-05-01",
"description": "Unearthing the Excellence in JavaScript"
}
]
}
JavaScript Object Notation의 줄임말로 가장 통용되는 API 데이터 폼중 하나입니다. 사람과 컴퓨터 모두 작성하고 해석하기 쉬우며, 많은 rule들이 있기 때문에 구문 분석하기도 어렵지 않습니다.
JSON은 많은 엔지니어들에게 익숙한 폼이므로 JSON으로 데이터를 포맷하는 것이 가장 좋다고 생각합니다.