32KB PubNub 메시지에는 몇 개의 문자가 들어갈 수 있나요?
Published: 2024-02-21 13:58:27

PubNub 메시지의 최대 길이는 32KB입니다( [PubNub SDK 문서](https://www.pubnub.com/docs) 및 [PubNub 소프트 및 하드 제한](https://www.pubnub.com/docs/sdks/javascript) 참조). 32KB를 초과하면 메시지가 [전달되지](https://support.pubnub.com/hc/en-us/articles/360051495852-What-happens-to-messages-that-exceed-the-size-limit) 않습니다. 그렇다면 메시지에서 32KB는 실제로 어떤 모습일까요? [IoT 기반 솔루션을](https://support.pubnub.com/hc/en-us/articles/360051495872-What-is-the-maximum-message-size) 구축하는 경우 메시지 크기에 대해 크게 걱정하지 않으셔도 됩니다. 지리적 위치에 필요한 경도 및 위도, 임베디드 시스템의 온도 또는 센서 데이터, 조명이나 기타 스마트 기기를 제어하기 위한 짧은 지침과 같은 짧은 업데이트 정보만 전송할 가능성이 높습니다. 마찬가지로 실시간 대규모 [온라인 게임의](https://www.pubnub.com/solutions/gaming/) 리더보드도 32KB에 쉽게 들어갑니다. 그러나 단일 PubNub 메시지에 더 많은 정보가 필요한 사용 사례도 많이 있습니다. [채팅 메시지나](https://www.pubnub.com/solutions/chat/) [코그너티브 서비스의](https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/) 분석을 생각해 보세요. 이 글에서는 채팅 메시지를 예로 들어보겠습니다.

수학을 해봅시다
--------

페이로드의 총 크기를 파악하려면 먼저 채팅 메시지가 어떻게 생겼는지 정의해야 합니다. 계산에 사용할 채팅 메시지에는 채널, '사이드 채널' 정보, 실제 텍스트 자체 등 전체 페이로드가 포함됩니다. PubNub에서 패키징하면 타임스탬프(타임토큰)와 라우팅에 필요한 기타 제어 정보를 포함한 봉투 정보도 포함됩니다. 클라이언트에서 게시하는 메시지는 다음과 같이 보일 수 있습니다:

```js
var channel = "doc_patient_comms_a";
var message = {
    "name" : "Dr. Blackwell",
    "company" : "Sunnydale Memorial",
    "uuid" : "uuid-string",
    "text" : "Your test results are back and everything looks normal."
};
```

[메시지 크기를 계산하려면](https://support.pubnub.com/hc/en-us) 채널 이름과 메시지 페이로드(JSON) 문자열을 결합하고 결과를 URI 인코딩한 다음(Javascript의 encodeURIComponent) 메시지 길이(Javascript의 String.length)를 확인합니다. 그런 다음 PubNub 봉투(메타데이터) 정보를 고려하여 결과에 100을 더하는 것이 가장 좋은 방법입니다. [전체 자바스크립트 함수와](https://support.pubnub.com/hc/en-us) 70개 이상의 지원되는 다른 SDK 중 하나에 맞게 함수를 구성하는 방법에 대한 아이디어는 지원 문서를 참조하세요.

예제
--

이제 메시지 크기를 계산하는 방법을 알았으니, 과거 텍스트와 PubNub 메시지로 전송할 수 있는 잠재적 텍스트를 살펴보며 PubNub API의 기능을 살펴봅시다. 예를 들어, 토머스 제퍼슨의 [독립 선언문은](https://www.archives.gov/founding-docs/declaration-transcript) 다음과 같은 방식으로 PubNub 메시지로 인코딩할 수 있습니다:.

```js
var channel = "continental_congress_declaration_subcommittee";
var message = {
    "name" : "Mr. Jefferson",
    "uuid" : "4f4ec1b4-4957-4125-9103-c6edcfe37770",
    "text" : "The unanimous Declaration of the thirteen united States of America, When in the Course of human events[…]our sacred Honor."
};
```

메시지 콘텐츠에 JSON 객체를 사용하면 이 메시지는 11.4KB로 계산됩니다. 따라서 제퍼슨은 하나의 PubNub 메시지로 두 개의 선언문 사본을 전송할 수 있으며, 이는 250ms 미만의 최소 지연 시간으로 글로벌 데이터를 전송하는 PubNub API의 효율성을 보여줍니다.

또 다른 예로 [프로젝트 구텐베르크의](https://www.gutenberg.org/) 작품인 Don Berry의 "Routine for a Hornet"을 생각해 보세요. PubNub의 메시지 지속성 기능을 사용하면 이 단편 소설의 상당 부분을 인코딩할 수 있습니다:

```js
var channel = "worlds_of_science_fiction_editors";
var message = {
    "name" : "Don Berry",
    "uuid" : "99c8361f-ac61-47f5-9b5f-22095227e6e3",
    "text" : "ROUTINE for a HORNET[…]in any case."
};
```

하나의 페이로드로 "공상 과학 소설의 세계"에 나오는 이 단편 소설의 약 85%를 보낼 수 있지만, "...어떤 경우에도 그는 조종 장치에서 손을 뗄 수 없었다"라는 절벽에서 멈추고 나머지는 두 번째 메시지로 보내야 합니다. 그러나 각 메시지가 50-250ms 후에 도착하므로 잠시 기다릴 수 있습니다. 영국 고블린: 웨일스 민속, 요정 신화, 전설 및 전통 Sikes의 책입니다. 이 책은 긴 책입니다(파일 크기 773kB). 누군가 이 책을 보내려면 여러 조각으로 나눠서 보내야 합니다. 제 테스트에서는 각 책의 각 챕터가 페이로드를 가득 채웠습니다. 예를 들어 "책 1 요정의 영역, 1장 - 동화와 고대 신화..."는 그 자체로 23KB입니다. 페어리랜드에 대해 알아야 할 것이 많습니다.

```js
var channel = "british_goblin_researchers";
var message = {
    "name" : "Sikes",
    "uuid" : "8044e839-a3b2-4bab-b2d1-c52897299cf5",
    "text" : "BOOK I.[…]'Welsh Melodies.'"
};
```

모범 사례
-----

지금까지 살펴본 바와 같이 32KB는 적당한 텍스트 양입니다. 그러나 모든 사용자 생성 메시지의 크기를 테스트하는 것이 가장 좋습니다. 너무 큰 경우 지원 문서 "[PubNub로 대용량 메시지를 보낼 수 있나요?](https://support.pubnub.com/hc/en-us/articles/360051495792-Can-I-send-large-messages-with-PubNub-#latest)"에 조정 방법에 대한 몇 가지 제안이 있습니다. 또한 메시지를 암호화하면 30%가 추가될 수 있고 더블바이트 언어로 작성된 메시지는 더 많은 공간을 차지하므로 이에 따라 계획하세요. 프로 팁: 메시지 크기를 1.5KB로 유지하면 하나의 TCP 패킷에 들어갈 수 있습니다. 이미지는 어떤가요? 이미지는 Base-64로 변환하여 전송할 수 있습니다. 이러한 변환은 상당한 오버헤드를 추가하므로 다시 한 번 시스템을 테스트해 보세요. 아이디어를 얻으려면 [DIY Snapchat 클론](https://www.pubnub.com/blog/diy-snapchat-clone-capture-send-images-javascript-tutorial/) 데모 프로젝트를 확인하세요. 마지막으로 250ms란 무엇인가요? 250밀리초는 이 문장을 읽는 데 걸리는 시간보다 짧은 시간입니다. 전 세계 15개 지점과 특허받은 실시간 아키텍처를 갖춘 PubNub는 페이로드를 빠르게 전송합니다.

마지막 생각
------

새 프로젝트를 시작하기 전에 모든 기술적 질문에 답하려고 시도하고 싶을 수 있습니다. PubNub SDK의 장점은 정답이 하나만 있는 경우가 거의 없다는 것입니다. [블로그에](https://www.pubnub.com/blog/) 많은 예제가 있으니 막막한 점이 있으면 언제든지 [문의해](https://support.pubnub.com/hc/en-us) 주세요 - 여러분의 성공을 기원합니다. 무언가를 만들어서 오픈소스로 공개하고 싶으시다면 [개발자 지원팀에](mailto:devrel@pubnub.com) 문의해 주세요.

### 이 블로그의 PubNub 메시지

```js
var channel = "my_channel";
var message = {
    "name" : "Mark Williams",
    "uuid" : "d75dace8-1f15-4b8e-80a3-646ad97b58de",
    "text" : "The maximum length […] we would love to see it."
};
```

이 블로그 게시물은 10.5k

### 시작하기

지금 바로 PubNub을 시작하세요! [PubNub 계정에 가입](https://www.pubnub.com/docs/general/basics/set-up-your-account) 하고 키세트를 확인하여 게시 키와 구독 키를 받은 후 다음을 포함하여 PubNub에서 제공하는 모든 것을 확인하세요:

1.  [게시](https://www.pubnub.com/docs/messages/publish): 텍스트 업데이트, 이모티콘 반응, 전송된 파일, 기타 복잡한 메타데이터 등 사용자 입력이 업데이트될 때마다 메시지를 전송하세요. [메타데이터](https://www.pubnub.com/docs/metadata/channel-metadata).
    
2.  [구독](https://www.pubnub.com/docs/messages/receive): 새 메시지를 수신하여 사용자 화면을 새로 고칩니다.
    
3.  [프레즌스](https://www.pubnub.com/docs/presence/overview): 사용자의 온라인 상태를 업데이트하고 감지합니다.
    
4.  [메시지 지속성](https://www.pubnub.com/docs/storage): 사용자가 앱에 로그인하면 수신된 모든 메시지를 표시하거나 프로젝트 및 문서 수정본을 추적합니다.
    
5.  [모바일 푸시 알림](https://www.pubnub.com/docs/push/send): 앱에서 떨어져 있는 모바일 사용자에게 채팅 메시지, 프로젝트 업데이트 또는 애플리케이션 업데이트에 대해 알립니다.
    
6.  [앱 컨텍스트](https://www.pubnub.com/docs/general/metadata/channel-metadata): 데이터베이스를 설정하거나 호출하지 않고도 사용자에 대한 정보를 한 곳에 저장하세요.
    
7.  [액세스 관리자](https://www.pubnub.com/docs/security/access-control): 특정 사용자의 비공개 대화, 채널룸, 문서, 프로젝트에 대한 액세스를 제한하세요.
    
8.  [기능](https://www.pubnub.com/docs/general/serverless/functions/overview): 메시지 번역, 부적절한 메시지 검열, 새 사용자 도착 알림, 다른 사용자에게 멘션 알림 등의 기능을 제공합니다.
    
9.  [이벤트 및 작업](https://www.pubnub.com/docs/general/serverless/events-and-actions/overview): 애플리케이션 에코시스템의 이벤트를 중앙에서 관리하고 코드 없이 비즈니스 로직을 트리거할 수 있습니다.