DEV Community

Cover image for PubNub 프레즌스 활성화 및 구성 방법

PubNub 프레즌스 활성화 및 구성 방법

사용자가 언제 온라인 또는 오프라인 상태가 되는지, 클라이언트 디바이스의 연결 여부와 연결이 끊어지는 시점을 어떻게 감지할 수 있을까요? PubNub 프레즌스 기능을 사용하면 채널에 연결된 사용자를 실시간으로 추적하고 연결 상태가 변경되면 알림을 받을 수 있습니다.

Embedded YouTube Video

비디오 보기

프레즌스 시스템은 매우 유연하며 다음과 같은 사용 사례를 지원합니다:

  • 사용자가 채팅 대화에 참여하거나 떠날 때 모니터링하기
  • 사용자의 온라인 또는 오프라인 상태 감지
  • IoT 디바이스의 연결 및 사용 가능 여부 확인
  • 채널에 연결된 클라이언트 수 계산(채널 점유 수)

또한 관심 있는 모든 수신자가 수신할 클라이언트의 현재 상태에 수반되는 일부 상태 정보(메타데이터)를 정의할 수도 있습니다. 예를 들어, 클라이언트의 현재 상태가 '온라인'이지만 사용자가 사용자 지정 상태를 '외출' 또는 '방해 금지'로 설정하도록 선택할 수 있습니다.

PubNub 프레즌스 기능을 사용 설정하려면 관리자 포털에 로그인하여 프레즌스 기능을 사용 설정하려는 앱과 키 세트로 이동한 다음 해당 키 세트의 구성 화면에서 프레즌스 스위치를 토글합니다:

Portal Configuration: Presence Enable

프레즌스를 사용 설정할 것인지 확인하는 메시지가 표시됩니다.

특히 트랜잭션 기반 요금제를 사용하는 경우 프레즌스를 사용 설정하면 트랜잭션 수가 훨씬 더 많이 발생할 수 있습니다. 트랜잭션 수를 제어하려면 이 문서의 뒷부분에 설명된 '프레즌스 관리' 기능을 사용하면 됩니다.

Portal Configuration: Presence Enable Confirm

키 설정 구성을 수정할 때마다 변경 사항을 저장해야 합니다.

Portal Configuration: Presence Confirm Changes

발표 모드

이 기능을 활성화하면 클라이언트(사용자 또는 디바이스)가 채널을 구독하거나 구독을 취소할 때 PubNub에서 자동으로 프레즌스 이벤트를 생성합니다.

클라이언트가 채널에 가입하면 가입 이벤트가 생성됩니다:

