JSON과 Payload

서버와 웹, 또는 앱이 통신을 할 때는 데이터를 주고 받는다. 여러가지 방법이 있겠지만, 최근에 가장 많이 사용하는 포맷은 Json 이라는 포맷이다. 만약 IT 바닥에서 조금 일해본 사람이라면 비개발자라고 해도 들어본 단어일거라 생각한다.(라고 생각해본다.) API와 REST 같은 더 이해안되는 용어들을 굳이 끌어들이지는 않겠다. 하지만 비개발자가 개발용어들의 뜻이나 역할에 대해서 정확히 알기 어렵기도 하고, 나도 갑자기 궁금증이 생겨서 겸사겸사 정리해본다.

JSON이란 무엇일까.

일단, JSON은 데이터 양식이다. 파일로 만들려고 한다면 *.json 이라는 확장자를 갖는다. 파일을 열어보면 아무것도 없다. 마치 콤마로 구분된 CSV 파일을 보는 느낌이다.

집합의 합집합 느낌일까. 집합 기호인 중괄호로 묶여있고, 그 안에 Key/Value 라고 부르는 데이터들의 쌍으로 이루어져 있다. 딱히 순서는 없어보이지만, JSON 메세지의 단위는 배열이나 객체이기 때문에, 복잡한 객체 구조를 갖기도 한다.

JSON을 이용하는 이유는 텍스트로만 이루어져있기 때문에 사람과 기계가 모두 읽기 쉽고, 프로그래밍 언어와 플랫폼에 종속되지 않기 때문에 다른 시스템끼리 교환하기 좋다고 한다.

대략적인 내용은 인터넷을 뒤졌다. 나도 무슨 소리를 하고있는지 잘 모르겠다.
- JSON이란 무엇인가?
- REST API의 이해와 설계-#1 개념 소개

곰곰히 생각하지 않고, 언뜻보면 책의 목차처럼 생겼다. 순서가 딱히 없는 데이터 집합이지만, 객체 안에 객체가 들어있는 경우라면 그 구조를 틀었을 때 문제가 발생하곤 한다. 책의 목차를 잘 설계해두었는데, 순서를 바꾸면 앞뒤가 꼬이거나, 내용이 이상해져버리는 거랑 비슷하다. 특히 데이터를 받고나서는 모델링 과정을 거치는데, 만약 주고받는 주체끼리의 약속을 지키지 않고 멋대로 바꿨다간 받는 쪽에서 터질 확률이 매우 높아진다.

Payload란 무엇일까.

내가 페이로드(Payload)라는 단어를 처음 알게된 것은 푸시때문이다. 서버가 푸시를 보낼 때, 어떤 데이터들을 담아서 보낼지에 대해서 이야기할 때 쓰는 용어라서다. 아마도 APN(Apple Push Notificaion)에서 페이로드의 제약(256KB)이 심했고, 그래서 푸시를 보낼 때 글자수 제한 같은 것이 있었다가, 2014년부터 2MB 까지 용량이 늘어나면서 푸시를 보낼 때 메세지 길이의 압박이 없어졌던 걸로 기억한다.

생긴건 당연히 Json의 형태이고, 비슷하게 생겼다. 근데 왜 페이로드라는 이름으로 부를까.(👈 글을 쓰게 된 이유) 이런 쓸데없는 것에 관심을 가지니 아마도 개발공부에 진척이 없었던 것 같다. 아아 내 대학 등록금이여.

각설하고, 페이로드가 무슨 의미인지에 대해 검색을 해보았다.

The term 'payload' is used to distinguish between the 'interesting' information in a chunk of data or similar, and the overhead to support it. It is borrowed from transportation, where it refers to the part of the load that 'pays': for example, a tanker truck may carry 20 tons of oil, but the fully loaded vehicle weighs much more than that - there's the vehicle itself, the driver, fuel, the tank, etc. It costs money to move all these, but the customer only cares about (and pays for) the oil, hence, 'pay-load'.

In programming, the most common usage of the term is in the context of message protocols, to differentiate the protocol overhead from the actual data.

(출처 : terminology - What does the term “Payload” mean in programming - Software Engineering Stack Exchange)

음. 요약하자면, 관심있는 것만 콕 찝은, 그걸 부르는 단어다. 내가 공항으로 가기까지 시간이 남는다거나 졸음을 피하기 위해 잉여력을 쓰고 있는 것은 아니고, 그냥 이해를 돕기위해서 발로 그린 그림을 첨부했다.

Slice 4

친절한 답변의 설명에 의하면, 내가 비용을 지불하고자 하는 적재량, 즉 그것을 페이로드(pay-load)라고 부르는 것이다.

위의 설명 중에 예제로 소개한 코드를 보면

[code]
{
"status":"OK",
"data":
{
"message":"Hello, world!"
}
}
[/code]

중에 Hello, world! 가 페이로드 되시겠다. (추가. 페이로드는 관심있는 부분을 말한다. 관점에 따라, 어디까지 페이로드라고 부를지가 달라진다.) 그리고 나에게 쓸모는 없지만, 그 페이로드를 감싸고 있는 구조체나 레이블, 기타 등등은 프로토콜 오버헤드(overhead) 라고 부른다. 아무래도 오일탱크를 싣고 온 트럭의 큰 대가리를 칭하나보다. (틀려)

적게 일하고 많이 버는 법을 늘 고민합니다. 일이 되게 하는 것에 간혹 목숨을 겁니다. 지금은 우아한형제들과 함께 일하고 있어요.