PubNub은 최소 지연 시간으로 WebSocket을 통해 메시지를 게시하고 구독하기 위한 인프라를 제공하는 실시간 메시징 글로벌 네트워크입니다. 높은 부하와 불안정한 연결에서도 안정적인 데이터 전달이 필요한 애플리케이션을 위해 설계되었습니다. PubNub 공식 문서(2025)에 따르면, 플랫폼은 전 세계 70,000개 이상의 애플리케이션을 위해 매월 1조 개 이상의 메시지를 처리합니다.
주요 포인트
PubNub은 2010년에 설립된 글로벌 실시간 데이터 네트워크입니다. 메시지 게시 및 구독을 위한 API를 제공하며, 추가 서비스로 기록 저장, 프레즌스 관리, 서버리스 함수(PubNub Functions) 및 데이터 스트림 분석을 제공합니다.
PubNub의 아키텍처는 15개 이상의 지리적 영역에 위치한 분산된 프레즌스 포인트(POP) 네트워크를 기반으로 합니다. 각 포인트에는 게시자와 구독자 간에 최소 지연 시간으로 메시지를 라우팅하는 캐싱 브로커가 포함되어 있습니다. PubNub은 단일 중앙 브로커를 사용하지 않으며, 각 지역이 독립적으로 운영되고 글로벌 네트워크를 통해 동기화됩니다.
PubNub 공식 웹사이트(2025)에 따르면, 플랫폼은 200개 이상의 국가에서 70,000개 이상의 애플리케이션을 서비스합니다. 주요 고객으로는 Logitech(IoT 기기 관리), GoPro(실시간 비디오 스트리밍), eBay(경매 동기화), Snapchat(채팅 및 알림)이 있습니다.
PubNub은 세 가지 원칙을 기반으로 구축되었습니다. 속도(단일 지역 내 95백분위수에서 10ms 미만 지연 시간), 신뢰성(자동 재시도 포함 at-least-once 전달 보장), 확장성(채널 수 제한 없는 수평 확장)입니다. 플랫폼은 메시지를 장기 저장소에 보관하지 않으며, 기록은 별도로 연결된 Storage & Playback 서비스를 통해 이용할 수 있습니다.
PubNub의 운영 모델은 클래식 게시-구독 패턴을 기반으로 합니다. 게시자 클라이언트는 publish 키와 함께 PubNub REST API를 통해 채널을 지정하여 메시지를 보냅니다. PubNub은 활성 WebSocket 연결을 통해 해당 채널의 모든 구독자에게 메시지를 전달합니다. 구독자는 PubNub SDK에 등록된 콜백 핸들러를 통해 메시지를 수신합니다.
PubNub의 전송 계층은 기본 프로토콜로 WebSocket을 사용하며, 제한이 있는 환경을 위해 HTTP long-polling으로 폴백합니다. SDK는 연결 설정, 하트비트 유지(네트워크에 따라 15~60초 간격), 연결 끊김 시 재연결을 자동으로 관리합니다.
PubNub의 각 메시지에는 메타데이터가 포함됩니다. 발신자 UUID, 타임스탬프, 시퀀스 번호(timetoken) 및 플래그(store, replicate, eatAfterRead)입니다. Timetoken은 채널 내에서 메시지의 전역 순서를 보장하는 시간 기반의 고유 PubNub 식별자입니다. PubNub 문서(2025)에 따르면, timetoken의 해상도는 10나노초입니다.
클라이언트가 메시지를 게시하면 Stream Controller(PubNub의 라우팅 모듈)를 통과합니다. Stream Controller는 접근 권한(PAM)을 확인하고, 변환 규칙(PubNub Functions)을 적용하며, 대상 지역을 결정하고 모든 구독자에게 메시지를 전송합니다. 구독자가 오프라인 상태인 경우, 연결 복구를 기다리는 동안 메시지는 기본적으로 30초 동안 버퍼링됩니다.
PubNub의 키 시스템은 접근 권한을 세 가지 수준으로 분리합니다. publish 키(게시 전용), subscribe 키(구독 전용), secret 키(관리)입니다. 각 애플리케이션은 등록 시 세 개의 키 세트를 받지만, secret 키는 클라이언트에 절대 전송되지 않으며 서버 측에서만 사용됩니다.
Publish 키는 채널에 메시지를 보내는 데 사용됩니다. Subscribe 키는 채널을 구독하고 메시지를 수신하는 데 사용됩니다. Secret 키는 PubNub Access Manager(PAM)를 통한 접근 관리, 임시 오디언스 토큰 생성 및 키 관리에 사용됩니다. Secret 키는 서버에 안전하게 보관되며 클라이언트에 절대 공개되지 않습니다.
PubNub은 여러 인증 모드를 지원합니다. IP 주소 기반(서버용), secret 키 기반(관리 작업용), 임시 토큰 기반(클라이언트용)입니다. 임시 토큰은 PAM을 통해 만료 시간, 채널 및 권한(read, write, manage) 제한과 함께 발급됩니다.
PubNub 채널은 명명된 메시지 경로입니다. 채널 이름은 최대 92자의 문자열로, 라틴 문자, 숫자, 하이픈 및 밑줄을 지원합니다. 채널은 첫 번째 게시 또는 구독 시 동적으로 생성됩니다. PubNub은 구독 요청의 * 문자를 통해 채널 패턴을 지원하여 채널 그룹(예: user-*)을 구독할 수 있습니다.
Channel Groups은 대량 구독을 위한 채널 그룹화 메커니즘입니다. 50개의 개별 채널을 구독하는 대신 클라이언트가 하나의 그룹을 구독하면 해당 그룹 내 모든 채널의 메시지가 자동으로 클라이언트에 전달됩니다. Channel Groups는 중첩을 지원하지만 깊이는 3레벨을 초과하지 않아야 합니다.
PubNub 기술 문서(2025)에 따르면, 채널당 최대 구독자 수는 50,000명입니다. 더 높은 부하의 경우 접두사가 있는 채널을 사용하고 대상을 샤딩하는 것이 좋습니다(예: chat-room-001, chat-room-002). Channel Groups는 지리적 또는 주제별 원칙으로도 구성할 수 있습니다.
| 매개변수 | 최대 | 참고 |
|---|---|---|
| 채널 이름 길이 | 92자 | 라틴 문자, 숫자, -, _ |
| 채널당 구독자 | 50,000 | 초과 시 샤딩 |
| Channel Groups | 2,000그룹/키 | 그룹당 최대 500채널 |
| 기록(저장소) | 무제한 | 저장 용량별 지불 |
PubNub 통합을 위해서는 등록, 관리 패널에서 애플리케이션 생성 및 키 세트 획득이 필요합니다. PubNub 라이브러리는 JavaScript, Swift, Kotlin, Java, Dart(Flutter), C#, Python, Ruby, Go 등 많은 언어에서 사용할 수 있습니다. 브라우저 및 Node.js용 JavaScript 예제를 살펴보겠습니다.
PubNub 문서(2025)에 따르면, pubnub-js 라이브러리는 CommonJS 및 ES Module 가져오기를 모두 지원합니다. 브라우저의 경우 npm 빌드 후 webpack 또는 Vite를 통해 번들링하는 것이 좋습니다.
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'PUBLISH_KEY',
subscribeKey: 'SUBSCRIBE_KEY',
userId: 'user-100'
});
pubnub.subscribe({
channels: ['chat-general']
});
pubnub.addListener({
message: (event) => {
console.log('새 메시지:', event.message);
},
presence: (event) => {
console.log('프레즌스:', event.uuid, event.action);
}
});
pubnub.publish({
channel: 'chat-general',
message: { text: 'Hello everyone!', sender: 'user-100' }
});
pubnub.fetchMessages(
{ channels: ['chat-general'], count: 50 },
(status, response) => {
if (status.error) {
console.error('기록 가져오기 오류', status);
return;
}
const messages = response.channels['chat-general'];
messages.forEach((msg) => {
console.log(msg.message, msg.timetoken);
});
}
);
PubNub Functions는 PubNub 측에서 메시지를 처리하기 위한 서버리스 플랫폼입니다. 함수는 JavaScript로 작성되며 안전한 격리 환경(V8 isolate)에서 실행됩니다. 구독자에게 전달되기 전에 메시지를 변환, 필터링, 버퍼링 및 리디렉션할 수 있습니다.
Stream Controller는 규칙에 따라 메시지 흐름을 관리하는 내장 라우팅 메커니즘입니다. 규칙은 어떤 메시지를 전달하고, 어떤 메시지를 폐기하며, 어떤 메시지를 처리를 위해 PubNub Functions로 보낼지 결정합니다. Stream Controller는 메시지 내용, 채널 유형 또는 메타데이터에 의한 조건부 라우팅을 지원합니다.
PubNub 블로그(2024)에 따르면, PubNub Functions는 필터링 및 변환 로직을 자체 서버 대신 PubNub 에지 노드에서 실행하여 메시지 처리를 위한 서버 인프라 비용을 40~60% 절감합니다. 함수는 HTTP 요청, Key-Value 저장소 및 동일한 공간 내의 다른 함수에 액세스할 수 있습니다.
모바일 플랫폼용 PubNub SDK는 iOS(Swift), Android(Kotlin/Java), Flutter(Dart) 및 React Native(JavaScript)에서 사용할 수 있습니다. 모바일 SDK는 pub/sub, 프레즌스, 기록, PAM 및 PubNub Functions의 전체 기능을 지원합니다. 푸시 알림의 경우 PubNub은 특수 모바일 푸시 게이트웨이 메커니즘을 통해 APNs 및 FCM과 통합됩니다.
모바일 기기 최적화에는 적응형 하트비트, 배치 메시지 처리 및 백그라운드 모드 지원이 포함됩니다. iOS용 PubNub SDK는 앱이 최소화되었을 때 Background Task API를 사용하여 연결을 유지합니다(최대 30초의 표준 백그라운드 시간). 더 긴 백그라운드 작동을 위해서는 푸시 알림이 필요합니다.
Mobile Push Gateway는 PubNub을 통해 푸시 알림을 보내는 메커니즘입니다. 메시지가 채널에 게시되면 PubNub이 자동으로 오프라인 구독자를 확인하고 APNs(iOS) 또는 FCM(Android)을 통해 푸시 알림을 보냅니다. 구성은 관리 패널에서 한 번만 수행하면 이후 채널의 모든 메시지가 자동으로 푸시 채널에 복제됩니다. PubNub 문서(2025)에 따르면, 게이트웨이는 초당 최대 10,000개의 푸시 알림을 처리합니다.
자주 묻는 질문
PubNub은 더 많은 SDK(75개 이상 플랫폼), 내장 서버리스 함수 및 메시지 처리를 위한 Stream Controller를 제공합니다. Pusher는 설정이 더 간단하지만 PubNub은 라우팅 및 데이터 변환에 대한 더 많은 제어를 제공합니다.
PubNub은 장애 시 자동 재시도와 함께 at-least-once 메커니즘을 사용합니다. 각 메시지에는 중복 제거를 위한 고유 timetoken이 있습니다. 오프라인 구독자를 위해 메시지는 30초 동안 버퍼링됩니다.
무료 요금제에는 100개의 동시 연결과 월 100만 개의 메시지가 포함됩니다. 유료 요금제는 무제한 메시지와 함께 1,000개의 동시 연결에 대해 월 $49부터 시작합니다.
네, PubNub은 모든 연결에 대해 TLS 1.3을 지원하며 PAM을 통한 키 관리와 함께 선택적 종단 간 클라이언트 암호화(AES-256)를 제공합니다. 엔터프라이즈 고객을 위해 Cipher Key 모드를 사용할 수 있습니다.
PubNub은 75개 이상의 플랫폼용 SDK를 제공합니다. 여기에는 JavaScript, Swift, Kotlin, Java, Dart, C#, Python, Ruby, Go, C++, PHP, Rust 및 Objective-C가 포함됩니다. 이는 실시간 서비스 중 가장 큰 생태계입니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.