{ "채널": "<가입한 채널의 이름>", "action": "join", "occupancy": 2, // 채널 점유 "uuid": "<참여한 클라이언트의 사용자 아이디>", "timetoken": "<가입이 발생한 시점>" }
Enter fullscreen mode Exit fullscreen mode

클라이언트가 채널에서 구독을 취소하면 탈퇴 이벤트가 생성됩니다:

{ "채널": "<탈퇴한 채널 이름>", "action": "leave", "occupancy": 1, // 채널 점유 "uuid": "<이탈한 클라이언트의 사용자 아이디>", "타임토큰": "<이탈이 발생한 시점>" }
Enter fullscreen mode Exit fullscreen mode

채널에 연결된 웹 클라이언트에서 사용자가 구독 취소를 허용하지 않고 강제로 탭을 닫았다고 가정해 봅시다:

클라이언트가 명시적으로 구독을 취소하지 않았지만 일정 시간(기본값 300초) 후에 존재하지 않는 것으로 감지되면 시간 초과 이벤트가 트리거됩니다:

{ "채널": "<시간 초과된 채널 연결 이름>", "action": "timeout", "occupancy":1, // 채널 점유 "uuid": "<시간 초과된 클라이언트의 사용자 아이디>", "타임토큰": "<타임아웃이 발생한 시점>" }
Enter fullscreen mode Exit fullscreen mode

TCP FIN 또는 RST에서 Leave 생성하기

위 시나리오에서 타임아웃 이벤트를 기다리는 대신 네트워크 수준에서 클라이언트가 채널을 떠나는 시점을 감지하는 또 다른 옵션이 있습니다. 키셋에서 'TCP FIN 또는 RST에서 이탈 생성' 옵션을 활성화하면 이 시나리오에서 브라우저 탭을 강제로 닫으면 이제 타임아웃 이벤트 대신 즉시 발생하는 이탈 이벤트가 생성됩니다.

Portal Configuration: Presence Generate Leave TCP FIN RST

디바운스

네트워크 문제나 애플리케이션 디자인으로 인해 클라이언트가 채널에 빠르게 가입했다가 탈퇴하는 경우가 있습니다. 과도한 가입탈퇴 이벤트를 방지하려면 디바운스 값을 초 단위로 지정하세요. 예를 들어 클라이언트가 가입 이벤트를 생성한 후에는 2초 동안 다른 가입 이벤트를 생성할 수 없습니다.

Portal Configuration: Presence Debounce

간격 모드

최대 발표

채널의 클라이언트 수가 '최대 공지' 설정(기본값은 20명) 미만으로 유지되는 한 참여탈퇴 이벤트가 즉시 트리거됩니다.

Portal Configuration: Presence Announce Max

채널의 참여자 수가 증가함에 따라 참여퇴장 이벤트의 수도 증가하지만, 어느 시점에서는 클라이언트가 이러한 모든 이벤트를 실시간으로 유지하려고 시도하는 것이 낭비적이 됩니다. 200명의 참가자가 있는 그룹 채팅을 생각해 보세요. 클라이언트는 참가자가 온라인 또는 오프라인 상태가 될 때마다 모든 참가자의 온라인 상태를 업데이트해야 할까요? 이는 사람이 추적할 수 있는 것보다 더 많은 정보가 될 것입니다.

최대 발표 수를 1에서 100 사이로 구성할 수 있습니다. 채널의 클라이언트 수가 '최대 공지'를 초과하면 참여 , 탈퇴시간 초과 이벤트가 더 이상 생성되지 않고 간격 이벤트로 대체됩니다:

{ "channel: "<이벤트가 적용되는 채널의 이름>", "action": "간격", "점유": 4, // 채널 점유 "타임토큰": "<인터벌 이벤트가 발생한 시기>" }
Enter fullscreen mode Exit fullscreen mode

Interval

간격 구성 옵션을 수정하여 간격 이벤트가 발생할 빈도를 구성할 수 있습니다. 10초에서 300초(5분) 사이의 값을 사용할 수 있습니다.

Portal Configuration: Presence Interval

간격 이벤트는 '프레즌스 델타'를 활성화하지 않는 한 채널 점유율에 대해서만 알림을 보냅니다.

프레즌스 델타

Portal Configuration: Presence Deltas

'프레즌스 델타'를 활성화하면 인터벌 이벤트에 이전 인터벌 이벤트 이후 채널에 참여하거나 떠난 사용자에 대한 정보도 포함됩니다.

{ "channel": "<이벤트가 적용되는 채널의 이름>", "action": "interval", "occupancy": 3, // 채널 점유 "join": ["member4"], "leave": ["member3"], "timetoken": "<인터벌 이벤트가 발생한 시점>" }
Enter fullscreen mode Exit fullscreen mode

기타 설정

활성 공지 채널

채널에 연결된 클라이언트 수나 해당 클라이언트가 누구인지에는 관심이 없고, 채널에 가입한 사람이 있는지 여부에만 관심이 있을 수 있습니다. 채널에 구독자가 0명인 경우 비활성 상태로 간주됩니다. 구독자가 1명 이상인 채널은 활성 채널로 간주됩니다.

'활성 알림 채널'을 지정하여 채널이 '활성' 또는 '비활성'이 될 때 알림을 받도록 등록할 수 있습니다.

Portal Configuration: Presence Active Notice Channel

지정하면 이 채널에서 메시지를 받게 됩니다(이 예에서 메시지를 받는 채널 이름은 "알림_채널"입니다):

{ "채널": "<활성 또는 비활성화된 채널의 이름>", "상태": "활성", // 또는 비활성 "정확한_타임스탬프": "<인터벌 이벤트가 발생한 시점>" }
Enter fullscreen mode Exit fullscreen mode

활성 이벤트는 채널 점유율이 0 이상으로 올라가는 즉시 전송되지만, 채널 비활성 이벤트는 채널 점유율이 300초 이상 0인 경우에만 발생한다는 점에 유의하세요.

스트림 필터링

스트림 필터링을 비활성화하는 옵션은 레거시상의 이유로 유지되며, 개발자는 이 설정을 해제해도 별다른 이점을 얻을 수 없습니다. 스트림 필터링은 프레즌스 채널에 게시된 이벤트에 프레즌스 메타데이터를 포함하므로 클라이언트 필터가 이러한 프레즌스 이벤트에 적용될 수 있습니다. 스트림 필터링을 비활성화해도 프레즌스 이벤트 수가 줄어드는 것은 아니며, 클라이언트가 수신하는 이벤트를 필터링할 수 있을 뿐이므로 이 문서의 뒷부분에서 설명하는 프레즌스 관리를 사용하여 프레즌스 이벤트 수를 줄여야 합니다.

Portal Configuration: Presence Stream Filtering

웹훅

이전에는 키 집합 구성 페이지에서 다음 이벤트 중 하나라도 발생할 때 실행될 여러 웹후크를 지정할 수 있었습니다:

  • 참가 이벤트 발생
  • leave 이벤트 발생
  • 시간 초과 이벤트 발생
  • 간격 이벤트 발생
  • 상태 변경 이벤트 발생
  • 채널 활성 또는 채널 비 활성 이벤트가 발생했습니다.

이러한 웹후크는 더 이상 키설정 구성의 일부가 아니며 이벤트 및 작업 기능으로 마이그레이션되었습니다. 웹후크는 이 문서의 범위에서 다루지 않지만 자세한 내용은 이벤트 및 작업 문서의 웹후크 페이로드 작업 섹션을 참조하세요.

상태 변경

클라이언트의 프레즌스와 관련된 일부 메타데이터를 교환하려는 경우 가장 좋은 방법은 프레즌스 상태 기능을 사용하는 것입니다. 예를 들어, 앞서 설명한 가입탈퇴 이벤트는 클라이언트가 온라인 상태인지 오프라인 상태인지 알려주지만 사용자가 '바쁨' 또는 '방해 금지' 상태인지는 알려주지 않습니다.

클라이언트는 PubNub SDK를 사용하여 특정 채널 또는 채널 그룹에 사용자 지정 상태를 설정할 수 있습니다. 설정된 상태는 다른 클라이언트에 전파되어 상태 변경 이벤트로 수신됩니다.

{ "channel": "<상태 변경과 관련된 채널의 이름>", "uuid": "<상태가 적용되는 클라이언트의 ID>" "action": "state-change", "상태": {<상태를 정의하는 JSON 객체>} "점유": 3, // 채널 점유 "타임토큰": "<상태 변경이 발생한 때>" }
Enter fullscreen mode Exit fullscreen mode

상태 변경은 매우 유연하며 직렬화 가능한 모든 데이터를 교환하는 데 사용할 수 있습니다. 예를 들어, 협업 데모에서는 존재 상태를 사용하여 그리기 이벤트가 발생할 때 리스너에게 알림으로써 모든 시청자에게 실시간으로 낙서가 표시되는 협업 그리기 애플리케이션을 사용할 수 있습니다.

"state": {"x": 5, "y": 10, "color":"#FFFF00"}  // 그리기 애플리케이션의 상태 페이로드 예시
Enter fullscreen mode Exit fullscreen mode

상태 변경 이벤트의 유일한 주의 사항은 지속되지 않으므로 각 클라이언트가 추적해야 하는 임시 데이터나 데이터에만 사용해야 한다는 것입니다.

프레즌스 관리를 사용하여 수신할 이벤트 제어하기

앞서 언급했듯이 사용자 기반이 증가함에 따라 프레즌스 이벤트의 수가 매우 많아지기 쉽습니다. 지정된 채널에서 어떤 이벤트가 실행될지 보다 효과적으로 제어할 수 있도록 셀프 서비스 '프레즌스 관리' 도구를 도입하여 어떤 프레즌스 이벤트가 실행될지 제어하는 규칙을 만들 수 있도록 했습니다:

프레즌스 관리 도구는 키설정 구성 화면의 해당 버튼에서 실행할 수 있습니다:

Portal Configuration: Presence Management

왼쪽 메뉴의 'BizOps 워크스페이스' 섹션에서 이 도구에 액세스할 수도 있습니다.

관리 규칙을 구성하는 방법에 대한 자세한 설명은 프레즌스 관리 설명서를 참조하시기 바라며, 요약하면 다음과 같습니다:

  1. 새 규칙을 만듭니다. 애플리케이션에 대해 트리거하려는 프레즌스 이벤트를 완전히 정의하기 위해 여러 개의 규칙을 가질 수 있습니다.
  2. 가입, 퇴장, 시간 초과, 상태 변경간격을 포함하여 이 규칙으로 제어할 이벤트를 지정합니다. 이 문서에서는 이러한 규칙이 무엇이며 언제 실행되는지에 대해 설명했습니다.
  3. 와일드카드 패턴을 지정하여 이 규칙이 적용되는 채널 또는 채널 그룹을 정의합니다(예: 개인-*는 개인으로 시작하는 모든 채널에 적용됨-).
  4. '만들기'를 클릭하고 규칙이 적용될 순서를 정의합니다.

PubNub API를 통한 프레즌스 관리

모든 SDK를 통해 프레즌스 이벤트를 수신할 수 있습니다. 이 문서에서는 주로 SDK 이벤트 리스너를 통해 수신되는 프레즌스 이벤트에 중점을 두었지만, 여기서는 특정 채널(여기 지금)에서 누가 듣고 있는지, 특정 사용자가 어디에 가입되어 있는지(어디 지금) 확인할 수 있는 추가 기능도 지원합니다.

자바스크립트에서 hereNow API는 다음과 같이 호출하여 지정된 채널을 구독 중인 사용자를 확인할 수 있습니다:

try {
  const result = await pubnub.hereNow({
    channels: ["my_channel"],
    includeState: true,
    includeUUIDs: true
  });
  console.log(total occupancy:  + result.totalOccupancy)
} catch (status) {
  console.log(status);
}
Enter fullscreen mode Exit fullscreen mode

추가 리소스

현재 상태는 PubNub 플랫폼의 가장 가치 있고 유연한 기능 중 하나입니다. 누가 온라인에 있는지 정확히 파악하고 그 상태를 실시간으로 업데이트하는 기능을 통해 고객들은 지난 몇 년 동안 흥미로운 솔루션을 구축할 수 있었습니다.

  • 프레즌스 기본 문서는 프레즌스의 개념을 이해하기 위한 좋은 출발점입니다.
  • 프레즌스가 활성화된 채널을 구독하는 방법을 보여주는 예제는 구독 문서를 참조하고, 프레즌스 이벤트에 대한 리스너 콜백을 추가하는 방법을 보여주는 API 예제는 SDK별 문서(예: JavaScript SDK의 경우 이 페이지 )를 참조하세요.
  • 더 많은 실습을 위해 대부분의 튜토리얼에 프레즌스 기능이 포함되어 있으며, 초보 개발자에게는 여러 프로그래밍 언어를 다루는 시작하기 튜토리얼이 좋은 출발점이 될 수 있습니다. 튜토리얼에서는 채널에서 누가 채널을 듣고 있는지 확인하기 위한 '지금 여기' API와 같은 다른 프레즌스 기능에 대해서도 다룹니다.

마지막으로, 도움이나 지원이 필요한 경우 언제든지 전담 pubnub 지원팀에 문의하거나 개발자 관계팀( devrel@pubnub.com)으로 이메일을 보내주세요.

펍넙이 어떤 도움을 드릴 수 있나요?

이 글은 원래 PubNub.com에 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱 및 IoT 디바이스를 위한 실시간 인터랙티브를 구축, 제공 및 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기

라이브 투어를 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기

PubNub 계정에 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기

사용 사례나 SDK에 관계없이 PubNub 문서를 통해 바로 시작하고 실행할 수 있습니다.

Top comments (0)