<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: PubNub [韓国語]</title>
    <description>The latest articles on Forem by PubNub [韓国語] (@pubnub-ko).</description>
    <link>https://forem.com/pubnub-ko</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7934%2Fffad1b82-37cd-45c9-93ac-2d0ee7c87a76.jpg</url>
      <title>Forem: PubNub [韓国語]</title>
      <link>https://forem.com/pubnub-ko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pubnub-ko"/>
    <language>en</language>
    <item>
      <title>앱 컨텍스트 사용 방법</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Tue, 09 Jul 2024 06:54:31 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/aeb-keontegseuteu-sayong-bangbeob-3206</link>
      <guid>https://forem.com/pubnub-ko/aeb-keontegseuteu-sayong-bangbeob-3206</guid>
      <description>&lt;p&gt;펍넙 &lt;a href="https://www.pubnub.com/products/app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;앱 컨텍스트는&lt;/a&gt; 사용자, 채널, 멤버십 정보를 위한 서버리스 스토리지 메커니즘을 제공하여 복잡한 실시간 기능 개발을 간소화합니다. 앱 컨텍스트는 데이터가 변경될 때마다 이벤트를 트리거하여 앱을 실시간으로 업데이트할 수 있으며, 저장된 데이터는 &lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;일루미네이트&lt;/a&gt;, &lt;a href="https://www.pubnub.com/products/functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;펑션&lt;/a&gt; 및 기타 PubNub 서비스에서 사용하여 더 스마트한 의사 결정을 내릴 수 있습니다. 또한 코드가 필요 없는 직관적인 인터페이스를 통해 이 데이터를 관리할 수 있는 &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace를&lt;/a&gt; 사용할 수도 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;앱 컨텍스트&lt;/a&gt; (이전의 오브젝트)를 사용하면 다음을 수행할 수 있습니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  애플리케이션의 사용자 및 채널과 이들 간의 관계에 의미를 부여합니다.&lt;/li&gt;
&lt;li&gt;  모든 엔티티에 대한 메타데이터를 서버에 저장하여 클라이언트에 글로벌 소스를 간편하게 제공할 수 있습니다. 사용자는 사람을 나타낼 필요는 없으며, 대신 사용자 개체 내에 디바이스 상태를 저장하는 것이 일반적입니다.&lt;/li&gt;
&lt;li&gt;  객체의 값이 변경될 때마다 즉각적인 실시간 이벤트를 수신합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;모든 애플리케이션에서 앱 컨텍스트를 사용할 수 있지만 특히 &lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채팅 솔루션을&lt;/a&gt; 만드는 개발자에게 인기가 높습니다.&lt;/p&gt;

&lt;p&gt;앱 컨텍스트는 &lt;a href="https://www.pubnub.com/docs/general/metadata/users-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;사용자&lt;/a&gt; 및 &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채널에&lt;/a&gt; 대한 추천 필드 세트와 이들 간의 &lt;a href="https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;멤버십에&lt;/a&gt; 대한 추천 필드를 제공합니다. 이러한 필드의 대부분은 선택 사항이므로 어떤 필드를 채울지 선택할 수 있으며, 사용자 지정 필드를 직접 제공할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" title="How-to - BizOps Workspace Manage Users and Channels - Image 01" alt="Diagram showing user management, memberhip, channel management" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트 사용 사례
&lt;/h2&gt;

&lt;p&gt;앞서 언급했듯이 앱 컨텍스트는 특히 채팅 솔루션을 만드는 개발자들에게 인기가 있지만 다양한 사용 사례에서 사용할 수 있습니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;채팅:&lt;/strong&gt; 사용자 정보(이름, 프로필 사진, '휴가 중' 상태, 직책), 채널 정보(아이콘, 설명, 대상), 사용자 역할을 저장하고 채널별, 사용자별로 마지막으로 읽은 메시지를 추적할 수 있습니다.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;스포츠, 미디어 및 엔터테인먼트:&lt;/strong&gt; 실시간 투표 및 투표, 실시간 퀴즈, 실시간 입찰, 상품 또는 프로모션에 대한 CTA(클릭 유도 문안) 오버레이.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;게임:&lt;/strong&gt; 플레이어 레벨, 승리한 게임, 배지 등 실시간 플레이어 통계, 리더보드 추적 및 관리&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;기타:&lt;/strong&gt; 기타: 사용자 부재/활성 상태, 사기 탐지를 위한 사용자 신뢰 점수, 사용자 위치 추적, 배터리 잔량 또는 마지막 센서 판독값과 같은 IoT 디바이스 상태&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트를 활성화하는 방법
&lt;/h2&gt;

&lt;p&gt;앱 컨텍스트는 다음과 같이 활성화할 수 있습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;관리자 포털에&lt;/a&gt; 로그인합니다.&lt;/li&gt;
&lt;li&gt; 포털 왼쪽에 있는 '앱' 탭을 클릭합니다.&lt;/li&gt;
&lt;li&gt; 애플리케이션을 클릭합니다. 이 애플리케이션의 키 설정 페이지로 이동합니다.&lt;/li&gt;
&lt;li&gt; 아직 키셋을 만들지 않았다면 '새 키셋 만들기' 버튼을 클릭하여 새 키셋을 만듭니다. 이 키 집합에 대한 구성 페이지로 이동합니다.&lt;/li&gt;
&lt;li&gt; 슬라이더를 클릭하여 앱 컨텍스트를 사용 설정합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;버킷 지역&lt;/strong&gt; 설정은 데이터가 저장되는 지역입니다. 키 집합에 변경 사항을 저장한 후에는 리전을 수정할 수 없다는 점에 유의하세요.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;사용자 메타데이터 이벤트&lt;/strong&gt; 및 &lt;strong&gt;채널 메타데이터 이벤트&lt;/strong&gt; 설정이 활성화된 경우 나중에 설명하는 대로 데이터베이스에서 데이터가 설정되거나 제거될 때 사용자 및 채널 이벤트가 트리거됩니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;멤버십 이벤트&lt;/strong&gt; 설정이 활성화되어 있으면 나중에 설명하는 대로 멤버십이 추가, 업데이트 또는 제거될 때 멤버십 이벤트가 트리거됩니다.&lt;/li&gt;
&lt;li&gt; 나머지 옵션은 이 문서의 범위를 벗어나지만 자세한 내용은 &lt;a href="https://www.pubnub.com/docs/general/metadata/basics#configuration?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;앱 컨텍스트 문서를&lt;/a&gt; 참조하세요.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;변경 사항 저장을&lt;/strong&gt; 클릭하여 업데이트된 변경 사항을 저장합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  사용자 앱 컨텍스트
&lt;/h2&gt;

&lt;p&gt;새 사용자가 애플리케이션에 등록되면 외부 ID 공급자를 통해 해당 사용자를 PubNub에 고유하게 식별할 수 있는 방법이 있는데, 이것이 바로 사용자의 클라이언트가 PubNub SDK를 초기화하는 데 사용할 &lt;a href="https://www.pubnub.com/docs/general/setup/users-and-devices?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;사용자 ID입니다&lt;/a&gt;. PubNub 사용자 ID는 솔루션의 다른 곳에서 동일한 사용자를 식별하는 데 사용하는 ID와 다를 수 있으므로 '외부 ID' 필드에 이를 추적해 두는 것이 좋습니다.&lt;/p&gt;

&lt;p&gt;사용자 이름, 이메일, 프로필 URL은 설명이 필요하지 않지만, 앱 컨텍스트 내에 보관하면 사용자가 이러한 필드 중 하나를 변경하면 모든 SDK에서 지원하는 앱 컨텍스트 이벤트를 사용하여 변경 사항을 모든 수신 클라이언트에 대규모로 전파할 수 있다는 이점이 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트에서 사용자 표현을 만들려면 어떻게 해야 하나요?
&lt;/h3&gt;

&lt;p&gt;앱 컨텍스트 사용자를 만드는 방법에는 두 가지가 있습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; PubNub 관리자 포털에 있는 &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스를&lt;/a&gt; 사용하여 사용자를 생성하고 관리할 수 있습니다. 여기에는 코드가 필요하지 않으며 별도의 문서에 예제와 함께 프로세스가 설명되어 있습니다: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 사용자 및 채널을 관리하는 방법&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; API는 사용자를 생성하기 위해 각 SDK를 통해 노출됩니다. 예를 들어, &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Chat SD&lt;/a&gt;K를 사용하는 경우 이 SDK는 앱 컨텍스트를 백그라운드에서 처리합니다. 예를 들어, Chat SDK의&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;'createUser()&lt;/a&gt;' 메서드는 사용자를 만들기 위해 JavaScript의 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setUUIDMetadata를&lt;/a&gt; 내부적으로 호출합니다. Chat SDK가 아닌 다른 SDK를 사용하는 경우 앱 컨텍스트 데이터를 수정하기 위한 전용 API가 제공됩니다. 이미 자바스크립트 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setUUIDMetadata&lt;/a&gt; API에 대해 언급했지만 &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; 등 모든 API에 대한 동등한 API가 있습니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  채널 앱 컨텍스트
&lt;/h2&gt;

&lt;p&gt;사용자가 채널을 구독하거나 게시할 때마다 PubNub는 자동으로 채널을 생성하지만, 채널은 애플리케이션에 의미 있는 무언가를 나타낼 수 있습니다(예: 채팅 앱에서 채널을 사용하여 소통하는 그룹 채팅이 있거나 라이브 이벤트에서 전용 채널을 사용하여 투표를 관리할 수 있습니다).&lt;/p&gt;

&lt;p&gt;채널에 대해 앱 컨텍스트를 지정하면 해당 채널과 관련된 원하는 메타데이터가 저장되고 업데이트되며, 이러한 업데이트는 선택적으로 관심 있는 모든 클라이언트에 전파됩니다. 채널에 '사용자 A와 사용자 B 간의 채팅' 등의 이름을 지정할 수 있으며, 채널이 일부 문서 저장소와 관련되어 있을 경우 사용자 지정 'URI' 필드에서 추적할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트에서 채널 표현을 만들려면 어떻게 해야 하나요?
&lt;/h3&gt;

&lt;p&gt;사용자와 마찬가지로 앱 컨텍스트 채널을 만드는 방법에는 두 가지가 있습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 채널은 &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스를&lt;/a&gt; 사용하여 만들고 관리할 수 있습니다. 여기에는 코드가 필요하지 않으며 별도의 문서에 예제와 함께 프로세스가 설명되어 있습니다: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 사용자 및 채널을 관리하는 방법&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; API는 각 SDK를 통해 노출되어 채널을 만들 수 있습니다. 예를 들어,&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;'&lt;/a&gt; 채널&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;만들기&lt;/a&gt; ' 메서드 패밀리는 커버 아래에서 JavaScript의 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setChannelMetadata(&lt;/a&gt; )를 호출하여 앱 컨텍스트를 백그라운드에서 처리하는 등, &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Chat SDK를&lt;/a&gt; 사용하는 경우 앱 컨텍스트를 처리합니다. Chat SDK가 아닌 다른 SDK를 사용하는 경우에는 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; 등 앱 컨텍스트 데이터를 수정할 수 있는 전용 API가 제공됩니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  멤버십 앱 컨텍스트
&lt;/h2&gt;

&lt;p&gt;사용자와 채널 모두에 대한 앱 컨텍스트를 정의했으면 이제 사용자가 채널의 &lt;a href="https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;'멤버'&lt;/a&gt; 인지 여부를 지정하여 둘 사이의 관계를 정의할 수 있습니다.&lt;/p&gt;

&lt;p&gt;사용자가 채널에 가입하면 같은 채널의 다른 멤버에 대한 업데이트를 받을 수 있으며, 사용자가 &lt;code&gt;가입하거나&lt;/code&gt; &lt;code&gt;탈퇴할&lt;/code&gt; 때뿐만 아니라 해당 사용자의 앱 컨텍스트가 업데이트될 때마다(예: 이름을 업데이트할 때) 알림을 받을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이는&lt;/strong&gt; 특히 채팅 앱 개발자에게&lt;strong&gt;많은 가치를 제공하는 놀랍도록 강력한 메커니즘입니다&lt;/strong&gt;. 앱 컨텍스트를 사용하지 않는다면 모든 사용자를 직접 추적하고, 해당 사용자가 어떤 채널의 멤버였는지, 해당 사용자가 가입하거나 탈퇴할 때 같은 채널의 다른 모든 사람에게 알려야 합니다. 이 문제는 선형적으로 확장되지 않기 때문에 솔루션에 사용자가 많을수록 이 모든 정보를 중앙에서 관리하기가 더 어려워집니다.&lt;/p&gt;

&lt;p&gt;앱 컨텍스트를 사용하면 채팅 클라이언트가 내부 상태를 유지하는 데 필요한 모든 정보를 제공받을 수 있으며, 무단 액세스를 방지하기 위해 PubNub &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;액세스 관리자를&lt;/a&gt; 사용하여 해당 데이터를 완벽하게 제어할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  멤버십은 어떻게 만들 수 있나요?
&lt;/h3&gt;

&lt;p&gt;사용자 및 채널과 마찬가지로 멤버십을 만드는 방법에는 두 가지가 있습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 멤버십은 코드를 작성하지 않고도 &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스를&lt;/a&gt; 사용하여 만들고 관리할 수 있습니다. 자세한 내용은 문서의 &lt;a href="https://www.pubnub.com/docs/bizops-workspace/channel-management#manage-membership?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;멤버십 관리&lt;/a&gt; 섹션을 참조하세요.&lt;/li&gt;
&lt;li&gt; 채널을 만들기 위한 API는 각 SDK를 통해 노출됩니다. 예를 들어&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;'&lt;/a&gt; 채널&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;만들기&lt;/a&gt; ' 메서드 제품군은 은밀하게 JavaScript의 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setMemberships를&lt;/a&gt; 호출하여 앱 컨텍스트를 처리합니다. Chat SDK가 아닌 다른 SDK를 사용하는 경우에는 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Python&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; 등 앱 컨텍스트 데이터를 수정할 수 있는 전용 API가 제공됩니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트 변경 시 실시간 이벤트 수신
&lt;/h2&gt;

&lt;p&gt;앱 컨텍스트 데이터가 변경되면 애플리케이션이 변경 사항을 실시간으로 알려주는 이벤트를 수신하므로 서버에 업데이트를 폴링하지 않고도 반응형 앱을 만들 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub SDK를 통해 앱 컨텍스트 변경 사항 수신(채팅 SDK 제외)
&lt;/h3&gt;

&lt;p&gt;모든 PubNub SDK는 "이벤트 리스너"를 노출하며, 이 리스너를 통해 앱 컨텍스트 데이터가 변경될 때마다 실행되는 &lt;code&gt;오브젝트 이벤트를&lt;/code&gt; 수신할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/updates-to-the-event-engine-and-event-listeners/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이 블로그에서 이벤트 엔진 및 이벤트 리스너 업데이트에 대해&lt;/a&gt; 설명한 것처럼, 이 글을 쓰는 시점에서 일부 SDK는 새로운 형식의 '이벤트 리스너'를 지원한다는 약간의 미묘한 차이가 있다는 점에 유의하세요. 이벤트 리스너 형식에 관계없이 원칙은 동일하게 유지됩니다. 앱은 SDK에서 제공하는 리스너를 통해 앱 컨텍스트 이벤트를 수신하도록 등록해야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;JavaScript SDK 문서에&lt;/a&gt; 자세히 설명된 대로 앱 컨텍스트 이벤트를 등록하는 방법은 다음과 같습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel_1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onObjects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Objects event: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;다른 언어로 앱 컨텍스트 이벤트를 등록하는 방법을 설명하는 문서는 다음 위치에서 찾을 수 있습니다: &lt;a href="https://www.pubnub.com/docs/sdks/java/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Java&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/swift/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/kotlin/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;, &lt;a href="https://www.pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Python&lt;/a&gt; (Python은 이벤트를 '메타데이터'라고 부르는 반면, 다른 SDK는 이벤트를 '오브젝트'라고 부름), &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/configuration#event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; 등.&lt;/p&gt;

&lt;p&gt;작동하는 예제 및 대화형 데모는 &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-7?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스로 사용자 및 채널을 관리하는 방법에&lt;/a&gt; 대한 문서를 참조하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Chat SDK를 통해 앱 컨텍스트 변경 사항 수신하기
&lt;/h3&gt;

&lt;p&gt;PubNub Chat SDK는 &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#get-updates?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;streamUpdates()&lt;/a&gt; API 제품군을 통해 앱 컨텍스트 이벤트를 노출합니다.&lt;/p&gt;

&lt;p&gt;다음은 웹용 &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web" rel="noopener noreferrer"&gt;Chat SDK 데모 앱에서&lt;/a&gt; 가져온 몇 가지 예시입니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to the current User&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setProfileUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to an array of Channels&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdatesOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;channels&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//  The array of channels, privateGroups, has been updated&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chat SDK의 간단한 '상태 확인' 샘플을 기반으로 한 작업 예제는 &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-10?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스로 사용자 및 채널을 관리하는 방법에&lt;/a&gt; 대한 문서를 참조하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트 및 PubNub 일루미네이트
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub Illuminate는&lt;/a&gt; 조직의 고유한 사용 사례에 맞게 사용자 지정할 수 있는 실시간 의사 결정 및 분석 제품입니다. 이 제품은 제품 관리자와 분석가를 염두에 두고 설계되어 다음과 같은 작업을 수행할 수 있습니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  사용자 지정 실시간 집계 지표를 정의합니다.&lt;/li&gt;
&lt;li&gt;  조건 및 작업으로 의사 결정 규칙을 설정하고 배포합니다.&lt;/li&gt;
&lt;li&gt;  추적 중인 메트릭, 실행된 작업 및 그 결과를 즉시 시각화하세요.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;엔지니어링 팀이 진행 중인 프로젝트에서 벗어나지 않고도 이 모든 작업을 실시간으로 수행할 수 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub 일루미네이트가 무엇이며 데이터에 대한 즉각적인 실행 가능한 인사이트를 제공하는 방법에 대한 자세한 설명은 이 글의 범위를 벗어나지만, 자세한 내용은 &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;문서와&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/real-time-decisioning-with-illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;제품 개요를&lt;/a&gt; 참조하시기 바랍니다.&lt;/p&gt;

&lt;p&gt;요약: 애플리케이션과 관련된 &lt;strong&gt;지표&lt;/strong&gt;, 즉 측정하고자 하는 항목을 정의합니다. 예를 들어 자산 추적 시나리오에서는 주문이 접수된 후 시간이 될 수 있습니다. 해당 지표와 관련된 특정 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;&lt;strong&gt;조건&lt;/strong&gt;&lt;/a&gt; (예: '주문 후 시간'이 특정 값을 초과할 수 있음)이 충족되면 어떤 &lt;strong&gt;조치를&lt;/strong&gt; 취할 수 있습니다.&lt;/p&gt;

&lt;p&gt;어떤 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;조치를&lt;/a&gt; 취할지는 유연하지만 가능한 조치 중 세 가지는 앱 컨텍스트와 관련이 있습니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" title="How-to - Use App Context - Image 02" alt="How-to - Use App Context - Image 02" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub 일루미네이트로 사용자 업데이트
&lt;/h3&gt;

&lt;p&gt;사전 정의되거나 사용자 정의된 사용자 메타데이터를 설정할 수 있습니다. 아래 스크린샷은 ID가 123인 사용자의 상태가 정적 값인 '새 상태'로 설정되어 있지만 &lt;strong&gt;작업을&lt;/strong&gt; 트리거한 &lt;strong&gt;조건에&lt;/strong&gt; 따라 동적 값을 설정할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" title="How-to - Use App Context - Image 03" alt="How-to - Use App Context - Image 03" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub 일루미네이트로 채널 업데이트
&lt;/h3&gt;

&lt;p&gt;사전 정의 또는 사용자 지정 채널 메타데이터를 설정할 수 있습니다. 아래 스크린샷은 ID가 123인 채널의 이름이 정적 값인 '새 이름'으로 설정되어 있지만 &lt;strong&gt;작업을&lt;/strong&gt; 트리거한 &lt;strong&gt;조건에&lt;/strong&gt; 따라 동적 값을 설정할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" title="How-to - Use App Context - Image 04" alt="How-to - Use App Context - Image 04" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  펍넙 일루미네이트로 멤버십 업데이트하기
&lt;/h3&gt;

&lt;p&gt;사전 정의 또는 사용자 정의 멤버십 메타데이터를 설정할 수 있습니다. 아래 스크린샷은 사용자 ID 123의 채널 123 멤버십 상태가 정적 값인 '새 상태'로 설정된 것을 보여줍니다. &lt;strong&gt;작업을&lt;/strong&gt; 트리거한 &lt;strong&gt;조건에&lt;/strong&gt; 따라 동적 값을 설정할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" title="How-to - Use App Context - Image 05" alt="How-to - Use App Context - Image 05" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  앱 컨텍스트 및 PubNub 함수
&lt;/h2&gt;

&lt;p&gt;펍넙은 펍넙 플랫폼에서 발생하는 이벤트를 캡처할 수 있는 함수를 제공합니다. 함수를 사용하면 코드를 작성하거나 기존 통합을 활용하여 데이터를 변환, 경로 변경, 보강, 필터링 및 집계할 수 있습니다. 펍넙 함수에 대한 자세한 개요는 &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;함수 설명서를&lt;/a&gt; 참조하시기 바라며, 이 글에서는 펍넙 함수가 앱 컨텍스트와 어떻게 연관되는지 살펴보겠습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub 함수 내에서 앱 컨텍스트 업데이트하기
&lt;/h3&gt;

&lt;p&gt;함수가 실행되는 환경에서는 &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 모듈에&lt;/a&gt; 액세스할 수 있습니다. 이 모듈은 키 집합의 앱 컨텍스트에 대한 전체 액세스 권한을 가지며, 문서에서 가져온 몇 가지 예는 다음과 같습니다. :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#get-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;사용자 앱 컨텍스트 메타데이터&lt;/a&gt; 가져오기 예제&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUUIDMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-uuid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetched UUID metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to fetch UUID metadata&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채널 앱 컨텍스트 메타데이터 설정&lt;/a&gt; 예제&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;What a great channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Set channel metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to set channel metadata.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;포괄적인 코드 예제는 &lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 모듈&lt;/a&gt; 설명서를 참조하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트가 변경될 때 PubNub 함수 트리거하기
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/overview#event-types?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이벤트 유형 문서에&lt;/a&gt; 자세히 설명된 대로 함수를 트리거할 수 있는 다양한 이벤트 유형이 있습니다. 여기에는 메시지와 신호가 전송되는 시기를 감지하는 기능, 존재 이벤트 발생 후 함수를 트리거하는 기능, 지정된 간격으로 또는 필요에 따라 함수를 실행하는 기능 등이 포함됩니다. 현재로서는 앱 컨텍스트 업데이트 후 함수를 실행할 수 &lt;strong&gt;없지만&lt;/strong&gt;, 애플리케이션에 이 기능이 필요한 경우 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;지원팀에&lt;/a&gt; 문의하시면 사용 사례를 안내해 드릴 것입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  다음 단계
&lt;/h2&gt;

&lt;p&gt;앱 컨텍스트가 실제로 작동하는 모습을 보려면, 서버리스 스토리지를 사용하는 채팅 앱이 어떤 모습인지 보여주기 위해 채팅 SDK와 함께 앱 컨텍스트를 사용하는 &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채팅 데모를&lt;/a&gt; 확인하세요. 채팅 데모에서는 사용자 및 채널 메타데이터를 설정하고 이러한 변경 사항이 다른 청취자 및 구성원에게 실시간으로 전파되는 것을 확인할 수 있습니다.&lt;/p&gt;

&lt;p&gt;또한 앱 컨텍스트에 따라 달라지는 BizOps 워크스페이스에 대한 3부 시리즈에서 관련 방법을 살펴보세요: &lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;사용자 및 채널 관리하기&lt;/a&gt;, &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;대화 모니터링 및 중재하기&lt;/a&gt;, &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채팅을 안전하게 중재&lt;/a&gt;하기 등을 다루고 있습니다.&lt;/p&gt;

&lt;p&gt;마지막으로, 개발자팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; )에 문의하거나 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;지원팀에&lt;/a&gt; 연락하여 PubNub 개발과 관련하여 도움이 필요하면 언제든지 문의하세요.&lt;/p&gt;

&lt;h1&gt;
  
  
  펍넙이 어떤 도움을 드릴 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/how-to/use-app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>문서 릴리즈 노트 - 2024년 6월</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 12:51:29 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/munseo-rilrijeu-noteu-2024nyeon-6weol-580j</link>
      <guid>https://forem.com/pubnub-ko/munseo-rilrijeu-noteu-2024nyeon-6weol-580j</guid>
      <description>&lt;p&gt;이 기사는 원래 &lt;a href="https://www.pubnub.com/docs/release-notes/2024/june?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/release-notes/2024/june&lt;/a&gt; 에 게시되었습니다.&lt;/p&gt;

&lt;p&gt;안녕하세요! 이번 달에는 몇 가지 새로운 업데이트가 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  데이터의 일관성을 유지하는 데 도움이 되는 새로운 참조 무결성 플래그를 도입했습니다.&lt;/li&gt;
&lt;li&gt;  이제 관리자 포털에서 바로 채널 그룹 제한을 설정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;  Insights에서 BizOps로 데이터를 가져와서 기능을 테스트해 보세요.&lt;/li&gt;
&lt;li&gt;  또한 프레즌스 관리의 모양과 느낌이 개선된 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그 외에도 문서에 작지만 중요한 개선 사항이 다수 포함되어 있어 PubNub을 사용할 때 궁금했던 점을 해소하거나 의구심을 해소할 수 있을 것입니다.&lt;/p&gt;

&lt;p&gt;즐거운 탐색을 하시고 커뮤니티의 일원이 되어 주셔서 감사합니다!&lt;/p&gt;

&lt;h2&gt;
  
  
  일반 🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  FCM 페이로드의 사용자 정의 필드
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;FCM 모바일 푸시 알림 페이로드에 추가할 수 있는 누락된 사용자 정의 PubNub 매개변수인 &lt;code&gt;pn_debug&lt;/code&gt;, &lt;code&gt;pn_exceptions&lt;/code&gt;, &lt;code&gt;pn_dry_run을&lt;/code&gt; 추가하여 &lt;a href="https://pubnub.com/docs/general/push/android#step-5-construct-the-push-payload" rel="noopener noreferrer"&gt;Android 모바일 푸시 알림에&lt;/a&gt; 대한 문서를 수정했습니다.&lt;/p&gt;

&lt;p&gt;이를 통해 알림을 테스트하거나 디버그하고 선택한 디바이스를 알림 수신에서 제외할 수 있습니다.&lt;/p&gt;

&lt;p&gt;다음은 사용자 지정 필드가 포함된 FCM 페이로드 샘플입니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_fcm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message sent at&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_collapse_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;collapse-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_exceptions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;optional-excluded-device-token1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;]&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_debug&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_dry_run&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  채널 그룹 제한
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 새로운 기능&lt;/p&gt;

&lt;p&gt;관리자 포털의 스트림 컨트롤러에는 &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;유료 요금&lt;/a&gt;제를 사용하는 고객을 위해 구성 가능한 새로운 &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;채널 그룹 제한&lt;/a&gt; 옵션이 추가되어 키 집합의 채널 그룹이 가질 수 있는 최대 채널 수에 대한 제한을 설정할 수 있습니다. 기본 제한인 1,000개 채널을 낮추거나 최대 2,000개 채널까지 늘릴 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" alt="Channel group limits" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트의 사용자 메타데이터 이벤트
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;사용자 메타데이터 이벤트&lt;/strong&gt; 옵션을 활성화하면 사용자 개체에 대한 모든 수정&lt;code&gt;(설정&lt;/code&gt; 및 &lt;code&gt;삭제&lt;/code&gt;)이 모든 멤버십 연결에 이벤트 알림을 전송하므로 해당 사용자와 해당 사용자가 회원으로 가입한 모든 채널에 알림이 전송된다는 점을 명확히 하기 위해 문서를 개선했습니다. 자세한 내용은 &lt;a href="https://pubnub.com/docs/general/metadata/basics#app-context-events" rel="noopener noreferrer"&gt;문서를&lt;/a&gt; 참조하세요.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" alt="User metadata events" width="800" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트 구성 종속성
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;중요한 종속성에 대한 정보를 포함하도록 &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;앱 컨텍스트 구성 옵션에&lt;/a&gt; 대한 문서를 업데이트했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" alt="Get all user or channel metadata" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;모든 채널 메타데이터 가져오기 허용 안 함&lt;/strong&gt; 및 &lt;strong&gt;모든 사용자 메타데이터 가져오기 허용 안 함&lt;/strong&gt; 옵션은 매우 자명해 보이지만, 이러한 옵션은 액세스 관리자가 활성화된 경우에만 작동한다는 점을 주의해야 합니다.&lt;/p&gt;

&lt;p&gt;즉, 액세스 관리자가 없는 경우에는 이러한 활성화된 옵션이 실제로 키 집합의 사용자 또는 채널에 대한 메타데이터 가져오기를 비활성화하지 않습니다. 동시에 Access Manager를 사용 설정하면 기본적으로 키 집합의 모든 개체에 대한 액세스가 제한되므로 세분화된 권한 스키마를 만들지 않고도 이 두 가지 구성 옵션을 모두 선택 해제하여 사용자 및 채널에 대한 Access Manager GET 제한을 쉽게 우회할 수 있습니다.&lt;/p&gt;

&lt;p&gt;관리자 포털 UI에도 곧 이러한 종속성이 반영될 예정입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트의 새로운 참조 무결성 플래그
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형에&lt;/strong&gt; 추가되었습니다: 새로운 기능&lt;/p&gt;

&lt;p&gt;관리자 포털에서 앱의 키 집합에서 앱 컨텍스트를 활성화하면 기본적으로 켜지는 &lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;&lt;strong&gt;멤버십에 참조 무결성&lt;/strong&gt;&lt;/a&gt; 적용 옵션이 새로 추가되었습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" alt="Referential integrity flag" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 플래그를 사용하면 멤버십을 생성한 사용자 ID와 채널 ID가 모두 존재하는 경우에만 새 멤버십을 설정할 수 있습니다. 동시에 상위 사용자 또는 채널 메타데이터 개체를 삭제하면 삭제된 개체에 대한 모든 하위 멤버십 연결이 자동으로 삭제됩니다. 이렇게 하면 키 집합에 오작동하거나 고아 멤버십 개체가 없는지 확인할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK 📦
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python 문서 개선
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;받은 피드백에 따라 메서드 사용 및 실행에 대한 정보를 확장했습니다. 그 결과, 이제 &lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Python SDK 문서의&lt;/a&gt; 각 반환 섹션에 각 메서드가 반환하는 데이터 필드가 설명되어 있습니다. 또한 동기화(&lt;code&gt;.sync()&lt;/code&gt;) 및 비동기(&lt;code&gt;.pn_async(callback&lt;/code&gt;)) 요청 실행이 각 메서드의 반환 데이터에 어떤 영향을 미치는지도 설명합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  React SDK가 사용 중단되었습니다.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type&lt;/strong&gt;: 사용 중단 공지&lt;/p&gt;

&lt;p&gt;한동안 React SDK를 적극적으로 개발하지 않았기 때문에 마침내 공식적으로 해당 &lt;a href="https://pubnub.com/docs/sdks/react" rel="noopener noreferrer"&gt;문서를&lt;/a&gt; 폐기하고 문서의 &lt;a href="https://pubnub.com/docs/sdks#call-for-contributions" rel="noopener noreferrer"&gt;기여&lt;/a&gt; 요청 섹션으로 옮기기로 결정했습니다.&lt;/p&gt;

&lt;p&gt;React SDK에서 버그를 발견하거나 기능을 확장하고 싶은 경우, 언제든지 &lt;a href="https://github.com/pubnub/react" rel="noopener noreferrer"&gt;리포지토리에&lt;/a&gt; 풀 리퀘스트를 생성하고 피드백을 기다리세요!&lt;/p&gt;

&lt;h2&gt;
  
  
  함수
&lt;/h2&gt;

&lt;h3&gt;
  
  
  이벤트 및 액션을 통해 함수 로그 내보내기
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;타입을&lt;/strong&gt; 통해 함수 로그 내보내기: 새로운 기능&lt;/p&gt;

&lt;p&gt;각 PubNub 함수는 새로운 함수가 로그를 덮어쓰기 전에 최대 250줄의 로그를 저장할 수 있는 내부 &lt;code&gt;블록 출력*&lt;/code&gt; 채널(예: &lt;code&gt;blocks-output-NSPiAuYKsWSxJl4yBn30&lt;/code&gt;)에 로그를 저장합니다. 이전 로그를 추적하고 싶지 않다면 이제 이벤트 및 작업을 사용하여 &lt;a href="https://pubnub.com/docs/general/portal/functions#export-logs-through-events--actions" rel="noopener noreferrer"&gt;이러한 로그를&lt;/a&gt; 외부 서비스로 내보낼 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" alt="Functions log" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  인사이트 📊
&lt;/h2&gt;

&lt;h3&gt;
  
  
  REST API 문서의 사용자 지속 시간 및 디바이스 메트릭
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선 사항&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/docs/release-notes/2024/may#device-metrics-dashboard" rel="noopener noreferrer"&gt;지난 달&lt;/a&gt;, 관리자 포털의 PubNub 인사이트에 있는 &lt;code&gt;사용자 행동&lt;/code&gt; 대시보드에 디바이스 지표를 도입했습니다. 이번 달에는 사용자 지속 시간과 기기 메트릭을 모두 포함하도록 &lt;a href="https://pubnub.com/docs/sdks/rest-api/introduction-16" rel="noopener noreferrer"&gt;REST API 문서를&lt;/a&gt; 업데이트하여 PubNub Insights API를 직접 호출하여 관심 있는 메트릭을 가져올 수 있도록 했습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  비즈옵스 워크스페이스 🏢
&lt;/h2&gt;

&lt;h3&gt;
  
  
  상위 20개 사용자/채널
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 새로운 기능&lt;/p&gt;

&lt;p&gt;앱 컨텍스트를 사용하여 사용자 및 채널을 저장하고 관리하지 않는 경우에도 테스트 데이터를 임포트하여 관련 BizOps Workspace 기능을 테스트할 수 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub 인사이트에 액세스할 수 있는 경우 관리자 포털의 BizOps Workspace에서 &lt;strong&gt;사용자 관리&lt;/strong&gt; 및 &lt;strong&gt;채널 관리&lt;/strong&gt; 모듈로 이동하여 &lt;strong&gt;인사이트에서 가져오기&lt;/strong&gt; 버튼을 클릭하여 액세스할 수 있습니다.&lt;/p&gt;

&lt;p&gt;결과적으로 앱의 키 집합에서 지난 하루 동안 가장 많은 수의 메시지를 게시한 최대 20명의 사용자를 가져오게 됩니다(어제 메시지를 보내지 않은 경우에는 하루 전의 데이터를 기준으로 사용자를 가져오게 됩니다).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" alt="Top 20 users" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;사용자와 마찬가지로 앱의 키설정에서 최근 하루 동안 가장 많은 수의 메시지를 게시한 채널을 최대 20개까지 가져올 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" alt="Top 20 channels" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 테스트 데이터를 사용하여 비즈옵스 워크스페이스가 제공하는 기능을 살펴보세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  개선된 프레즌스 관리 UX
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;최근에 BizOps Workspace의 전체 &lt;a href="https://pubnub.com/docs/bizops-workspace/presence-management" rel="noopener noreferrer"&gt;프레즌스 관리&lt;/a&gt; 모듈을 재설계하여 규칙 만들기 마법사를 간소화하고, 배지 색상을 보다 포괄적인 색상으로 변경하고, 키 집합의 프레즌스 구성의 기본 "모든 채널에서 프레즌스 활성화" 설정을 반영하는 "캐치 올" 패턴 구성을 추가했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" alt="Presence Management" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;새로운 디자인과 느낌이 마음에 드시길 바랍니다!&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>문서 릴리즈 노트 - 2024년 5월</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 11:17:13 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/munseo-rilrijeu-noteu-2024nyeon-5weol-77m</link>
      <guid>https://forem.com/pubnub-ko/munseo-rilrijeu-noteu-2024nyeon-5weol-77m</guid>
      <description>&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/docs/release-notes/2024/may?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/release-notes/2024/may&lt;/a&gt; 에 게시되었습니다.&lt;/p&gt;

&lt;p&gt;이번 달의 릴리즈 노트에 오신 것을 환영합니다! PubNub에서 작업을 간소화하고 편의성을 높이기 위한 업데이트 패키지를 제공합니다.&lt;/p&gt;

&lt;p&gt;패키지에는 무엇이 포함되어 있나요?&lt;/p&gt;

&lt;p&gt;앱 컨텍스트 데이터 필터링 문서를 통합하고, Python 및 Asyncio용 이벤트 리스너 아키텍처를 개선했으며, 안전한 채팅 모더레이션을 시작하는 데 도움이 되는 새로운 도구를 추가했습니다.&lt;/p&gt;

&lt;p&gt;관리자 포털에서는 상세한 디바이스 지표를 추가하고, 일괄 처리 및 묶음 옵션으로 이벤트 관리를 개선했으며, 일루미네이트에 멋진 새로운 스택형 막대 차트와 변수 기능을 출시했습니다.&lt;/p&gt;

&lt;p&gt;또한, 이제 유니티의 문서와 웹사이트에는 필요한 정보를 정확하게 찾을 수 있도록 도와주는 인공지능 검색 엔진이 새롭게 추가되었습니다.&lt;/p&gt;

&lt;p&gt;지금 바로 들어가서 유용한 기능을 살펴보세요!&lt;/p&gt;

&lt;h2&gt;
  
  
  일반 🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  앱 컨텍스트 데이터 필터링에 대한 통합 정보
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 향상&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 피드백을 바탕으로 다양한 SDK의 사용자, 채널, 멤버십 데이터 필터링에 대한 정보를 검토하고 PubNub의 앱 컨텍스트 API를 사용하여 통합했습니다. 그 결과, 모든 데이터 필터링 쿼리의 시작점 역할을 하는 하나의 &lt;a href="https://pubnub.com/docs/general/metadata/filtering" rel="noopener noreferrer"&gt;앱 컨텍스트 필터링&lt;/a&gt; 문서(수많은 예시로 뒷받침됨)를 만들었습니다.&lt;/p&gt;

&lt;p&gt;알아보기:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  어떤 사용자, 채널, 멤버십 데이터를 필터링할 수 있는지 알아보세요.&lt;/li&gt;
&lt;li&gt;  사용할 필터링 연산자.&lt;/li&gt;
&lt;li&gt;  실제 예제를 통해 데이터를 필터링하는 방법.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;["description"] LIKE "*support*"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SDK 📦
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python 및 Asyncio용 이벤트 리스너 아키텍처 업데이트
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형에&lt;/strong&gt; 대한 업데이트된 이벤트 리스너 아키텍처: 새로운 기능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: &lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Python&lt;/a&gt; 및 &lt;a href="https://pubnub.com/docs/sdks/asyncio/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Asyncio&lt;/a&gt; SDK를 위한 새로운 이벤트 리스너 아키텍처는 이전의 모놀리식 PubNub 객체에 비해 구독을 관리하고 이벤트를 수신하는 보다 좁은 범위의 방법을 도입했습니다.&lt;/p&gt;

&lt;p&gt;PubNub 개체는 여전히 글로벌 범위로 사용되며 이전 버전과 호환되지만, 새로운 아키텍처는 채널, 채널 그룹, 사용자 메타데이터, 채널 메타데이터와 같은 '엔티티' 개체를 제공하여 구독 개체를 반환합니다.&lt;/p&gt;

&lt;p&gt;이러한 구독은 단일 엔티티에 특정한 구독/구독 취소 메서드와 &lt;code&gt;addListener/removeListener&lt;/code&gt; 메서드를 허용하여 실시간 이벤트를 보다 유연하고 독립적으로 관리할 수 있는 방법을 제공하고 글로벌 상태 관리의 필요성을 줄여줍니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;based&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;scoped&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{channel}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;with_presence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Chat 💬
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Chat SDK에서 보안 모더레이션을 위한 샘플
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 새 기능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 저희 채팅팀은 Access Manager를 사용하여 Chat SDK 앱을 보호하는 엔드투엔드 시나리오를 이해하는 데 도움이 되는 간단한 &lt;a href="https://github.com/pubnub/js-chat/blob/master/samples/access-manager-api/README.md" rel="noopener noreferrer"&gt;Access Manager API 서비스를&lt;/a&gt; 만들었습니다. 이 서비스는 간단한 엔드포인트를 모의하며 Access Manager가 사용 설정된 Chat SDK 앱에 대한 서버 측 인증을 설정하는 데 사용할 수 있는 샘플 권한 집합을 포함합니다.&lt;/p&gt;

&lt;p&gt;리액트 네이티브 채팅 앱(사용자 상호작용용), 채널 모니터(뮤트 및 차단과 같은 사용자 관리용), 액세스 관리자 API(권한 토큰 생성용)를 사용하여 전체 테스트 시나리오를 진행하세요.&lt;/p&gt;

&lt;p&gt;자세한 단계는 &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps 워크스페이스로 채팅 및 사용자를 안전하게 중재하는 방법&lt;/a&gt; 블로그를 참조하세요.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" alt="Muted user" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  인사이트 📊
&lt;/h2&gt;

&lt;h3&gt;
  
  
  장치 메트릭 대시보드
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 향상&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 인사이트의 &lt;code&gt;사용자 행동&lt;/code&gt; 대시보드에 &lt;a href="https://pubnub.com/docs/pubnub-insights/dashboards/user-behavior" rel="noopener noreferrer"&gt;디바이스 유형 지표를&lt;/a&gt; 포함하도록 확장했습니다. 이를 통해 디바이스 유형별 사용자 행동을 자세히 살펴볼 수 있습니다. 이제부터 앱 사용자가 가장 자주 게시하거나 구독하는 위치(iOS, Android, Windows)를 관찰하고 디바이스 유형별 고유 사용자 수를 확인할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이러한 인사이트를 통해 디바이스별 맞춤 기능을 구축하여 고객 경험을 개선할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" alt="User behavior &amp;amp; devices" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  이벤트 및 액션 ⚡
&lt;/h2&gt;

&lt;h3&gt;
  
  
  이제 웹훅 액션이 일괄 처리를 지원합니다.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 이벤트 및 작업의 일괄 &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#batching" rel="noopener noreferrer"&gt;처리&lt;/a&gt; 기능을 사용하면 각 이벤트를 개별적으로 보내지 않고 한 번의 요청으로 전송하여 대량의 이벤트를 관리할 수 있습니다. 이 기능은 5월부터 &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/actions/create-webhook-action" rel="noopener noreferrer"&gt;웹훅 액션&lt;/a&gt; 유형에서도 사용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" alt="Batching feature" width="726" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  (언)엔벨로핑
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 개선&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 이제 모든 액션의 페이로드를 &lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#envelope" rel="noopener noreferrer"&gt;봉투로&lt;/a&gt; 감쌀 수 있습니다. 즉, 페이로드 스키마에 자세한 이벤트 및 액션 JSON 메타데이터를 포함할지 여부를 선택할 수 있습니다. 페이로드가 전송된 채널이나 페이로드를 트리거한 리스너에 대한 정보와 같이 페이로드 외부의 메타데이터를 사용하려는 경우에 유용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" alt="Envelope feature" width="678" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  일루미네이트 💡
&lt;/h2&gt;

&lt;h3&gt;
  
  
  누적 막대 차트
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 새로운 기능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 이제 막대형 차트와 꺾은선형 차트에 더해, 하나의 차트에 많은 차원과 값이 있을 때 데이터 가독성을 높여주는 새로운 &lt;a href="https://pubnub.com/docs/illuminate/dashboards/basics#settings" rel="noopener noreferrer"&gt;누적 막&lt;/a&gt; 대형 차트 유형이 Illuminate 대시보드에서 제공됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" alt="Stacked bar chart" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  변수
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 향상&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 의사 결정에서 작업(수집된 메트릭으로 수행하려는 작업을 명시)을 만들 때 작업 구성 테이블에 &lt;a href="https://pubnub.com/docs/illuminate/decisions/basics#decision-structure" rel="noopener noreferrer"&gt;변수를&lt;/a&gt; 추가하여 참조하는 대상을 제어하고 동적으로 변경할 수 있습니다. 미리 정의된 조건을 참조하거나( &lt;code&gt;${를&lt;/code&gt; 입력하고 목록에서 선택), 필요에 따라 새 변수&lt;code&gt;(${변수})&lt;/code&gt;를 설정하는 등 변수를 더욱 유연하게 사용할 수 있습니다. 이제 변수는 액션의 &lt;strong&gt;페이로드&lt;/strong&gt; 또는 &lt;strong&gt;본문뿐만&lt;/strong&gt; 아니라 대부분의 액션 필드에 사용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" alt="Variables" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  개선된 데이터 매핑 필드
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Type&lt;/strong&gt;: 개선됨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 비즈니스 개체를 만들고 측정값(추적하려는 데이터) 또는 차원(추적 대상 세분화)을 정의할 때, 필드 이름을 페이로드의 실제 필드에 매핑해야 Illuminate가 이 데이터를 찾을 위치를 알 수 있습니다. 지금까지는 특정 페이로드 필드의 정확한 매핑을 수동으로 입력해야 했습니다. 5월부터 일루미네이트는 정확한 퍼블리시 및 앱 컨텍스트 데이터 위치를 찾을 수 있는 보다 사용자 친화적인 &lt;a href="https://pubnub.com/docs/illuminate/business-objects/basics#data-mapping" rel="noopener noreferrer"&gt;드롭다운 메뉴를&lt;/a&gt; 제공합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" alt="JSON menu" width="774" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  기타 🌟
&lt;/h2&gt;

&lt;h3&gt;
  
  
  새로운 검색 및 AI 어시스턴트
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;유형&lt;/strong&gt;: 새로운 기능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;설명&lt;/strong&gt;: 마지막으로, 더 정확하고 인터랙티브한 PubNub 학습 모험을 위해 문서에서 Algolia 검색을 새로운 통합 검색 및 AI 어시스턴트 환경으로 교체했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" alt="Search and AI Assistant" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이제 새로운 AI 어시스턴트 및 검색 기능과 함께 코딩 게임의 레벨을 높이고 친구를 사귀어 보세요. 여러분의 피드백을 바탕으로 개선해 나갈 예정이니 부족한 부분이 있으면 꼭 업데이트해 드리겠습니다. 행복한 코딩! 🚀&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>데이터 스트리밍 기술 개요</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 09:52:07 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/deiteo-seuteuriming-gisul-gaeyo-2858</link>
      <guid>https://forem.com/pubnub-ko/deiteo-seuteuriming-gisul-gaeyo-2858</guid>
      <description>&lt;p&gt;많은 조직에서 대량의 데이터(빅데이터)를 실시간으로 처리하는 능력이 중요해지면서 &lt;a href="https://www.pubnub.com/solutions/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;데이터 스트리밍 기술이&lt;/a&gt; 등장했습니다. 이러한 기술을 사용하면 대량의 데이터를 생성되는 즉시 또는 거의 실시간으로 처리할 수 있으므로 기업은 즉각적인 인사이트를 얻고 시간에 민감한 데이터 기반 의사 결정을 내릴 수 있습니다.&lt;/p&gt;

&lt;p&gt;이러한 기술의 핵심에는 이벤트 스트림이라고도 하는 데이터 스트림이라는 개념이 있습니다. 데이터 스트림은 소셜 미디어 피드, IoT(사물 인터넷) 디바이스, 로그 파일, 과학 데이터 세트 등 다양한 소스에서 생성되는 시퀀스입니다. 이러한 데이터 스트림은 데이터 스트리밍 기술을 통해 수집 및 처리됩니다.&lt;/p&gt;

&lt;p&gt;또 다른 중요한 측면은 데이터 스트림의 확장성입니다. 데이터의 양이 증가함에 따라 증가된 부하를 처리할 수 있도록 기술을 확장하여 기업이 실시간 분석을 수집할 수 있도록 보장합니다. 즉, 기업은 데이터가 생성되는 즉시 분석할 수 있어 사기 탐지나 고객 경험 최적화와 같이 타이밍이 중요한 시나리오에서 특히 유용한 의사결정을 신속하게 내릴 수 있습니다.&lt;/p&gt;

&lt;p&gt;데이터 스트리밍 기술은 SQL 데이터베이스와 같은 정형 데이터부터 라이브 이벤트나 소셜 미디어 피드와 같은 비정형 데이터까지 다양한 형식을 지원하므로 기업은 데이터의 출처나 형식에 관계없이 모든 유형의 데이터를 처리하고 분석할 수 있습니다. 이러한 기술은 많은 장점을 제공하지만, 구현 및 관리를 위해 정교한 데이터 엔지니어링 기술이 필요하고 특히 대량의 데이터를 처리할 때 짧은 지연 시간과 높은 처리량이 요구되는 등 도전 과제도 있다는 점에 유의하는 것이 중요합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  데이터 스트리밍 기술의 기본 개념
&lt;/h2&gt;

&lt;p&gt;데이터 스트리밍 기술은 몇 가지 기본 개념을 기반으로 합니다. 실시간 데이터 처리의 성능을 최대한 활용하려면 이러한 개념을 이해하는 것이 중요합니다:&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 스트림
&lt;/h3&gt;

&lt;p&gt;데이터 스트림은 IoT 디바이스, 로그 파일, 주식 시장 등 다양한 소스에서 지속적으로 발생하는 데이터 흐름입니다. 이러한 데이터 소스는 종종 실시간 또는 실시간에 가까운 빠른 속도로 데이터를 생성하며, 생성된 데이터는 일반적으로 시간에 민감하므로 시간이 지남에 따라 관련성이 감소합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  스트림 처리
&lt;/h3&gt;

&lt;p&gt;스트림 처리는 데이터 스트림을 실시간으로 처리하는 것입니다. 예약된 간격으로 데이터를 처리하는 배치 처리와 달리 스트림 처리는 데이터가 도착하는 즉시 처리합니다. 따라서 지연 시간이 짧아 사용자 위치 추적이나 상품 가격 및 해당 값을 기반으로 한 의사 결정과 같이 시간에 민감한 애플리케이션에 필수적입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  배치 처리와 스트림 처리 비교
&lt;/h3&gt;

&lt;p&gt;일괄 처리와 스트림 처리는 데이터 처리에 대한 두 가지 다른 접근 방식을 나타냅니다. 일괄 처리는 대량의 데이터를 예약된 간격으로 한 번에 처리하며, 시간에 민감하지 않은 데이터 분석 작업에 적합합니다. 반면에 스트림 처리는 데이터가 생성되는 즉시 처리하여 실시간 인사이트를 제공합니다.&lt;/p&gt;

&lt;p&gt;데이터 스트림 처리에 대해 이야기할 때 '마이크로 배치'라는 용어를 볼 수도 있는데, 이 접근 방식은 매우 신선한 데이터가 필요하지만 반드시 실시간이 아닌 경우에 배치와 스트림 처리 사이에 위치합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  데이터 스트리밍 아키텍처
&lt;/h2&gt;

&lt;p&gt;데이터 스트리밍 기술의 일반적인 아키텍처에는 데이터 소스, 데이터 수집 시스템, 스트림 처리 시스템, 데이터 저장 시스템이 포함됩니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;데이터 소스는 데이터 스트림을 생성합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache Kafka나 Amazon Kinesis와 같은 데이터 수집 시스템은 이러한 데이터 스트림을 캡처하여 처리합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache Flink나 Apache Spark Streaming과 같은 스트림 프로세서는 수집된 데이터를 실시간으로 처리합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;그런 다음 처리된 데이터는 추가 분석 또는 시각화 대시보드를 위해 데이터 레이크 또는 데이터 웨어하우스에 저장됩니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/developers/kafka/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub Kafka Bridge와&lt;/a&gt; 같은 시스템을 사용하여 데이터를 네트워크의 엣지로 직접 스트리밍할 수 있습니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;데이터는 데이터 파이프라인을 통해 소스에서 대상까지 아키텍처를 통해 흐릅니다. 본질적으로 데이터 파이프라인은 데이터의 출처에서 수집, 처리, 저장 또는 시각화를 거쳐 최종적으로 목적지까지 데이터의 여정을 나타냅니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 일관성
&lt;/h3&gt;

&lt;p&gt;데이터 일관성은 데이터 스트리밍에서 중요한 관심사입니다. 데이터 스트리밍 기술은 일관성을 보장하기 위해 이벤트 순서 지정, 정확한 한 번 처리, 내결함성 등 다양한 기술을 사용합니다. 이러한 기술은 데이터가 올바른 순서로 처리되고, 데이터가 손실되거나 여러 번 처리되지 않으며, 시스템이 데이터 손실 없이 장애로부터 복구할 수 있도록 보장합니다.&lt;/p&gt;

&lt;p&gt;예를 들어 PubNub은 읽기 수신, 메시지 순서 지정, 대기열 등 &lt;a href="https://www.pubnub.com/message-delivery-guarantee/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;메시지 전송을 보장하는&lt;/a&gt; 여러 가지 방법을 제공합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 스트리밍 기술을 위한 도구
&lt;/h3&gt;

&lt;p&gt;데이터 스트리밍 기술을 구현하는 데 사용할 수 있는 다양한 오픈 소스 및 상용 도구가 있습니다. 여기에는 Apache Kafka, Apache Flink, AWS Kinesis, Microsoft Azure Stream Analytics 등이 포함됩니다. 각 도구에는 고유한 장점과 사용 사례가 있으며, 데이터 스트리밍 애플리케이션의 특정 요구 사항에 따라 도구 선택이 달라집니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 데이터 스트리밍의 다음 단계
&lt;/h2&gt;

&lt;p&gt;데이터 스트리밍 기술의 기본 개념과 아키텍처를 이해했다면, 다음 단계는 이러한 기술을 자체 시스템에 구현하는 것입니다. PubNub은 기존 아키텍처에 쉽게 통합할 수 있는 강력하고 확장 가능한 실시간 데이터 스트리밍 플랫폼을 제공합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" title="Data Streaming Demo image" alt="Image showing real-time data streaming" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PubNub 데이터 스트리밍을 시작하는 단계는 다음과 같습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;데모 살펴보기&lt;/strong&gt;: PubNub은 플랫폼의 작동 방식을 이해하는 데 도움이 되는 &lt;a href="https://www.pubnub.com/demos/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;실시간 데이터 스트리밍 데모를&lt;/a&gt; 제공합니다. 이 데모는 채팅 앱에서 IoT 기기 제어에 이르기까지 다양한 사용 사례에 적용됩니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;기본&lt;/strong&gt; 사항 이해하기: PubNub에서는 &lt;a href="https://www.pubnub.com/learn/glossary/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;데이터 스트리밍에&lt;/a&gt; 대한 항목을 포함하여 주요 용어와 개념을 설명하는 포괄적인 용어집을 제공합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PubNub 일루미네이트 이해하기&lt;/strong&gt;: &lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub Illuminate를&lt;/a&gt; 사용하면 개발팀에 부담을 주지 않고도 즉시 수익화 전략을 맞춤화하고, 사용자 행동을 인센티브에 연결하고, 사용자 지정 실시간 집계 및 기기 지표를 통해 모든 행동을 추적하고, 결과를 즉시 확인할 수 있습니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;등록&lt;/strong&gt;: PubNub 계정에 가입하세요. &lt;a href="https://admin.pubnub.com/#/register?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;등록 페이지에서&lt;/a&gt; 할 수 있습니다. 무료 등급의 PubNub 계정에는 넉넉한 한도가 있으며 업그레이드할 때까지 신용 카드가 필요하지 않습니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;구축 시작&lt;/strong&gt;: 기본 사항을 숙지했다면 나만의 데이터 스트리밍 애플리케이션을 구축하세요. PubNub에서는 &lt;a href="https://www.pubnub.com/tutorials/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;실시간 데이터 스트리밍 애플리케이션 구축 튜&lt;/a&gt;토리얼을 비롯하여 다양한 유형의 애플리케이션 구축 과정을 안내하는 다양한 튜토리얼을 제공합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API 살펴보기&lt;/strong&gt;: PubNub은 애플리케이션을 구축하는 데 사용할 수 있는 다양한 API와 SDK를 제공합니다. 자세한 내용은 &lt;a href="https://www.pubnub.com/docs/sdks?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK 문서 페이지에서&lt;/a&gt; 확인할 수 있습니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;가격 이해하기&lt;/strong&gt;: 구축을 완료하기 전에 비용이 얼마나 드는지 알아두면 도움이 됩니다. PubNub의 요금에 대한 자세한 내용은 &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;가격 페이지에서&lt;/a&gt; 확인할 수 있습니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  데이터 스트리밍 기술의 사용 사례 자세히 살펴보기
&lt;/h2&gt;

&lt;h3&gt;
  
  
  실시간 데이터 분석
&lt;/h3&gt;

&lt;p&gt;데이터 스트리밍 기술의 주요 사용 사례 중 하나는 실시간 데이터 분석입니다. 데이터 스트림을 실시간으로 처리하고 분석함으로써 기업은 운영에 대한 즉각적인 인사이트를 얻고 정보에 입각한 신속한 의사 결정을 내릴 수 있습니다. 이는 사기 탐지, 시장 동향 분석 등에 실시간 데이터 분석을 사용할 수 있는 금융과 같은 산업에서 특히 유용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;실시간 분석 플랫폼의 한 예로&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub Illuminate를&lt;/a&gt; 들 수 있습니다. 그러나 PubNub Illuminate는 단순한 데이터 관리 플랫폼이 아니라 데이터 메트릭을 기반으로 조건을 정의하고 트리거되면 해당 데이터를 기반으로 동적 작업을 수행할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  사물 인터넷(IoT)
&lt;/h3&gt;

&lt;p&gt;데이터 스트리밍 기술의 또 다른 중요한 응용 분야는 장치에서 실시간으로 처리하여 가치 있는 인사이트를 제공할 수 있는 데이터 스트림을 생성하는 사물 인터넷(IoT)입니다. 예를 들어, 산업 장비의 성능을 모니터링함으로써 기업은 장비 고장으로 이어지기 전에 문제를 감지하고 해결할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  소셜 미디어 분석
&lt;/h3&gt;

&lt;p&gt;소셜 미디어 플랫폼은 매초마다 엄청난 양의 데이터를 생성하며, 데이터 스트리밍 기술은 이 데이터를 실시간으로 처리하여 기업이 트렌드를 모니터링하고 고객 정서를 추적하며 고객 피드백에 즉시 대응할 수 있게 해줍니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  이커머스
&lt;/h3&gt;

&lt;p&gt;이커머스 업계에서 데이터 스트리밍 기술은 실시간으로 고객 행동을 추적하여 개인화된 추천을 제공하고, 고객 경험을 개선하며, 매출을 증대할 수 있도록 지원합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  데이터 스트리밍 기술의 미래 트렌드
&lt;/h2&gt;

&lt;h3&gt;
  
  
  머신러닝 및 AI와의 통합
&lt;/h3&gt;

&lt;p&gt;데이터 스트리밍 기술의 중요한 트렌드 중 하나는 머신러닝과 제너레이티브 AI의 통합입니다. 머신러닝 모델은 정확하고 시기적절한 예측을 하는 데 필요한 실시간 데이터를 제공받을 수 있습니다. 이는 머신러닝 모델이 실시간 데이터를 기반으로 부품 고장을 예측할 수 있는 예측 유지보수에 특히 유용할 수 있는데, 예를 들어 모바일 디바이스의 배터리 방전 주기를 이용해 배터리의 예상 수명을 예측할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  오픈 소스 프레임워크 사용 증가
&lt;/h3&gt;

&lt;p&gt;데이터 스트리밍 기술을 구현하기 위한 도구로 Apache Kafka, Apache Flink, Spark Streaming과 같은 오픈 소스 프레임워크가 널리 사용되고 있습니다. 이러한 프레임워크는 대량의 데이터를 실시간으로 처리할 수 있는 강력한 기능을 제공하며, 오픈 소스 특성상 사용자 정의가 가능하고 다양한 사용 사례에 맞게 조정할 수 있습니다. 앞으로 이러한 프레임워크와 기타 오픈소스 프레임워크의 사용이 더욱 늘어날 것으로 예상됩니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 보안 및 개인정보 보호에 대한 중요성 증대
&lt;/h3&gt;

&lt;p&gt;민감한 데이터를 처리하기 위해 데이터 스트리밍 기술에 점점 더 의존하는 기업이 늘어나면서 데이터 보안과 개인정보 보호에 대한 중요성이 더욱 강조될 것입니다. 여기에는 데이터 스트림을 무단 액세스로부터 보호하고 데이터 개인정보 보호 규정을 준수하기 위한 강력한 보안 조치를 구현하는 것이 포함됩니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  더욱 발전된 데이터 엔지니어링 기법
&lt;/h3&gt;

&lt;p&gt;엔지니어들이 스트림 처리를 위한 보다 정교한 알고리즘, 데이터 파이프라인 최적화, 데이터 일관성 보장 등 기술에 익숙해지면서 더욱 발전된 데이터 엔지니어링 기법이 등장할 것으로 예상됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;데이터 스트리밍 기술의 미래는 밝아 보입니다. 비즈니스에 실시간으로 더 나은 운영 인사이트를 제공함으로써 과거 데이터에 의존하지 않고도 즉각적인 조치를 취할 수 있어 고객 만족도, 효율성 및 수익성을 높일 수 있습니다. 고객 관리, 이커머스, IoT, 소셜 미디어 분석 등 업종에 관계없이 데이터 스트리밍 기술은 비즈니스 운영 방식을 혁신할 수 있는 잠재력을 가지고 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub은 스트리밍 데이터로 비즈니스를 혁신하는 데 도움을 드릴 수 있습니다. 개발팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; )으로 문의하거나 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;지원팀에&lt;/a&gt; 연락하여 PubNub 개발과 관련된 모든 측면에 대해 도움을 받으세요.&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNub이 어떤 도움을 드릴 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/blog/data-streaming-technologies-overview/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>OpenAI를 사용한 채팅 중재</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 15:32:10 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/openaireul-sayonghan-caeting-jungjae-43dg</link>
      <guid>https://forem.com/pubnub-ko/openaireul-sayonghan-caeting-jungjae-43dg</guid>
      <description>&lt;p&gt;&lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;인앱 채팅이&lt;/a&gt; 포함된 모든 애플리케이션에는 사용자가 주고받을 수 있는 메시지를 규제하고 중재할 수 있는 방법이 필요합니다. 인간 중재자가 모든 부적절한 콘텐츠를 중재하는 것은 불가능하므로 중재 시스템은 자동으로 작동해야 합니다. 사용자가 종종 중재를 회피하려고 시도하기 때문에 머신러닝, 생성 AI, 대규모 언어 모델(LLM)[및 GPT-3, GPT-4 등의 GPT 모델]은 콘텐츠를 중재하는 데 널리 사용되는 방법입니다.&lt;/p&gt;

&lt;p&gt;모더레이션은 복잡한 주제이며, PubNub은 개발자의 모든 사용 사례를 충족할 수 있는 다양한 솔루션을 제공합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 함수는&lt;/a&gt; 메시지가 목적지에 도달하기 전에 메시지를 가로채서 수정할 수 있습니다. 외부 REST API 호출을 포함하여 함수 내에서 사용자 정의 로직을 적용할 수 있으므로 메시지 검토를 위해 외부 서비스를 사용할 수 있습니다. 이 문서에서는 이 접근 방식을 사용하여 OpenAI와 통합합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PubNub 함수는 콘텐츠 검토 및 감정 분석을 지원하는 &lt;a href="https://www.pubnub.com/integrations/?page=1&amp;amp;sortBy=Most%20recent&amp;amp;utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;사용자 지정 통합&lt;/a&gt; 기능을 제공하며, 여기에는 올가미 &lt;a href="https://www.pubnub.com/integrations/lasso-moderation/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;검토&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/tisane-labs-nlp/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Tisane&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/chat-message-profanity-filter/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;RegEx 기반 욕설 필터&lt;/a&gt;, &lt;a href="https://www.pubnub.com/integrations/lexalytics/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Lexalytics&lt;/a&gt; 및 &lt;a href="https://www.pubnub.com/integrations/communitysift/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Community Sift&lt;/a&gt; 등이 포함됩니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PubNub의 BizOps 워크스페이스는 메시지 편집 및 삭제 기능을 포함하여 &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;대화를 모니터링하고 중재할&lt;/a&gt; 수 있습니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open AI 중재 엔드포인트
&lt;/h2&gt;

&lt;p&gt;이 문서에서는 인공 지능(AI)을 사용하여 제공된 텍스트에 잠재적으로 유해한 용어가 포함되어 있는지 여부를 판단하는 REST API인 &lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;OpenAI의 모더레이션 API에&lt;/a&gt; 대해 살펴봅니다. 이 API의 목적은 개발자가 유해한 콘텐츠를 필터링하거나 제거할 수 있도록 하는 것이며, 작성 시점에서는 영어만 지원하지만 &lt;strong&gt;무료로&lt;/strong&gt; 제공되고 있습니다.&lt;/p&gt;

&lt;p&gt;모더레이션 API의 모델은 제공된 텍스트를 다음과 같이 분류합니다( &lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;API 문서에서&lt;/a&gt; 발췌):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;혐오&lt;strong&gt;:&lt;/strong&gt; 인종, 성별, 민족, 종교, 국적, 성적 지향, 장애 여부 또는 계급에 근거하여 혐오를 표현, 선동 또는 조장하는 콘텐츠입니다. 보호받지 못하는 집단(예: 체스 플레이어)을 겨냥한 혐오 콘텐츠는 괴롭힘에 해당합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;증오/협박:&lt;/strong&gt; 인종, 성별, 민족, 종교, 국적, 성적 지향, 장애 여부 또는 카스트에 따라 대상 그룹에 대한 폭력이나 심각한 위해를 포함하는 혐오 콘텐츠입니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;괴롭힘:&lt;/strong&gt; 특정 대상에 대한 괴롭힘을 표현, 선동 또는 조장하는 콘텐츠.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;괴롭힘/협박:&lt;/strong&gt; 모든 대상에 대한 폭력 또는 심각한 위해를 포함하는 괴롭힘 콘텐츠.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;자해&lt;strong&gt;:&lt;/strong&gt; 자살, 자해, 섭식 장애 등 자해 행위를 조장, 장려 또는 묘사하는 콘텐츠입니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;자해/의도:&lt;/strong&gt; 화자가 자살, 자해, 섭식 장애 등 자해 행위에 관여하거나 관여할 의도가 있음을 표현하는 콘텐츠입니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;자해/지시:&lt;/strong&gt; 자살, 자해, 섭식 장애 등 자해 행위를 조장하거나 그러한 행위를 하는 방법에 대한 지침 또는 조언을 제공하는 콘텐츠입니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;성적인 콘텐츠:&lt;/strong&gt; 성행위에 대한 묘사 등 성적 흥분을 불러일으키거나 성적인 서비스를 홍보하는 콘텐츠(성교육 및 건강 관련 내용은 제외).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;성적인 / 미성년자:&lt;/strong&gt; 18세 미만의 개인이 등장하는 성적인 콘텐츠.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;폭력:&lt;/strong&gt; 죽음, 폭력 또는 신체적 상해를 묘사하는 콘텐츠.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;폭력 / 그래픽:&lt;/strong&gt; 죽음, 폭력 또는 신체적 상해를 그래픽으로 자세히 묘사하는 콘텐츠.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;결과는 다음과 같이 JSON 구조로 제공됩니다(API 문서에서 발췌):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modr-XXXXX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-moderation-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;results&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flagged&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;categories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual/minors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence/graphic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/instructions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;category_scores&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Out of scope for this article&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PubNub에서 Open AI 모더레이션 API 호출하기
&lt;/h2&gt;

&lt;p&gt;이 단계별 튜토리얼에 따라 PubNub*&lt;em&gt;함수를 사용하여 모더레이션 API를 모든 PubNub 애플리케이션에 쉽게 통합할 수&lt;/em&gt;* 있습니다:&lt;/p&gt;

&lt;p&gt;함수를 사용하면 송수신되는 메시지와 같이 PubNub 플랫폼에서 발생하는 실시간 이벤트를 캡처할 수 있으며, 해당 함수 내에서 사용자 지정 서버리스 코드를 작성하여 필요에 따라 메시지를 수정, 경로 변경, 보강 또는 필터링할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 함수 유형은 메시지가 전달되기 &lt;em&gt;전에&lt;/em&gt; 호출되며 메시지가 수신자에게 전달되기 전에 실행을 완료해야 합니다. PubNub &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview#what-function-type-to-use?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;문서에서&lt;/a&gt; 자세한 배경과 세부 사항을 확인할 수 있지만 요약하면 '게시 또는 실행 전'은 &lt;em&gt;메시지 또는 해당 페이로드를 변경할&lt;/em&gt; 수 있는 동기식 호출입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub 함수 만들기
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털에&lt;/a&gt; 로그인하고 관리하려는 앱의 애플리케이션과 키 집합을 선택합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;'빌드' 탭 아래에서 찾을 수 있는 '함수'를 선택합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;'+ 새 모듈 만들기'를 선택하고 모듈의 이름과 설명을 입력합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;'+ 새 함수 만들기'를 선택하고 함수 이름을 지정합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;이벤트 유형으로 '게시 또는 실행 전'을 선택합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;채널 이름에 &lt;strong&gt;*를&lt;/strong&gt; 입력합니다(이 데모에서는 &lt;strong&gt;*를&lt;/strong&gt; 사용하지만 애플리케이션에서는 여기에서 관리하려는 채널만 지정할 수 있습니다).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PubNub 함수를 생성한 후에는 Open AI API 키를 비밀로 제공해야 합니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;'내 비밀'을 선택하고 'OPENAI_API_KEY'라는 이름의 새 키를 생성합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://platform.openai.com/account/api-keys"&gt;Open AI API 키를 생성하고&lt;/a&gt; 해당 키가 일반 API에 액세스할 수 있는지 확인합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;생성된 API 키를 방금 생성한 PubNub 함수 시크릿에 제공합니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PubNub 함수의 본문은 다음과 같습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xhr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vault&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aiResponse&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Append the response to the message&lt;/span&gt;
        &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aiResponse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;//  If the message was harmful, you might also choose to report the message here.&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Use cached key&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// Fetch key from vault&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apikey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apikey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.openai.com/v1/moderations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;headers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Open AI Timed out&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;함수 자체는 매우 간단합니다:&lt;/p&gt;

&lt;p&gt;수신된 각 메시지에 대해&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open AI 모더레이션 함수에 전달합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;반환된 모더레이션 객체를 메시지(JSON) 객체에 새 키로 추가합니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;함수를 저장하고 모듈이 시작되었는지 확인합니다.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  지연 시간
&lt;/h3&gt;

&lt;p&gt;방금 만든 PubNub 함수는 메시지가 전송될 때마다 동기적으로 실행되며, 해당 메시지는 함수 실행이 완료될 때까지 전달되지 않습니다. 함수에 외부 API 호출이 포함되어 있으므로 전달 지연 시간은 Open AI에 대한 API 호출이 얼마나 빨리 반환되는지에 따라 달라지며, 이는 PubNub의 통제를 벗어난 것이며 상당히 높을 수 있습니다.&lt;/p&gt;

&lt;p&gt;사용자 경험의 저하를 완화하는 방법에는 여러 가지가 있습니다. 대부분의 배포는 발신자에게 메시지가 전송되었다는 즉각적인 피드백을 제공한 다음 읽기 영수증에 의존하여 메시지가 전달(또는 보고)되었음을 나타냅니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  클라이언트 애플리케이션 업데이트
&lt;/h3&gt;

&lt;p&gt;일반적인 채팅 앱의 대부분의 기능을 보여주기 위해 &lt;a href="https://www.pubnub.com/docs/chat/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub Chat SDK를&lt;/a&gt; 사용하는 React 애플리케이션인 &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Chat 데모를&lt;/a&gt; 사용하여 애플리케이션 내에서 모더레이션 페이로드를 처리하는 데 필요한 것이 무엇인지 고려해 보겠습니다.&lt;/p&gt;

&lt;p&gt;잠재적으로 유해한 메시지가 표시되어야 하는지 여부를 추적하는 속성을 설정합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;그리고 유해할 수 있는 메시지를 기본적으로 표시하지 않도록 로직을 추가합니다(이 경우 &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/90447262583c251c983f04f23ffb23adcbbd6d25/chat-sdk-demo-web/app/chat/ui-components/message.tsx"&gt;message.tsx&lt;/a&gt; 내에):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{(&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt; &lt;span class="nx"&gt;contains&lt;/span&gt; &lt;span class="nx"&gt;potentially&lt;/span&gt; &lt;span class="nx"&gt;harmful&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-blue-400 cursor-pointer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
    &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Reveal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" title="Chat Moderation with OpenAI - Image 01" alt="Chat Moderation with OpenAI - Image" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이러한 변경 사항은 &lt;strong&gt;호스팅된&lt;/strong&gt; 버전의 &lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Chat 데모에는&lt;/a&gt; 제공되지 않지만, 사용 설명서에 이를 빌드하고 자체 키 집합에서 직접 실행할 수 있는 &lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/main/README.md"&gt;전체 지침이 포함되어&lt;/a&gt; 있다는 점에 유의하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  마무리
&lt;/h2&gt;

&lt;p&gt;지금까지 Open AI를 사용하여 애플리케이션에 모더레이션과 감성 분석을 모두 추가하는 빠르고 쉬운(그리고 무료인) 방법을 알아봤습니다.&lt;/p&gt;

&lt;p&gt;Open AI와 PubNub의 통합에 대해 자세히 알아보려면 다음 리소스를 확인하세요:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/openai-gpt-api-integration-with-functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;함수와 OpenAI GPT API 통합하기&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/build-a-chatbot-with-pubnub-and-chatgpt-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 및 ChatGPT로 챗봇 구축하기&lt;/a&gt; (PubNub 쇼케이스에 챗봇 추가하기)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/enhance-geo-app-with-pubnub-and-openai-chatgpt/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub &amp;amp; Chat GPT / OpenAI로 지오 앱 개선하기&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;개발팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; )에 문의하거나 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;지원팀에&lt;/a&gt; 연락하여 PubNub 개발과 관련된 모든 부분에 대해 도움을 받으세요.&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNub이 어떤 도움을 드릴 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/blog/chat-moderation-with-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>일루미네이트를 사용하여 게임 밸런스를 맞추는 방법</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 06:46:03 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/ilrumineiteureul-sayonghayeo-geim-baelreonseureul-majcuneun-bangbeob-4l8k</link>
      <guid>https://forem.com/pubnub-ko/ilrumineiteureul-sayonghayeo-geim-baelreonseureul-majcuneun-bangbeob-4l8k</guid>
      <description>&lt;p&gt;펍넙의 최신 제품인 일루미네이트는 게임 개발자, 제품 관리자, 프로젝트 매니저가 펍넙 플랫폼 내에서 빌드, 반복, 실험할 수 있도록 확장 가능한 의사결정 도구입니다.&lt;/p&gt;

&lt;p&gt;처음부터 뛰어난 UI로 설계된 일루미네이트를 사용하면 더 나은 게이머 경험을 제공하고 실시간으로 수익화를 가속화하기 위한 의사 결정을 내릴 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;그렇다면 게임 밸런싱이란 무엇이며, 실시간으로 어떻게 사용할 수 있을까요?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;게임 밸런스는 난이도와 공정성의 균형을 맞춰 게임플레이와 사용자 경험을 개선하는 게임 디자인의 한 분야입니다. 게임 밸런스는 의도한 플레이어 경험을 만들기 위해 보상, 도전 과제 및/또는 게임 요소를 조정하는 것으로 구성됩니다.&lt;/p&gt;

&lt;p&gt;게임 밸런스는 일반적으로 플레이어에게 공정성을 도입하는 것으로 이해됩니다. 여기에는 다음이 포함됩니다;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;난이도 조정,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;승패 조건 수정&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;게임 상태&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;경제 밸런싱&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;게임 밸런싱에 대한 자세한 정보는 다음에서 확인할 수 있습니다. &lt;a href="https://en.wikipedia.org/wiki/Game_balance"&gt;위키백과&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;실시간으로 게임 밸런싱을 사용하면 플레이어의 참여도를 유지하고, 신규 플레이어가 환영받는다고 느끼며, 게임플레이를 통해 수익을 창출하는 데 도움이 될 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;일루미네이트는 플레이어의 참여도를 유지하는 데 어떻게 도움이 되나요?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;앞서 언급했듯이 Illuminate는 즉각적인 의사 결정 도구입니다. 플레이어의 참여도를 유지하기 위해 게임을 처음 접하고 게임 플레이 방식에 익숙해지는 데 도움이 필요한 신규 플레이어에 집중합니다.&lt;/p&gt;

&lt;p&gt;이 예시에서는 자바스크립트로 작성된 소행성의 구식 복사본을 제작하고 PubNub 함수에서 전적으로 호스팅했습니다. PubNub 함수에 대한 자세한 내용은 &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;https://www.pubnub.com/docs/serverless/functions/overview&lt;/a&gt; 에서 확인할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;먼저 장면을 설정합니다.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;새로운 플레이어가 게임에 접속하여 게임을 시작했는데, 게임이 진행되지 않아 지루해지기 시작했다고 상상해 보세요.&lt;/p&gt;

&lt;p&gt;퍼블리시를 통해 게임에서 PubNub로 플레이어의 진행 상황과 점수를 알려주는 메시지를 보내면, Illuminate는 미리 정의된 메트릭을 기반으로 몇 가지 결정을 내린 다음 해당 플레이어에게 생명 3개를 구매하거나 생명 2개를 얻는 대신 유료 프로모션을 시청하는 옵션을 제공하는 메시지를 다시 보낼 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;화면을 살펴봅시다.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" title="Use Illuminate to Balance your Games - Image - 01" alt="Use Illuminate to Balance your Games" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;게임은 정상적으로 시작되지만, 보시다시피 저는 실력이 좋지 않아서 70점밖에 얻지 못하고 죽었습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" title="Use Illuminate to Balance your Games - Image - 02" alt="Use Illuminate to Balance your Games" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;계속 플레이할 수 있도록 하기 위해 Illuminate는 이 점수를 받았고 생명을 구매하거나 광고를 시청하여 생명을 얻을 수 있는 기회를 제공해야 한다고 계산했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" title="Use Illuminate to Balance your Games - Image - 03" alt="Use Illuminate to Balance your Games" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;저는 돈을 쓰기로 결정했고, 몇 개의 라이프를 구매할 수 있었고 빠르게 게임을 다시 시작할 수 있었습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" title="Use Illuminate to Balance your Games - Image - 04" alt="Use Illuminate to Balance your Games" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;일루미네이트의 비하인드 스토리 살펴보기.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;일루미네이트는 PubNub 계정 포털( &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;https://admin.pubnub.com/&lt;/a&gt;)의 '최적화' 제목 아래에서 찾을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" title="Use Illuminate to Balance your Games - Image - 05" alt="Use Illuminate to Balance your Games" width="291" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;여기서 가장 먼저 비즈니스 오브젝트를 살펴보겠습니다. 비즈니스 오브젝트는 데이터를 Illuminate로 가져오는 방법으로, 캡처해야 하는 데이터의 종류와 위치를 정의하는 데 도움이 됩니다.&lt;/p&gt;

&lt;p&gt;측정값을 추가하여 추적할 데이터를 정의하고, 차원을 추가하여 해당 데이터를 어떻게 세분화할지 정의할 수 있습니다.&lt;/p&gt;

&lt;p&gt;Illuminate의 설정을 설정하거나 이해하는 데 도움이 필요하면 여기에서 문서를 참조하세요( &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;https://www.pubnub.com/docs/illuminate/basics&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;게임 밸런스를 조정하려면 추적하고자 하는 대상과 신규 플레이어의 참여를 유지하기 위해 무엇을 제공할 것인지에 대한 지식이 필요합니다.&lt;/p&gt;

&lt;p&gt;코딩 없이도 변수를 추가, 제거 또는 수정하여 다양한 플레이어에게 제공하는 내용을 다듬고 조정할 수 있는 것이 바로 Illuminate의 기술입니다.&lt;/p&gt;

&lt;p&gt;이 간단한 예시에서는 게임 점수를 측정하기로 선택했지만 다른 측정값을 쉽게 추가할 수 있습니다;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;플레이어가 게스트인지, 아니면 게임 플랫폼에 계정을 가지고 있는지 여부&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;총 플레이 시간&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;디바이스 유형 - 웹, 모바일 TV&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;과거 이벤트나 게임에서 상품을 구매한 적이 있나요?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;다시 비즈니스 목표로 돌아가서, 제가 사용하고 있는 측정 기준을 보여드리겠습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" title="Use Illuminate to Balance your Games - Image - 06" alt="Use Illuminate to Balance your Games" width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이를 세분화해 보겠습니다:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;측정값:&lt;/strong&gt; 측정값: 측정하거나 합산할 수 있는 숫자 값입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;차원:&lt;/strong&gt; 측정값을 세분화하는 데 사용할 수 있는 정성적 값입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;메트릭:&lt;/strong&gt; 선택한 차원에 따라 세분화된 측정값의 집계입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;결정:&lt;/strong&gt; 조건 및 작업의 모음입니다. 조건이 충족되면 해당 작업이 트리거됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;대시보드:&lt;/strong&gt; 메트릭과 의사 결정을 시각화하는 실시간 차트의 모음입니다.&lt;/p&gt;

&lt;p&gt;제 예에서 제가 사용하는 측정 항목 중 하나는 점수가 500점 미만일 때 고객이 Illuminate에 도움을 요청하는 것입니다.&lt;/p&gt;

&lt;p&gt;그런 다음 이를 의사 결정에 매핑했습니다: "플레이어의 점수가 500점 미만이면 라이프 구매 또는 광고 시청 기회를 제공하세요."라는 결정을 내립니다.&lt;/p&gt;

&lt;p&gt;플레이어가 광고를 시청할지 또는 라이프를 구매할지 선택하면 이를 메트릭으로 피드백하여 대시보드에 표시합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" title="Use Illuminate to Balance your Games - Image - 07" alt="Use Illuminate to Balance your Games" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;다음은 게임 밸런싱 대시보드의 단순화된 보기입니다. 500포인트 미만을 획득한 플레이어와 광고를 시청하는 대신 라이프 구매를 선택한 플레이어를 추적하고 있음을 알 수 있습니다.&lt;/p&gt;

&lt;p&gt;다시 말하지만, 여기서 복잡성을 확장할 수 있는 범위는 매우 넓습니다;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;생명력이 저렴하다면 더 많은 플레이어가 추가 생명력을 위해 돈을 지불할까요?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;30초 광고를 시청할까요, 아니면 3분 광고를 시청할까요?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;전통적인 접근 방식과 비교했을 때?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;전략 게임? 온라인 게임? 모든 플레이어의 게임 경험과 게임 메커니즘의 균형을 맞추는 것은 오랜 시간이 걸리는 과정일 수 있습니다. 출시 전에는 다양한 게임 요소를 플레이 테스트하고, 입문 튜토리얼을 제작하며, 플레이어의 행동에 따라 플레이 시간을 극대화하고 게임이 너무 쉬워지는 것을 방지하기 위해 점진적인 레벨 설계를 합니다. 출시 후에는 플레이어 포럼을 모니터링하고, 플레이어 리텐션 수치와 플레이어 행동에 대한 분석을 확인한 다음 패치를 출시하여 밸런스 문제를 해결하고, 그 과정에서 게임을 너프하지 않아야 합니다!&lt;/p&gt;

&lt;p&gt;분석과 출시 주기가 매우 길어질 수 있는데, 이때 Illuminate가 도움이 될 수 있습니다. 게임 유형에 관계없이 실시간으로 의사 결정을 내릴 수 있습니다: FPS나 RPG와 같은 멀티플레이어 게임, Steam의 싱글플레이어 격투 게임, 리그 오브 레전드와 같은 배틀 아레나 등 게임 유형에 관계없이 실시간 의사 결정을 내릴 수 있습니다. 비디오 게임이 온라인 상태이고 순간적인 행동에 따라 플레이어 밸런스가 영향을 받을 수 있는 게임이라면 Illuminate를 통해 플레이어 경험을 향상시킬 수 있습니다 - PM에게 물어보니 테이블탑 보드 게임과 카드 게임은 아직 로드맵에 없다고 하네요 :(&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;마무리&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;앱에 즉각적인 의사 결정 반응과 도구를 도입하여 플레이어 경험을 향상시킬 수 있는 빠르고 코드 없는 방법으로 PubNub의 Illuminate를 사용하여 게임 밸런스를 조정할 수 있습니다.&lt;/p&gt;

&lt;p&gt;실시간 액션이 포함된 첫 번째 게임을 만드는 방법에 대해 자세히 알아보려면 &lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;게임용 일루미네이트&lt;/a&gt; 페이지와 &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;설명서를&lt;/a&gt; 확인하세요. 유니티 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;지원팀도&lt;/a&gt; 가이드라인과 권장 사항을 통해 도움을 드릴 수 있습니다. 다음 GDC 컨퍼런스에서 여러분의 PubNub로 제작한 게임을 만나 뵙고 싶습니다!&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNub이 어떤 도움을 드릴 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 기사는 원래 &lt;a href="https://www.pubnub.com/blog/how-to-use-illuminate-to-balance-your-games/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Google 지도 API를 사용한 자바스크립트 지리적 위치 추적</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 14:35:46 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/google-jido-apireul-sayonghan-jabaseukeuribteu-jirijeog-wici-cujeog-foa</link>
      <guid>https://forem.com/pubnub-ko/google-jido-apireul-sayonghan-jabaseukeuribteu-jirijeog-wici-cujeog-foa</guid>
      <description>&lt;p&gt;모든 키워드가 완벽하게 포함된 업데이트된 블로그 게시물을 확인하세요.&lt;/p&gt;

&lt;p&gt;이 글은 Google Maps JavaScript API와 PubNub를 사용하여 위치 정보 기능을 갖춘 실시간 웹 애플리케이션을 만드는 방법에 대한 4편으로 구성된 시리즈의 마지막 글입니다. 이 튜토리얼에서는 JavaScript와 PubNub를 사용하여 비행 경로를 생성하는 사용자 경험을 안내합니다.&lt;/p&gt;

&lt;p&gt;이 모든 것이 어떻게 구현되는지 예시를 보려면 PubNub 웹사이트의 &lt;a href="https://showcase.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;쇼케이스 데모를&lt;/a&gt; 확인하세요. 위치 정보 데모로 이동하여 PubNub와 실시간 트래킹을 통합하는 방법을 확인하세요. 데모 이면의 코드를 보려면 &lt;a href="https://github.com/PubNubDevelopers/PubNub-Showcase/tree/main/web/geolocation"&gt;깃허브에서&lt;/a&gt; 모든 것이 어떻게 작동하는지 확인하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  비행 경로란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;이 &lt;strong&gt;튜토리얼에서&lt;/strong&gt; 구현된 비행 경로는 &lt;strong&gt;모바일 디바이스나&lt;/strong&gt; 웹 브라우저에 있는 지도에서 &lt;strong&gt;사용자가 지정한 지점을 통과하는 경로를 동적으로 그릴&lt;/strong&gt; 수 있는 &lt;strong&gt;폴리라인을&lt;/strong&gt; 의미합니다. 폴리라인은 이동 패턴을 추적하기 위해 &lt;strong&gt;HTML5 지리적 위치 API&lt;/strong&gt; 및 &lt;strong&gt;Google 지도 API에&lt;/strong&gt; 필수적인 요소입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  튜토리얼 개요
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;1,&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;2&lt;/a&gt;, &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;3부&lt;/a&gt;( )에서 &lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;JavaScript 환경을 설정하고&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;지도 마커와&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;위치 추적에&lt;/a&gt; 대해 다룬 사전 요구 사항을 완료했는지 확인하세요.&lt;/p&gt;

&lt;p&gt;완료했으면 다음 파트로 넘어가세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  코드 연습
&lt;/h2&gt;

&lt;p&gt;먼저 지도, 마커 및 폴리라인 &lt;strong&gt;좌표&lt;/strong&gt; 객체를 보유할 &lt;code&gt;let\&lt;/code&gt; 변수 &lt;code&gt;map\&lt;/code&gt;, &lt;code&gt;mark\&lt;/code&gt; 및 &lt;code&gt;lineCoords\&lt;/code&gt;를 정의해 보겠습니다. 이렇게 하면 PubNub 이벤트가 들어올 때 이를 조정할 수 있습니다. 그 후, 로드 준비가 되면 &lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;구글 지도 자바스크립트 API에서&lt;/a&gt; 사용할 수 있는 &lt;code&gt;initialize\&lt;/code&gt; 콜백을 정의합니다. YOUR_GOOGLE_MAPS_API_KEY`를 실제 &lt;strong&gt;API 키로&lt;/strong&gt; 바꿔야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
let map;&lt;br&gt;
let mark;&lt;br&gt;
let lineCoords = [];&lt;br&gt;
let initialize = function() {&lt;br&gt;
  map  = new google.maps.Map(document.getElementById('map-canvas'), {center:{lat:lat,lng:lng},zoom:12});&lt;br&gt;
  mark = new google.maps.Marker({position:{lat:lat, lng:lng}, map:map});&lt;br&gt;
};&lt;br&gt;
window.initialize = initialize;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;이제 'redraw' 이벤트 핸들러를 사용하여 geolocation의 `getCurrentPosition()` 메서드를 호출하여 새 위치 정보를 즉시 업데이트합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  위도/경도
&lt;/h3&gt;

&lt;p&gt;다음으로, 새로운 위치 변경 이벤트가 즉시 발생할 때마다 호출할 redraw 이벤트 핸들러를 정의합니다. 함수의 첫 번째 부분에서는 위도와 경도를 메시지의 새 값으로 설정합니다. 그런 다음 지도, 마커 및 폴리라인 객체에서 적절한 메서드를 호출하여 위치를 업데이트하고 라인의 끝에 추가하고 지도를 최신으로 업데이트합니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
var redraw = function(payload) {&lt;br&gt;
  lat = payload.message.lat;&lt;br&gt;
  lng = payload.message.lng;&lt;br&gt;
  map.setCenter({lat:lat, lng:lng, alt:0});&lt;br&gt;
  mark.setPosition({lat:lat, lng:lng, alt:0});&lt;br&gt;
  lineCoords.push(new google.maps.LatLng(lat, lng));&lt;br&gt;
  var lineCoordinatesPath = new google.maps.Polyline({&lt;br&gt;
    path: lineCoords,&lt;br&gt;
    geodesic: true,&lt;br&gt;
    strokeColor: '#2E10FF'&lt;br&gt;
  });&lt;br&gt;
  lineCoordinatesPath.setMap(map);&lt;br&gt;
};&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 초기화
&lt;/h2&gt;

&lt;p&gt;콜백을 정의한 후에는 &lt;strong&gt;iOS, Android, JavaScript, .NET, Java, Ruby, Python, PHP&lt;/strong&gt; 등과 같은 기술 스택에서 &lt;strong&gt;휴대폰, 태블릿, 브라우저&lt;/strong&gt;, &lt;strong&gt;노트북에서&lt;/strong&gt; 작동하는 PubNub 실시간 데이터 스트리밍 기능을 초기화합니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
const pnChannel = "map3-channel";&lt;br&gt;
const pubnub = new PubNub({&lt;br&gt;
  publishKey:   'YOUR_PUB_KEY',&lt;br&gt;
  subscribeKey: 'YOUR_SUB_KEY'&lt;br&gt;
});&lt;br&gt;
pubnub.subscribe({channels: [pnChannel]});&lt;br&gt;
pubnub.addListener({message:redraw});&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;실시간 채널에서 주제를 &lt;strong&gt;게시하고&lt;/strong&gt; &lt;strong&gt;구독할&lt;/strong&gt; 수 있는 PubNub의 기능은 효율적인 데이터 스트리밍 기능을 제공합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  위도/경도 게시하기
&lt;/h2&gt;

&lt;p&gt;이 간단한 튜토리얼에서는 현재 시간을 기준으로 새 위치를 게시하는 기본 JavaScript 간격 타이머를 설정해 보겠습니다. 500밀리초마다 새로운 위도/경도 객체(북동쪽으로 이동하는 좌표 포함)를 지정된 PubNub 채널에 게시하는 익명 콜백 함수를 호출합니다. 앱에서는 실시간 디바이스 위치 또는 사용자가 보고한 위치에서 위치를 가져올 가능성이 높습니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
setInterval(function() {&lt;br&gt;
  pubnub.publish({channel:pnChannel, message:{lat:window.lat + 0.001, lng:window.lng + 0.01}});&lt;br&gt;
}, 500);&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;마지막으로, 마지막에 구글 지도 API를 초기화하여 DOM 요소와 자바스크립트 전제 조건이 충족되었는지 확인합니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`js&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  마무리
&lt;/h2&gt;

&lt;p&gt;이 튜토리얼 시리즈를 통해 웹 및 모바일 앱에서 실시간 위치 추적을 위해 &lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;Google Maps API와&lt;/a&gt; &lt;a href="https://www.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub가&lt;/a&gt; 어떻게 함께 작동하는지 살펴봤습니다. 이는 &lt;strong&gt;Uber나&lt;/strong&gt; &lt;strong&gt;Lyft와&lt;/strong&gt; 같은 차량 호출 서비스가 차량의 움직임을 실시간으로 보여주는 방식과 유사합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 핵심 개념을 이해해 보세요. &lt;a href="https://github.com/PubNubDevelopers"&gt;GitHub 페이지와&lt;/a&gt; 웹사이트에서 제공되는 사용 후기를 통해 사용자들의 경험을 직접 들어보세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/#/login?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례에 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다. 자바스크립트 Google 지도 API 전용 섹션과 SDK에서 실시간 추적과 함께 사용하는 방법을 확인할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>인지 서비스 사용 사례 살펴보기</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 14:01:19 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/inji-seobiseu-sayong-sarye-salpyeobogi-42ho</link>
      <guid>https://forem.com/pubnub-ko/inji-seobiseu-sayong-sarye-salpyeobogi-42ho</guid>
      <description>&lt;p&gt;코그너티브 서비스를 통해 혁신을 이룬 앱과 기업의 몇 가지 사례와 향후 사용 사례를 통해 코그너티브 서비스가 기술 환경을 얼마나 변화시키고 있는지 살펴보세요.&lt;/p&gt;

&lt;p&gt;AWS, IBM, Microsoft Azure와 같은 거대 클라우드 기업의 코그너티브 서비스 덕분에 이제 모든 규모의 개발자 팀은 엄청난 성능의 &lt;a href="https://pubnub.com/resources/ebook/building-apps-with-cognitive-services/" rel="noopener noreferrer"&gt;코그너티브 서비스를&lt;/a&gt; 이용할 수 있게 되었습니다. API를 통해 제공되는 이러한 서비스를 통해 애플리케이션에 차세대 인텔리전스를 쉽게 도입할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://pubnub.com/learn/glossary/what-is-a-chat-api/" rel="noopener noreferrer"&gt;&lt;strong&gt;채팅&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;및 소셜 상호작용&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;2015년에 채팅 앱의 월간 활성 사용자 수는 소셜 네트워크의 사용자를 넘어섰고, 그 격차는 계속 벌어지고 있습니다. 실제로 메시징은 소셜 네트워크 자체의 필수 기능이 되었습니다. 이러한 급속한 성장과 함께 메시징 앱은 짧은 텍스트 기반의 메시지를 주고받는 단순한 도구에서 놀랍고 즐거운 기능을 갖춘 혁신적이고 완전한 기능을 갖춘 경험으로 진화했습니다. 그리고 이러한 혁신의 원동력은 바로 코그너티브 API입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;챗봇과 인지 컴퓨팅&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;챗봇은 가장 초기 형태의 AI 알고리즘 중 하나입니다. 튜링 테스트를 곧 통과할 것 같지는 않지만 음성 지원 애플리케이션의 자연스러운 진화를 나타냅니다. 예전에는 지원팀에 전화하여 1번을 눌러 미지급금에 대해 문의했다면, 이제는 의도를 파악할 수 있는 시스템에 완전한 문장으로 말할 수 있습니다.&lt;/p&gt;

&lt;p&gt;기업이 대기 시간을 줄이고, 고객 경험을 개선하며, 전화 상담원 비용을 최소화하기 위해 챗봇을 도입하는 사례가 폭발적으로 증가하고 있습니다. 현재 챗봇은 주로 기본적인 요청을 이해하고 미리 정의된 규칙에 따라 응답하거나 "내 주문이 어디 있나요?" 또는 "챗봇, 무드등 켜줘"와 같은 질문에 답하는 등 간단한 작업을 처리하는 데 주로 사용되고 있습니다.&lt;/p&gt;

&lt;p&gt;하지만 &lt;a href="https://www.ibm.com/cloud/watson-assistant/" rel="noopener noreferrer"&gt;왓슨 어시스턴트나&lt;/a&gt; &lt;a href="https://aws.amazon.com/lex/" rel="noopener noreferrer"&gt;Amazon Lex와&lt;/a&gt; 같은 API를 사용하면 이러한 자연어 요청에서 관찰된 패턴에 로직을 적용할 수 있는 서비스를 쉽게 구축할 수 있습니다. 예를 들어 이러한 서비스는 이륙 지연을 겪고 있는 공항에서 갑자기 전화가 쇄도하는 것을 관찰하고 항공편 일정 변경의 우선순위를 정하기 위해 옵션 순서를 변경할 수 있습니다. 또는 특정 국가나 지역에서 걸려온 전화가 다른 언어로 진행되는 경향이 있음을 파악하고 그에 따라 기본값을 변경할 수도 있습니다. 심지어 문법 패턴을 파악하여 고객에게 즉시 관리자에게 전달하도록 지시할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;음성 인식, 텍스트 음성 변환, 얼굴 인식, 머신 러닝 모델을 사용하는 지능형 대화 인터페이스는 다양한 목적에 따라 매우 매력적인 경험과 실제와 같은 대화를 제공할 수 있습니다. 더 좋은 점은 이러한 경험을 통해 학습할 수 있다는 것입니다.&lt;/p&gt;

&lt;p&gt;챗봇은 추천을 하고, 추상적인 개념을 이해하고, 이전 참여를 기반으로 개인을 알아가는 등 우리가 은행을 이용하고, 쇼핑하고, 학습하는 방식을 변화시킬 것입니다. 결국에는 사람과 대화하고 있는지조차 모를 정도로 능숙해질 것입니다.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;코드 예시: 홈 오토메이션 챗봇&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;왓슨과 PubNub ChatEngine을 사용하면 스마트 홈을 제어하는 &lt;a href="https://www.pubnub.com/docs/chat/samples?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;인공 지능 챗봇을&lt;/a&gt; 쉽게 만들 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" title="chatengine home automation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 튜토리얼에서는 텍스트 명령을 받아 파싱하고 이를 기반으로 작업을 수행하는 챗봇을 구축하는 방법을 보여 줍니다. 예를 들어 사용자가 "거실에 불 켜줘"라고 입력하면 봇이 조명을 켭니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;homeauto_intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
  &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnOFF&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnON&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;자연어 처리&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;대량의 자연어 데이터를 효율적으로 처리할 수 있는 AI 솔루션의 포괄적인 용어인 데이터 과학 및 자연어 처리(NLP)는 또 다른 큰 영향력을 발휘하는 영역입니다. NLP는 의미론적 관점에서 단어와 문법을 측정할 뿐만 아니라 메시지별 분석을 통해 사용자가 주제나 주제에 대해 어떻게 느끼는지 밝혀내어 감정과 정서를 파악할 수 있습니다.&lt;/p&gt;

&lt;p&gt;NLP는 단 몇 분 만에 평판이 형성되거나 형성되지 않을 수 있는 상황에서 사용자 의견을 이해하고 대응해야 하는 브랜드, 유명인, 조직에게 큰 이점을 제공합니다. 한 브랜드가 새로운 제품 광고를 시작한다고 상상해 보세요. 적절한 코그너티브 서비스를 사용하면 특정 해시태그나 제품명에 대한 소셜 미디어 스트림을 활용하여 NLP API가 모든 관련 메시지를 분석하고 대중이 제품에 대해 어떻게 반응하는지에 대한 피드백을 제공할 수 있습니다.&lt;/p&gt;

&lt;p&gt;아래는 트위터에서 사람들이 미국 정치인에 대해 어떻게 느끼는지 분석하고 측정하도록 설계된 앱의 예입니다. 이 앱은 특정 키워드와 문구를 모니터링한 다음 정의된 지역에서 사용자의 감정을 플로팅할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" title="1 d i gD52jeJi71ihWIt9rA 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;예를 들어, 사용자가 "나는 행복하다"라는 텍스트를 제출하면...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;왓슨은 텍스트를 분석하여 다음과 같은 결과를 반환합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_sentiment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;overall&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;positive&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;negative&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;neutral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;score&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.88006828&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;브랜드는 이미 시장 감정 분석에 많은 비용을 지출하고 있습니다. 이러한 시스템이 더욱 지능적이고 강력하며 자동화됨에 따라 더 적은 비용으로 대중을 훨씬 더 잘 이해할 수 있게 될 것입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;이커머스&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;온라인 쇼핑은 우리가 상품을 구매하는 방식을 완전히 바꾸어 놓았지만, 이커머스에는 오프라인 매장의 핵심 요소인 친절한 직원이 부족합니다. 온라인 상점의 운영 규모를 고려할 때, 실제 직원이 실시간 채팅을 하는 것은 경제적으로 타당하지 않습니다.&lt;/p&gt;

&lt;p&gt;따라서 많은 온라인 스토어에서 지능형 쇼핑 도우미 봇을 통해 쇼핑 경험을 최적화하고, 쇼핑객의 질문을 지원하고, 추천을 하고, 결제까지 도와주고 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wersm.com/nordstrom-ruled-holidays-with-its-amazing-chatbot/" rel="noopener noreferrer"&gt;Nordstrom은&lt;/a&gt; 단순한 사전 정의된 질문과 답변을 넘어 인지 서비스를 사용하여 고객이 찾고 있는 것을 진정으로 이해하고 필요에 따라 지원하는 메신저 챗봇으로&lt;a href="https://wersm.com/nordstrom-ruled-holidays-with-its-amazing-chatbot/" rel="noopener noreferrer"&gt;지난 홀리데이 시즌을 지배했습니다&lt;/a&gt;. 챗봇은 선물 추천을 제공하고 주문 처리까지 도와주었습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" title="nordstrombot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;또한 챗봇은 간단한 문제를 처리하기 위해 담당자가 한 시간씩 기다리는 지겨운 고객 지원 전화 통화에서 벗어날 수 있게 해줍니다. 아마존은 대부분의 고객이 주문과 관련하여 도움이 필요할 때 겪는 사소한 문제를 해결할 수 있는 챗봇을 배포했습니다.&lt;/p&gt;

&lt;p&gt;이제 현실 세계에서 인텔리전스의 몇 가지 사례를 살펴봤으니, 앞으로 인지 서비스가 세상을 어떻게 변화시킬지 미래를 들여다보겠습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;스마트 시티&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;미래의 도시는 보다 안전하고 효율적이며 환경을 고려한 다양한 통합 인텔리전스 서비스에 의존하게 될 것입니다. 이미지 인식, 컴퓨터 비전 및 비전 API는 도시 공간 내에서 이미지를 처리하고 조치를 취하는 이러한 변화에서 중요한 역할을 할 것입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;농업&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;전 세계 인구는 계속 증가하고 있으며, 앞으로 수십억 명의 인구를 먹여 살리는 것은 상당한 도전이 될 것입니다. 인지 서비스는 농장과 공장을 관리하는 데 중요한 역할을 할 것이며, 이전에는 없었던 정밀도로 지능적인 결정을 내리고 자원을 제어할 수 있게 해줄 것입니다.&lt;/p&gt;

&lt;p&gt;스마트 팜과 IoT는 가능한 한 많은 가치 있는 데이터 포인트를 통합하여 직관적이지 않은 것처럼 보이는 농업 관련 의사 결정도 지능적으로 내릴 수 있게 될 것입니다. 예를 들어, 인지 서비스는 실시간 날씨 데이터, 원격 센서 데이터, 과거 실적을 종합하여 개별 관개 계획을 완벽하게 수립하고 매일의 고유한 상황에 맞게 업데이트할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;데이터 보안&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;우리가 더 많이 연결되고 디지털 생활이 물리적 생활을 압도함에 따라 데이터 프라이버시와 보안은 막연하게 인식하던 것에서 당황스럽고 항상 존재하는 개인적 위협으로 변모하고 있습니다.&lt;/p&gt;

&lt;p&gt;규정과 규칙(HIPAA, GDPR, SOC II)은 기업과 조직이 적절한 보호 장치를 마련할 수 있는 한 가지 방법입니다. 이러한 복잡한 규정을 세부적으로 구현하는 것은 처리해야 할 일이 많을 수 있는데, 바로 이 부분에서 머신러닝의 역할이 중요합니다.&lt;/p&gt;

&lt;p&gt;인지 서비스는 규칙과 규정을 이해하고 이해하도록 학습시킨 다음 규정 준수를 위한 방법을 제안할 수 있습니다. 인지 서비스를 통해 관련 규칙과 법률부터 콘텐츠 중재에 이르기까지 데이터 보안에 대한 귀중한 인사이트를 제공할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;헬스케어&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;의료 산업은 일반적으로 타이트한 마진, 엄격한 규제, 사일로화된 연구 개발 등 여러 가지 이유로 다른 산업에 비해 혁신이 느리게 진행됩니다. 코그너티브 서비스는 혁신의 장벽을 허물고 조직에서 환자에 이르는 의료 서비스 전달 체계를 개선할 수 있는 기회를 제공합니다.&lt;/p&gt;

&lt;p&gt;의료 분야의 의사 결정은 일반적으로 사일로화된 환자 단위로 이루어집니다. 반면 인지 서비스는 사회경제적 상태, 환경, 의료 서비스 접근성 등 건강에 영향을 미치는 요인들을 종합적으로 분석하고 이에 따라 조치를 취합니다. 인지 서비스는 건강 및 웰니스 프로그램을 포함하여 의사에게 더 나은 맞춤형 환자 치료를 추천할 수 있습니다.&lt;/p&gt;

&lt;p&gt;인지 서비스는 의료 기관 내 기존 시스템의 통합과 연결을 촉진하고 필수 인사이트를 발굴할 수 있습니다. 데이터를 통합하고 이해관계자의 요구를 연결할 수 있게 된 조직은 보다 효율적으로 운영하면서 더 나은 치료를 제공할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;지금 바로 인텔리전스&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;이 글에서는 코그너티브 서비스가 비즈니스에 대한 사고 방식과 애플리케이션이 수행할 수 있는 역할을 어떻게 변화시킬지 아주 작은 샘플만 설명했습니다. 과거에는 소프트웨어가 지시를 따랐습니다. 하지만 인지 서비스를 통해 솔루션은 적응하고 진화하며 불과 몇 년 전만 해도 불가능해 보였던 일들을 해낼 수 있습니다. 모든 의미를 다 파악할 수는 없지만, 지금까지 알려진 바에 따르면 비즈니스에 미치는 영향이 심대하고 긍정적일 것이라는 점은 의심할 여지가 없습니다.&lt;/p&gt;

&lt;h1&gt;
  
  
  펍넙이 어떤 도움을 드릴 수 있을까요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>실시간 GitHub 대시보드 커밋 추적하기</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 30 May 2024 19:36:32 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/silsigan-github-daesibodeu-keomis-cujeoghagi-39fc</link>
      <guid>https://forem.com/pubnub-ko/silsigan-github-daesibodeu-keomis-cujeoghagi-39fc</guid>
      <description>&lt;p&gt;소프트웨어 개발 영역에서 실시간 C3.js 차트는 조직의 활동을 효과적으로 모니터링할 수 있는 방법을 제공합니다. 엔지니어링 팀의 경우 추적 가능한 메트릭 중 하나는 GitHub 커밋입니다. 이 블로그 게시물에서는 이 주제를 살펴보면서 GitHub의 API를 활용하여 실시간 대화형 그래프로 GitHub 커밋 데이터를 검색하고 표시하는 프로세스를 안내하는 튜토리얼을 제공합니다. HTML, Javascript, CSS의 기능을 활용하고 PubNub를 사용하여 GitHub 대시보드를 만들고 커밋 데이터를 스트리밍하는 한편, C3.js가 시각화에 도움을 줄 것입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/blog/building-realtime-live-updating-animated-graphs-c3-js/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;실시간 C3.js 차트에&lt;/a&gt; 대해 자세히 알아보려면 &lt;a href="https://pubnub.com/blog/building-realtime-live-updating-animated-graphs-c3-js/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;훌륭한 튜토리얼을&lt;/a&gt; 참조하세요. 이제 시작해 보겠습니다!&lt;/p&gt;

&lt;h2&gt;
  
  
  실시간 GitHub 대시보드 만드는 방법
&lt;/h2&gt;

&lt;p&gt;실시간 GitHub 대시보드를 만들려면 GitHub 리포지토리와 같은 다양한 데이터 소스에 연결하고 몇 가지 필요한 종속성을 처리해야 합니다. 보안 코딩 및 데이터 암호화와 같은 필요한 사이버 보안 조치에 유의하세요. 업계 표준 보안 프로토콜을 준수하는 것은 필수입니다.&lt;/p&gt;

&lt;p&gt;다음은 단계별 가이드입니다:&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub 웹후크 추가하기
&lt;/h3&gt;

&lt;p&gt;웹훅을 설정하려면 다음 단계를 따르세요:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;GitHub 리포지토리를 만들거나 기존 Git 리포지토리를 사용합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;페이지 오른쪽의 '설정'을 클릭합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;페이지 왼쪽의 '&lt;a href="https://www.pubnub.com/learn/glossary/what-is-a-webhook/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;웹훅&lt;/a&gt;'을 클릭합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;오른쪽 상단의 '웹후크 추가'를 클릭합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub에서 비밀번호를 묻는 메시지가 표시되면 입력합니다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;'페이로드 URL'에 &lt;strong&gt;&lt;a href="http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME" rel="noopener noreferrer"&gt;http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME&lt;/a&gt;&lt;/strong&gt; 을 입력합니다. ORG-NAME을 조직의 이름으로, TEAM-NAME을 리포지토리를 제어하는 팀으로 바꿉니다.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" title="Github Webhook Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  시각적 대시보드 로드
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;이 페이지를 방문합니다&lt;/a&gt;. PubNub 대시보드를 통해 전송된 모든 커밋의 목록이 표시됩니다. 커밋 중 하나를 GitHub로 푸시하면 수십 밀리초 내에 GitHub 커밋 대시보드에 메시지가 표시되고 차트가 실시간으로 업데이트됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Github 커밋 대시보드 구축 방법
&lt;/h2&gt;

&lt;p&gt;이 대시보드는 GitHub, PubNub 데이터 스트림 네트워크, &lt;a href="https://c3js.org/" rel="noopener noreferrer"&gt;C3.js로&lt;/a&gt; 구동되는 D3 차트 시각화의 매시업입니다. 커밋이 GitHub로 푸시되면, 커밋 메타데이터가 작은 Heroku 인스턴스에 게시되어 PubNub 네트워크에 게시됩니다. &lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;우리는 GitHub 페이지의 대시보드 페이지에서 호스팅하고 있습니다.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Heroku 인스턴스가 GitHub에서 커밋 데이터를 받으면 &lt;strong&gt;pubnub-git&lt;/strong&gt; 채널의 공개 게시/구독 키를 사용하여 해당 데이터의 요약을 PubNub에 게시합니다. &lt;a href="https://www.pubnub.com/docs/console/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;여기에서 개발자 콘솔을 통해 pubnub-git 채널을 모니터링할 수 있습니다&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;다음은 메시지 페이로드 예시입니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avatar_url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://avatars.githubusercontent.com/u/857270?v=3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;num_commits&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team-pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;time&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1430436692806&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;repo_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent/test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;대시보드가 &lt;strong&gt;구독 콜백을&lt;/strong&gt; 통해 이 정보를 수신할 때 마법의 후반부가 시작됩니다. 대시보드의 소스를 보면 이 코드를 볼 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayLiveMessage&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이 구독 호출은 &lt;strong&gt;pubnub-git&lt;/strong&gt; 채널에서 메시지가 수신될 때마다 JavaScript 함수 &lt;strong&gt;displayLiveMessage()&lt;/strong&gt; 가 호출되도록 합니다. displayLiveMessage()는 로그의 맨 위에 커밋 푸시 알림을 추가하고 C3 시각화 차트를 업데이트합니다.&lt;/p&gt;

&lt;p&gt;하지만 대시보드가 처음 로드될 때 어떻게 채워질까요?&lt;/p&gt;

&lt;h2&gt;
  
  
  대시보드에 PubNub 저장 및 재생 API 활용하기
&lt;/h2&gt;

&lt;p&gt;PubNub는 전송된 각 메시지의 기록을 보관하며, 개발자가 저장 &lt;a href="https://www.pubnub.com/products/pubnub-platform/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;및 재생(기록) API를&lt;/a&gt; 통해 저장된 메시지에 액세스할 수 있는 방법을 제공합니다. 웹 대시보드의 더 깊은 곳에 다음 코드가 표시됩니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;displayMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이것은 pubnub-git 채널을 통해 전송된 마지막 1,000개의 메시지를 검색하는 요청입니다. 따라서 해당 메시지가 전송되었을 때 웹 대시보드가 오프라인 상태였더라도 해당 메시지를 검색하고 해당 데이터를 사용하여 마치 영구적으로 온라인 상태인 것처럼 대시보드를 채울 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 기능은 셀룰러 네트워크의 모바일 앱이나 커넥티드 카처럼 연결이 간헐적이거나 불안정한 디바이스를 다룰 때 특히 유용합니다. PubNub 네트워크 덕분에 시각화 대시보드에는 애플리케이션의 상태를 저장하기 위한 백엔드가 필요하지 않습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  나만의 GitHub 대시보드 구축
&lt;/h2&gt;

&lt;p&gt;Github 대시보드 구축을 시작하려면 github.com에서 Git Commit UI 리포지토리를 포크하고 설정 지침을 위한 README를 따르세요. 오픈 소스 커뮤니티 협업의 일환으로 풀 리퀘스트를 환영합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" title="687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  실시간 대시보드의 향후 트렌드 및 발전 방향
&lt;/h2&gt;

&lt;p&gt;실시간 대시보드 및 관련 기술의 최신 동향과 발전을 주시하는 것은 매우 중요합니다. 여기에는 실시간 데이터 전송을 위한 웹 소켓, 즉각적인 인사이트를 얻기 위한 알림 사용, 다양한 워크플로우에서 실시간 대시보드 사용 등이 포함됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;PubNub은 수많은 고객이 실시간 애플리케이션으로 성공을 거두는 데 도움을 주었습니다. 예를 들어, LinkedIn의 실시간 알림 시스템...&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub 계정에 가입하면 PubNub 키에 무료로 즉시 액세스할 수 있습니다. PubNub 계정에서 사용할 수 있는 최신 기능은 다음과 같습니다...&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 포괄적인 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 즉시 시작하고 실행할 수 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub은 사용자 경험을 향상시킬 수 있는 사용자 친화적인 플랫폼을 제공합니다. 저희 서비스는 원활한 통합 프로세스를 위해 개발자를 염두에 두고 설계되었습니다.&lt;/p&gt;

&lt;p&gt;여러분의 실시간 개발 여정을 더욱 원활하고 효율적으로 만들어드리겠습니다. 페이로드 URL을 설정하고 시작하세요!&lt;/p&gt;

&lt;p&gt;블로그 게시물 전체에서 공식 문서와 공신력 있는 출처를 참조하여 정보의 유효성을 확인할 수 있습니다.&lt;/p&gt;

&lt;h1&gt;
  
  
  펍넙이 어떤 도움을 줄 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/blog/tracking-realtime-github-dashboard-commits/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>BizOps 워크스페이스로 채팅 및 사용자를 안전하게 조정하는 방법</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 23 May 2024 10:05:11 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/bizops-weokeuseupeiseuro-caeting-mic-sayongjareul-anjeonhage-jojeonghaneun-bangbeob-3o1e</link>
      <guid>https://forem.com/pubnub-ko/bizops-weokeuseupeiseuro-caeting-mic-sayongjareul-anjeonhage-jojeonghaneun-bangbeob-3o1e</guid>
      <description>&lt;p&gt;이 사용법 문서는 &lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로&lt;/a&gt; 통칭되는 PubNub의 데이터 관리 기능에 대해 설명하는 일련의 문서 중 일부입니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 사용자 및 채널을 관리하는 방법&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 대화를 모니터링하고 조정하는 방법&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  BizOps Workspace로 대화 및 사용자를 안전하게 조정하는 방법&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BizOps Workspace는 애플리케이션을 관리하는 데 도움이 되는 일련의 도구입니다. 이 문서에서는 이전의 "&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 대화를 모니터링하고 중재하는 방법&lt;/a&gt;" 문서를 확장하여 수동 중재 기능, 즉 대화를 실시간으로 모니터링하고 사용자를 음소거하거나 금지하는 기능을 갖춘 엔드투엔드 보안 채팅 애플리케이션을 보여 줍니다.&lt;/p&gt;

&lt;p&gt;이 문서는 단독으로 읽을 수도 있지만, 여기서 설명하는 개념의 배경을 더 잘 이해하려면 이전의 "&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace로 대화를 모니터링하고 중재하는 방법&lt;/a&gt;" 문서를 읽어보시는 것이 좋습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  채널 모니터란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;채널 모니터를 통해 채팅 중재자는 여러 채널에서 실시간으로 진행되는 대화의 실시간 미리보기를 볼 수 있습니다. 운영자는 잘못된 행동을 하는 사용자나 불쾌한 메시지 등 불쾌한 내용을 발견하면 즉시 조치를 취하여 문제를 완화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;운영자는 취할 수 있는 조치에 대해 많은 유연성을 가지고 있습니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  액세스 권한을 제한하지 않고 사용자를 관찰하기&lt;/li&gt;
&lt;li&gt;  불쾌감을 주는 메시지 수정 또는 삭제&lt;/li&gt;
&lt;li&gt;  사용자의 메시지 게시 기능 제한&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#mute?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;(뮤&lt;/a&gt;트)&lt;/li&gt;
&lt;li&gt;  사용자의 메시지 읽기 또는 게시 기능 제한&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#ban?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;(금지&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;'모니터링' 기능의 모든 기능은 수동으로 할 수 있습니다. 메시지를 수동으로 검토하고, 사용자를 수동으로 뮤트하는 등의 기능을 수동으로 할 수 있습니다. 이 도움말에서는 자동 모더레이션에 대해서는 설명하지 않습니다.&lt;/p&gt;

&lt;p&gt;채널 모니터를 사용하려면 최소한 &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;앱 컨텍스트와&lt;/a&gt; &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;메시지 지속성&lt;/a&gt; 등 몇 가지 기능이 PubNub 키세트에서 활성화되어 있어야 합니다. 자세한 내용은 &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이전 글의&lt;/a&gt;'채널 모니터를 위한 키설정 요구 사항' 섹션을 참조하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 액세스 관리자란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;개발자는 사용자가 모더레이션 시스템을 우회하려는 시도를 방지해야&lt;/strong&gt; 하며, 이를 위해 PubNub 액세스 관리자를 사용해야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;액세스 관리&lt;/a&gt; 자를 사용하면 지정된 사용자(또는 사용자)의 권한과 지정된 리소스에 대해 수행할 수 있는 작업을 설명하는 일련의 규칙을 정의할 수 있습니다. 예를 들어&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ID가 &lt;code&gt;123인&lt;/code&gt; 사용자에게는 채널 &lt;code&gt;456에&lt;/code&gt; 대한 읽기 및 쓰기 권한이 있습니다.&lt;/li&gt;
&lt;li&gt;  ID가 정규식 &lt;code&gt;user-*역주&lt;/code&gt;: ID가 &lt;code&gt;글로벌-*역주&lt;/code&gt;: 정규식과 일치하는 모든 채널에서 읽을 수 있음-와 일치하는 모든 사용자에게 읽기 권한이 있습니다.&lt;/li&gt;
&lt;li&gt;  ID가 &lt;code&gt;123인&lt;/code&gt; 사용자는 채널 메타데이터(즉, 앱 컨텍스트)를 업데이트할 수 있는 권한이 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;전체 권한 목록은 &lt;a href="https://www.pubnub.com/docs/general/security/access-control#permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/general/security/access-control#permissions&lt;/a&gt; 에서 설명서를 참조하세요.&lt;/p&gt;

&lt;p&gt;PubNub 액세스 관리자는 토큰 기반이며, 이를 설명하는 가장 쉬운 방법은 &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;문서에&lt;/a&gt; 표시된 대로 권한 부여 흐름을 살펴보고 해당 흐름이 모더레이션과 어떻게 관련되는지에 대한 몇 가지 추가 컨텍스트를 제공하는 것입니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" title="How-to - BizOps Workspace Secure Chat - Image 01" alt="Access Manager workflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;로그인 시도&lt;/strong&gt;. 클라이언트는 사용자를 애플리케이션에 로그인하기 위해 서버를 인증합니다. 이 단계가 끝나면 서버는 등록된 앱 사용자와 대화하고 있으며 해당 사용자가 누구인지 확신하게 됩니다. 클라이언트는 초기화의 일부로 PubNub 액세스 관리자 인증 토큰을 요청합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;권한 부여 요청&lt;/strong&gt;. 서버는 SDK '&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#grant-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;grantToken()&lt;/a&gt;' API를 호출하여 클라이언트의 토큰 요청을 처리합니다. 이 API에 대해 몇 가지 주의할 점이 있습니다: PubNub &lt;strong&gt;비밀 키로만&lt;/strong&gt; 호출할 수 있으므로 서버에서만 호출할 수 있고, 모든 서버 측 SDK에서 사용할 수 있으며, 이 API는 사용자 액세스를 정의하는 리소스 및 권한을 정의하기 위해 JSON 객체를 허용합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;토큰 반환&lt;/strong&gt;. PubNub는 요청된 사용자에게 요청된 권한을 부여하고 서버에 인증 토큰을 반환합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;토큰이 전달&lt;/strong&gt;되었습니다. 그러면 서버가 원래 호출한 클라이언트에 인증 토큰을 반환합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;토큰 세트&lt;/strong&gt;. 클라이언트는 초기화 중 또는 애플리케이션의 수명 주기 중 언제든지 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#set-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setToken()&lt;/a&gt; 메서드를 통해 이 인증 토큰을 지정할 수 있습니다. 토큰은 만료되므로 언제든지 토큰을 업데이트할 수 있어야 하지만, 채널 모니터가 권한을 업데이트하는 경우(예: 뮤트되거나 금지된 경우) 클라이언트는 새 토큰을 요청해야 합니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;승인된 API 요청&lt;/strong&gt;. 이제 PubNub에 대한 모든 후속 호출은 승인된 것으로 간주됩니다. PubNub은 2단계에서 부여된 권한과 클라이언트의 토큰 유효성에 따라 모든 API 요청을 허용하거나 거부합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  보안 모더레이션 솔루션은 어떤 모습인가요?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이전 글의&lt;/a&gt; 마지막 부분에서 클라이언트 측에서 뮤트하거나 금지하는 것이 어떻게 보이는지 데모를 보여드렸습니다. Chat SDK에는 뮤트 또는 차단 여부를 클라이언트에게 알려주는 &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;중재 이벤트가&lt;/a&gt; 포함되어 있지만, UI를 업데이트하는 것 외에는 &lt;strong&gt;뮤트/차단된 후에도 클라이언트가 메시지를 계속 보내는 것을 막지는&lt;/strong&gt; 못합니다. 클라이언트를 안전하게 뮤트하거나 차단하려면 기존 액세스 관리자 권한을 해지하고 새로운 뮤트 또는 차단 상태를 반영하도록 새 권한을 부여해야 합니다.&lt;/p&gt;

&lt;p&gt;사용자가 '뮤지컬' 채널에서 뮤트된 다음 시나리오를 예로 들어 보겠습니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" title="How-to - BizOps Workspace Secure Chat - Image 02" alt="Secure chat sequence diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 사용자가 '영화'와 '뮤지컬' 두 개의 채널에 액세스할 수 있지만 관리자가 '뮤지컬' 채널에서만 해당 사용자를 뮤트하려고 합니다.&lt;/li&gt;
&lt;li&gt; 관리자는 채널 모니터를 사용하여 해당 사용자를 뮤트합니다. 내부적으로 이것은 '&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#method-signature-1?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;setRestrictions()&lt;/a&gt;' API를 호출하는 것입니다.&lt;/li&gt;
&lt;li&gt; 서버 애플리케이션은 &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;모더레이션 이벤트를&lt;/a&gt; 통해 '뮤트' 알림을 수신하고 사용자의 기존 액세스 토큰을 &lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#revoke-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;취소합니다&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; 클라이언트 애플리케이션은 &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;검토 이벤트를&lt;/a&gt; 통해 '뮤지컬' 채널과 관련된 '뮤트' 알림을 수신합니다.&lt;/li&gt;
&lt;li&gt; 애플리케이션은 더 이상의 메시지 전송을 방지하기 위해 UI를 업데이트합니다. 사용자는 페이지의 JavaScript를 수정하여 이 UI 변경을 해결할 수 있지만 인증 토큰이 해지되었으므로 메시지를 보내려는 시도는 실패합니다.&lt;/li&gt;
&lt;li&gt; 애플리케이션은 위의 액세스 관리자 섹션에 설명된 대로 서버에 새 인증 토큰을 요청합니다. 새로 부여된 토큰에는 '뮤지컬' 채널에 대한 '읽기' 액세스 권한만 있는 등 사용자의 새로운 권한이 반영됩니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이전 글에서&lt;/a&gt; '모더레이션 솔루션의 구성 요소'에 대해 설명하고 아래 그래픽을 사용하여 클라이언트와 서버 모두에서 사용할 수 있는 API를 나열했습니다. 위 단계에서 설명한 API도 이 그래픽에 나와 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" title="How-to - BizOps Workspace Channel Monitor - Image 09" alt="Table showing components of a chat moderation solution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chat SDK 샘플 앱
&lt;/h2&gt;

&lt;p&gt;채널 모니터와 Chat SDK 개발을 담당하는 바쁜 엔지니어링 팀이 Chat SDK를 사용하는 React Native로 작성된 샘플 애플리케이션도 만들었습니다.&lt;/p&gt;

&lt;p&gt;이 샘플은 PubNub을 사용하여 사실적이고 모든 기능을 갖춘 채팅 앱을 개발하기 위한 SDK의 기능과 모범 사례를 보여줍니다. 이 샘플은 오픈 소스이며 &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;/샘플/react-native-group-chat에&lt;/a&gt; 있는 Chat SDK와 동일한 GitHub 리포지토리의 일부입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" title="How-to - BizOps Workspace Channel Monitor - Image 02" alt="Sample app running on iOS and Android"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 애플리케이션은 최근 Access Manager 서버에서 토큰을 요청하고 사용자의 권한이 변경될 때, 즉 채널에서 금지되거나 뮤트되는 경우 새 토큰을 요청하도록 업데이트되었습니다. 이 개선 사항은 &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;이전 문서가&lt;/a&gt; 작성된 이후에 이루어진 것이므로 &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;GitHub에서&lt;/a&gt; 최신 소스를 받아보세요. 이 글을 작성하는 시점에 가장 최근의 git 커밋 ID는 &lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0입니다&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  안전하게 사용자 뮤트 및 금지하기: 샘플 애플리케이션을 사용한 데모
&lt;/h2&gt;

&lt;p&gt;이 섹션에서는 클라이언트 및 서버 관점에서 안전한 모더레이션을 보여주는 엔드투엔드 데모를 시작하고 실행하는 방법에 대해 설명합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub 키세트 만들기
&lt;/h3&gt;

&lt;p&gt;이 데모를 실행하려면 다음과 같이 새 PubNub 키셋을 만드는 것이 좋습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;관리자 포털에&lt;/a&gt; 로그인하여 새 애플리케이션을 만들거나 기존 애플리케이션 내에서 새 키 집합을 만듭니다. 필요한 경우 &lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;관리자 포털 키를 만드는 방법에서&lt;/a&gt; 단계별 지침을 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt; 키설정 페이지에서 다음 구성 옵션을 사용 설정합니다. 별도로 지정하지 않는 한 기본값을 그대로 사용할 수 있습니다:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;앱 컨텍스트&lt;/a&gt;. 여기에는 채널과 사용자에 대한 메타데이터가 저장되며 이전 글&lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;'사용자 및 채널 관리'&lt;/a&gt;에 자세히 설명되어 있습니다. 또한 &lt;code&gt;사용자 메타데이터 이벤트&lt;/code&gt;, &lt;code&gt;채널 메타데이터 이벤트&lt;/code&gt; 및 &lt;code&gt;멤버십 이벤트도&lt;/code&gt; 활성화합니다.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;메시지 지속성&lt;/a&gt;. 이렇게 하면 관리자가 대화를 검토하고 편집할 수 있도록 메시지 기록을 PubNub에 저장합니다.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;액세스 관리자&lt;/a&gt;. 데이터에 대한 무단 액세스를 방지하고 안전한 모더레이션 솔루션을 만드는 데 필요합니다.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/presence/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;현재&lt;/a&gt; 상태. 사용자가 온라인 상태인지 오프라인 상태인지 추적하는 데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;변경 사항을 저장합니다.&lt;/p&gt;

&lt;p&gt;다음 단계에서는 &lt;code&gt;게시 키&lt;/code&gt;, &lt;code&gt;구독 키&lt;/code&gt; 및 &lt;code&gt;비밀 키가&lt;/code&gt; 필요합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  샘플 애플리케이션 빌드하기
&lt;/h3&gt;

&lt;p&gt;앞서 설명한 것처럼 Chat SDK 샘플 앱은 Expo 프레임워크를 사용하여 React Native로 작성된 크로스 플랫폼 클라이언트 앱입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat#readme" rel="noopener noreferrer"&gt;애플리케이션의&lt;/a&gt; 사용 설명서에 제공된 지침에 따라 샘플 애플리케이션을 복제하고 빌드하세요. 특히, yarn 및 Node.js를 포함한 필수 구성 요소가 설치되어 있는지 확인하세요. 리드미에서는 XCode와 iOS 사용에 대해 설명하지만, Android 에뮬레이터에서도 앱을 실행할 수 있습니다. 이 글을 쓰는 시점에 가장 최근의 git 커밋 ID는 &lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0입니다&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;게시/서브 키를 제공할 때는 이전 단계에서 생성한 키를 사용하세요. &lt;code&gt;.env&lt;/code&gt; 파일에 키를 포함하지 않으면 애플리케이션이 기본적으로 일부 &lt;code&gt;데모&lt;/code&gt; 키를 사용하므로 혼동을 피하기 위해 &lt;a href="https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60&lt;/a&gt; 에서 이 로직을 비활성화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;애플리케이션을 실행합니다. ReadMe에서 &lt;code&gt;yarn ios를&lt;/code&gt; 실행하라고 안내하지만, &lt;code&gt;yarn android&lt;/code&gt; 또는 &lt;code&gt;yarn 실행 시작을&lt;/code&gt; 실행할 수도 있으며, 후자는 대화형 메뉴를 제공합니다.&lt;/p&gt;

&lt;p&gt;로그인하면 콘솔에 다음과 같은 경고가 표시됩니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" title="How-to - BizOps Workspace Secure Chat - Image " alt="Failed log message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이는 클라이언트가 Access Manager 서버에 연결하지 못했기 때문이므로 서버를 빌드해 보겠습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  샘플 Access Manager 서버 빌드하기
&lt;/h3&gt;

&lt;p&gt;샘플 Access Manager 서버는 &lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api&lt;/a&gt; 에서 찾을 수 있으며, 앞서 설명한 클라이언트 애플리케이션과 동일한 모노레포입니다.&lt;/p&gt;

&lt;p&gt;원하는 편집기에서 &lt;code&gt;src/chatsdk.service.ts&lt;/code&gt; 파일을 열고 &lt;code&gt;게시키&lt;/code&gt;, &lt;code&gt;구독키&lt;/code&gt; 및 &lt;code&gt;비밀키를&lt;/code&gt; 입력합니다. 게시 키와 구독 키는 클라이언트 앱을 만들 때 사용한 것과 일치해야 하며, 비밀 키는 &lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;관리자 포털의&lt;/a&gt; 앱에 대한 키 설정 페이지에서 사용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;REPO/samples/access-manager-api&lt;/code&gt; 디렉터리에서 &lt;code&gt;yarn 실행 시작을&lt;/code&gt; 실행하여 Access Manager 서버를 시작하면 아래와 같은 화면이 표시됩니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" title="How-to - BizOps Workspace Secure Chat - Image 04" alt="Sample Access Manager Server output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access Manager 서버가 무엇을 하고 있는지 확인하려면 &lt;code&gt;app.service.ts를&lt;/code&gt; 보세요. 요청하는 사용자에 대해 생성된 권한 구조와 이러한 권한을 적용하기 위해 &lt;code&gt;chat.sdk.grantToken(&lt;/code&gt; )을 호출하여 생성된 authKey를 호출하는 클라이언트에 반환하는 것을 볼 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 권한은 데모 애플리케이션에 필요한 권한이지만 애플리케이션에는 다른 권한이 필요할 수 있습니다. 제공된 규칙 집합을 시작 템플릿으로 사용할 수 있지만 앱용 액세스 관리자 서버를 만들 때는 &lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions&lt;/a&gt; 을 참조하여 어떤 Chat SDK 기능에 어떤 권한이 필요한지 정확히 파악하세요.&lt;/p&gt;

&lt;p&gt;클라이언트 데모 앱 애플리케이션을 다시 실행하면 이제 오류 없이 로그인할 수 있을 것입니다. '인증 키 새로 고침' 건배 메시지가 표시되면 모든 것이 성공했음을 알 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" title="How-to - BizOps Workspace Secure Chat - Image 05" alt="AuthKey refreshed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;두 클라이언트 간의 대화를 시작합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" title="How-to - BizOps Workspace Secure Chat - Image 06" alt="Initiate a conversation between two clients"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  채널 모니터를 사용하여 사용자 음소거 및 차단하기
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;중요:&lt;/strong&gt; 이전에 두 클라이언트 간의 대화를 시작하지 않았다면 지금 바로 시작하세요. 채널은 데모 앱에서 동적으로 생성되므로 채팅이 시작된 후에만 채널 모니터에 표시됩니다.&lt;/p&gt;

&lt;p&gt;'인증 키 새로 고침' 배너 또는 '차단된 사용자' 모달과 같이 아래에 표시된 사용자 인터페이스 업데이트는 데모 애플리케이션의 일부이며, 애플리케이션은 자체 UI를 통해 이 정보를 사용자에게 표시합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;관리자 포털에&lt;/a&gt; 로그인하고 Access Manager 샘플 및 클라이언트 애플리케이션에 사용한 키 집합을 선택하여 채널 모니터를 시작합니다.&lt;/li&gt;
&lt;li&gt;  왼쪽 탐색 패널의 &lt;strong&gt;BizOps 작업 공간&lt;/strong&gt; 섹션으로 이동하여 &lt;strong&gt;채널 모니터를&lt;/strong&gt; 선택합니다. &lt;strong&gt;BizOps 워크스페이스&lt;/strong&gt; 섹션이 표시되지 않으면 &lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 요금제를&lt;/a&gt; 업그레이드해야 하는 경우가 대부분이지만 문제가 있는 경우 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;지원팀에 문의&lt;/a&gt; 하세요.&lt;/li&gt;
&lt;li&gt;  모더레이션을 시작할 채널을 선택하라는 메시지가 표시됩니다. 채널 이름은 &lt;code&gt;USER_ID를 가진 1:1 사용자로&lt;/code&gt; 표시되며, 여기서 USER_ID는 대화를 시작한 사람의 사용자 아이디입니다.&lt;/li&gt;
&lt;li&gt;  키 설정에서 지속성을 사용 설정한 경우 이전 메시지를 포함하여 채널 메시지가 실시간으로 표시됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" title="How-to - BizOps Workspace Secure Chat - Image 07" alt="Initial conversation with channel monitor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  해당 사용자가 보낸 메시지 옆의 마이크 버튼을 눌러 해당 사용자를 뮤트할 수 있습니다. 음소거된 사용자의 디바이스에 인증 키가 새로 고침되었음을 알리는 메시지가 표시됩니다. 뮤트한 사용자로 메시지를 보내려고 하면 금지됨을 알리는 메시지 대화 상자가 표시되지만, 뮤트하지 않은 사용자는 영향을 받지 않습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 08" alt="Muted user"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  마이크 버튼을 다시 눌러 사용자의 음소거를 해제합니다. 음소거 해제된 사용자의 디바이스에 인증 키가 새로 고쳐졌으며 이제 메시지 전송에 성공했음을 알리는 메시지가 표시됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 09" alt="User unmuted"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  해당 사용자가 보낸 쪽지 옆에 있는 차단 버튼을 눌러 해당 사용자를 차단하고 차단 사유를 입력합니다. 사유는 자유 형식의 텍스트로 제공되므로 관련 정보를 입력할 수 있습니다. 인증 키가 새로고침되고 해당 사용자는 앱의 채팅 선택 화면으로 돌아갑니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" title="How-to - BizOps Workspace Secure Chat - Image 10" alt="User is banned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;차단된 채널에 접근을 시도하면 사용자에게 오류가 표시됩니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" title="How-to - BizOps Workspace Secure Chat - Image 11" alt="Banned user error message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  채널 모니터에서 '차단 해제'를 선택하여 해당 사용자를 차단 해제합니다. 인증 키가 새로 고쳐집니다. 해당 사용자는 차단이 해제되어 다시 채팅에 참여할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" title="How-to - BizOps Workspace Secure Chat - Image 12" alt="User is unbanned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  요약
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;채팅 애플리케이션&lt;/a&gt; 개발은 첫 단계에 불과합니다. 가장 어려운 과제는 증가하는 사용자 기반을 지원하기 위해 앱을 배포한 후에 발생합니다. 비즈옵스 워크스페이스는 채팅 애플리케이션의 모든 측면을 관리하도록 설계된 일련의 도구로, 출시 후의 어려움을 간소화해 줍니다.&lt;/p&gt;

&lt;p&gt;이 문서에서는 사용자를 안전하게 음소거하고 금지하는 데 중점을 두었지만, &lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;BizOps Workspace의&lt;/a&gt; 기능은 계속 확장되고 있습니다. 또한 이 문서에서는 Chat SDK에만 초점을 맞추었지만 채널 모니터는 모든 SDK와 함께 작동하도록 &lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics#configuration?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;구성할&lt;/a&gt; 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" title="How-to - BizOps Workspace Channel Monitor - Image 00" alt="Channel monitor configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;도움이나 지원이 필요하면 언제든지 &lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;전담 지원팀에&lt;/a&gt; 문의하거나 개발자 지원팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;)으로 이메일을 보내주세요.&lt;/p&gt;

&lt;h1&gt;
  
  
  펍넙이 어떤 도움을 드릴 수 있나요?
&lt;/h1&gt;

&lt;p&gt;이 문서는 원래 &lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub.com에&lt;/a&gt; 게시되었습니다.&lt;/p&gt;

&lt;p&gt;저희 플랫폼은 개발자가 웹 앱, 모바일 앱, IoT 디바이스를 위한 실시간 상호작용을 구축, 제공, 관리할 수 있도록 지원합니다.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  PubNub 체험하기
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;라이브 투어를&lt;/a&gt; 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  설정하기
&lt;/h2&gt;

&lt;p&gt;PubNub &lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;계정에&lt;/a&gt; 가입하여 PubNub 키에 무료로 즉시 액세스하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  시작하기
&lt;/h2&gt;

&lt;p&gt;사용 사례나 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;SDK에&lt;/a&gt; 관계없이 &lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko" rel="noopener noreferrer"&gt;PubNub 문서를&lt;/a&gt; 통해 바로 시작하고 실행할 수 있습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unity 게임에 실시간 채팅을 추가하는 방법</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 16 May 2024 21:19:50 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/unity-geime-silsigan-caetingeul-cugahaneun-bangbeob-5c1j</link>
      <guid>https://forem.com/pubnub-ko/unity-geime-silsigan-caetingeul-cugahaneun-bangbeob-5c1j</guid>
      <description>&lt;p&gt;실시간 채팅 또는 게임 내 채팅은 플레이어의 참여도를 높이고 사용자 리텐션에 도움이 됩니다. 실시간 채팅은 플레이어가 서로 소통할 수 있도록 하여 공동체 의식을 고취하고 소셜 상호 작용을 위한 플랫폼을 제공하여 더욱 즐거운 게임 경험을 선사합니다.&lt;/p&gt;

&lt;p&gt;실시간 채팅을 통합하는 것은 말처럼 쉬운 일은 아닙니다. 처음부터 시작하려면 플레이어 수가 늘어날 때 이를 구축, 유지, 확장하는 데 많은 리소스가 필요합니다. 다행히도 PubNub은 지연 시간이 짧은 실시간 API 플랫폼을 통해 그 어느 때보다 쉽게 Unity 게임에 실시간 기능을 도입할 수 있도록 지원합니다. 윈도우, 맥, iOS, 안드로이드, 오큘러스, 메타 퀘스트와 같은 가상 현실 시스템을 개발하거나 크로스 플랫폼으로 개발하는 경우 &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Unity SDK를&lt;/a&gt; 사용하면 됩니다.&lt;/p&gt;

&lt;p&gt;다양한 채널 패턴을 설정하는 방법부터 메시지를 주고받는 방법, 모더레이션, 이모티콘, 리액션, GIF와 같은 다른 기능으로 게임 내 채팅을 강화/보안하는 방법까지 PubNub를 사용하여 Unity 비디오 게임에 실시간 채팅을 추가하는 방법에 대해 알아보세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub 시작하기
&lt;/h2&gt;

&lt;p&gt;게임 내 채팅을 설정하는 방법을 이해하려면 먼저 PubNub 플랫폼과 플랫폼의 기능을 활용하도록 애플리케이션을 구성하는 방법을 이해해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  개요
&lt;/h3&gt;

&lt;p&gt;PubNub는 Pub/Sub(게시/구독) 모델을 기반으로 합니다. 사용자는 기본적으로 모든 관련 정보가 포함된 페이로드인 메시지를 PubNub 네트워크에 &lt;a href="https://www.pubnub.com/docs/general/messages/publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;게시합니다&lt;/a&gt;. 메시지를 받거나 듣기를 원하는 사용자는 PubNub 네트워크에 &lt;a href="https://www.pubnub.com/docs/general/messages/receive?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;가입하고&lt;/a&gt; 메시지를 파싱합니다. 메시지에는 32KB 미만(가급적 JSON 형식)인 경우 원하는 모든 내용을 포함할 수 있습니다.&lt;/p&gt;

&lt;p&gt;메시지가 올바른 수신자에게 전달되도록 하기 위해 &lt;a href="https://www.pubnub.com/docs/general/channels/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;채널은&lt;/a&gt; 데이터가 한 디바이스에서 다른 디바이스로 전송되는 메커니즘으로 사용됩니다. 채널은 디바이스가 PubNub 네트워크에 메시지를 게시하고 구독하고자 할 때마다 필요합니다. 사용자는 한 번에 하나의 메시지만 게시할 수 있지만, 한 번에 여러 개의 채널을 구독하여 다양한 메시지를 수신할 수 있습니다.&lt;/p&gt;

&lt;p&gt;메시지를 게시할 때 정확한 채널 이름을 지정해야 하지만, 채널 이름을 문자열 배열로 제공하여 하나 이상의 채널을 구독하는 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-multiplexing?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;멀티플렉싱을&lt;/a&gt; 통해 한 번에 여러 채널을 구독할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 정보가 필요한 이유는 무엇인가요? 전체 게임 내 메시징 시스템은 채널이라는 개념을 기반으로 하며, &lt;em&gt;채널 패턴 이름을 어떻게 형식화하고 보호하는지에 따라 원하는 채팅 유형이 결정됩니다&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Unity SDK 설치 및 구성하기
&lt;/h3&gt;

&lt;p&gt;시작하려면 애플리케이션을 PubNub 네트워크에 연결하기 위해 PubNub Unity SDK를 구성해야 합니다. 자세한 내용은 &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Unity SDK 설명서를&lt;/a&gt; 참조하시기 바라며, 개요적으로 다음과 같이 해야 합니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://www.pubnub.com/docs/sdks/unity#install-via-package-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;패키지 관리자를&lt;/a&gt; 통해 Unity 패키지를 추가합니다.&lt;/li&gt;
&lt;li&gt; &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;무료 PubNub 계정을&lt;/a&gt; 생성하고 PubNub 키를 받습니다. 애플리케이션에 필요한 기능을 키 세트에서 활성화하는 것이 중요합니다. 필수 Pub/Sub 기능의 경우 스트림 컨트롤러를 활성화하기만 하면 됩니다. 고급 기능을 위해 구성해야 할 다른 설정에 대해서는 나중에 설명해 드리겠습니다.&lt;/li&gt;
&lt;li&gt; 이전 단계에서 얻은 퍼블리시 및 구독 키를 Unity에 제공하여 PubNub 게임 오브젝트를 &lt;a href="https://www.pubnub.com/docs/sdks/unity#configure-pubnub?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;구성합니다&lt;/a&gt;. 또한 모든 PubNub 오브젝트는 PubNub에 대한 연결을 설정하기 위해 고유 식별자가 필요하므로 UserId를 제공해야 합니다. 설정이 완료되면 PubNub 오브젝트를 초기화합니다:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Unity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="nx"&gt;PubNub&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Pubnub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pnConfiguration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; 게임이 이벤트와 메시지에 반응할 수 있도록 &lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;이벤트 리스너를&lt;/a&gt; 추가합니다. 각 유형의 메시지나 이벤트에 응답하는 사용자 지정 로직을 구현할 수 있는 다양한 이벤트 리스너가 있지만 채팅 메시지를 주고받는 핵심 기능에는 메시지 이벤트 리스너만 있으면 됩니다(이 가이드의 뒷부분에서 실시간 채팅에 추가 기능을 추가하여 더욱 매력적인 채팅을 만드는 방법에 대해 알아보겠습니다):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SubscribeCallbackListener&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessage&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message received: {result.Message}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;다른 디바이스로 메시지를 보내기 위해 퍼블리싱을 시작하고 퍼블리셔로부터 메시지를 받기 위해 가입하려면 먼저 채널 이름을 정의해야 합니다. 채널 패턴의 형식에 따라 구현하려는 채팅 유형이 결정된다는 점을 기억하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  다양한 채팅 패턴 정의하기
&lt;/h2&gt;

&lt;p&gt;게임에 어떤 유형의 채팅을 구현할지 고려해야 합니다. 이 섹션에서는 게임이나 사용자로부터 필요한 정보를 얻기 위한 전체 설정이 아니라 채널이 따라야 하는 패턴에 대해 설명합니다. PubNub를 사용하는 Unity 프로젝트의 다양한 채팅 패턴을 확인하려면 &lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;Unity 쇼케이스 게임을&lt;/a&gt; 확인하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  전체/글로벌 채팅
&lt;/h3&gt;

&lt;p&gt;전체 또는 글로벌 채팅을 사용하면 게임 내 모든 플레이어 간의 커뮤니케이션이 가능합니다. 모든 플레이어가 구독하는 공통 채널로 메시지를 게시하고 구독하여 일반 채팅을 설정할 수 있습니다. 글로벌 플레이어를 위한 채널 구조를 설정할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;allChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;그러면 각 클라이언트가 채널을 구독하고 모든 사람이 실시간으로 동일한 메시지를 수신하여 모두가 참여할 수 있는 공유 채팅 환경을 만들 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  비공개/귓속말 채팅
&lt;/h3&gt;

&lt;p&gt;비공개 또는 귓속말 대화에서는 플레이어가 일대일 대화를 할 수 있으며, 관련된 두 명의 플레이어만 서로 대화할 수 있고 다른 사람은 대화할 수 없습니다. 비공개 또는 귓속말 대화 채널 패턴에서는 각 사용자가 비공개 대화를 위한 채널 구조에 가입하게 됩니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatBase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;여기에는 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#wildcard-subscribe?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;와일드카드 구독이라는&lt;/a&gt; 개념이 사용됩니다. 이 기능은 하나의 이름 선언으로 많은 채널을 구독할 수 있는 계층적 채널 목록을 구독하는 데 사용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;예를 들어, 사용자가 다른 사용자에게 비공개로 메시지를 보내려고 할 때 PubNub 네트워크에서 사용자를 식별하는 고유 식별자를 나타내는 현재 PubNub 사용자 ID(또는 UUID/uuid)와 메시지를 받을 수신자의 사용자 ID를 연결할 수 있습니다. 현재 사용자의 사용자 아이디는 언제든지 pubnub.GetCurrentUserId()를 통해 얻을 수 있지만, 의도한 수신자의 사용자 아이디를 얻어야 합니다. 수신자의 User ID가 있으면 다음과 같이 채널을 연결할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;chat.private.*와 같은 와일드카드 채널 패턴을 지정하면 앱에서 해당 패턴과 일치하는 모든 채널 이름을 구독하게 됩니다. 이렇게 하면 런타임에 항상 채널 이름을 알 필요가 없습니다. 마지막으로 사용자 ID를 사용하면 채널 이름이 고유하고 두 사용자 간에 대화가 유지되도록 할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  친구/버디 채팅
&lt;/h3&gt;

&lt;p&gt;친구 또는 버디 채팅을 생성하면 새로 만난 플레이어든 게임 외부의 친구든 친밀한 관계를 형성하고자 하는 특정 플레이어와 비공개로 대화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;친구/친구 채팅 패턴에서는 사용자 ID를 추가하여 비공개 채팅 채널 패턴을 구성하는 방법과 유사하게 각 기기 또는 플레이어에 고유한 채널 패턴을 만들어야 합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chat.friends.” + pubnub.GetCurrentUserId();”
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;그런 다음 친구가 되고자 하는 모든 사용자에 대해 이 과정을 반복하여 chanFriendChat 문자열의 사용자 ID를 pubnub.GetCurrentUserId()의 사용자 ID로 대체합니다. 이제 채널 패턴이 마련되었지만 채팅.friends.*와 같은 와일드카드 패턴을 사용하여 단순히 구독할 수는 없으며, 대신 어떤 플레이어가 친구인지 확인할 수 있는 메커니즘이 필요합니다.&lt;/p&gt;

&lt;p&gt;이 문제에 대한 해결책으로 많은 수의 채널을 한 번에 관리할 수 있는 PubNub의 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;채널 그룹이&lt;/a&gt; 있습니다. 채널 그룹은 기본적으로 채널 목록에 대한 포인터이며, 이 경우 채널 그룹은 플레이어에게 고유하며 플레이어의 모든 친구에 대한 참조를 포함합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanGroupFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chanGroupFriendChat_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetCurrentUserId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;참고: 채널 그룹 이름은 채널 이름과 동일한 규칙을 따르지만 이름에 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;마침표를 포함할 수 없으므로&lt;/a&gt; 패턴 구조에 차이가 있습니다.&lt;/p&gt;

&lt;p&gt;pubnub 객체를 사용하여 채널을 구독하는 방법(다음 섹션에서 설명)과 유사하게 채널 그룹도 동시에 구독할 수 있습니다. 즉, 플레이어가 친구 채널 그룹에 가입되어 있으므로 새 친구가 추가될 때마다 해당 친구의 chanFriendChat이 플레이어의 친구 채널 그룹에 추가되고 해당 채널이 메시지를 게시할 때마다 메시지 이벤트 리스너에서 메시지를 수신하게 됩니다. 채널 그룹에 게시할 수는 없지만 채널 그룹 내의 제휴 채널에 메시지를 게시하면 모든 구독자(친구)가 해당 메시지를 받을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub Unity SDK용 채널 그룹 API를&lt;/a&gt; 사용하면 권한이 있는 채널 그룹에서 친구/채널을 추가, 나열 및 제거할 수 있습니다. 채널 그룹 기능은 친구의 온라인/오프라인 상태(프레즌스)를 결정하는 데도 사용됩니다. 이에 대해서는 &lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Unity에서 친구 목록을 추가하는 방법 가이드에서&lt;/a&gt; 자세히 설명합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  길드/동맹/클랜 채팅
&lt;/h3&gt;

&lt;p&gt;길드, 동맹 또는 클랜이 등장하는 게임에서 전용 채팅 환경은 팀 협력과 동료애에 큰 도움이 될 수 있습니다. 이러한 스타일의 그룹 채팅은 여러 사용자 간의 커뮤니케이션을 가능하게 하여 친구뿐만 아니라 더 많은 수의 플레이어 간의 협업과 팀워크를 촉진합니다. 길드/동맹/클랜 채팅을 통해 같은 그룹의 구성원들은 전략을 계획하고, 업적을 공유하거나, 게임 내에서 보다 개인적인 커뮤니티를 형성하기 위해 유대감을 형성할 수 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub에서 이를 설정하는 것은 친구/버디 채팅을 구현하는 것과 같은 개념입니다. 각 유형별로 채널 그룹을 구성하고, 이러한 채널 그룹에 가입하고, 승인되면 이러한 채널 그룹에 친구를 추가하면 됩니다. 이러한 채널 그룹과 연결된 채널에 게시된 모든 메시지는 이벤트 수신자를 트리거하고 채팅을 적절하게 표시할 수 있습니다.&lt;/p&gt;

&lt;p&gt;각 플레이어의 채널 그룹은 대규모 온라인 게임에서 가장 큰 길드도 충분히 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리할&lt;/a&gt; 수 있는 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;2000개의 채널&lt;/a&gt; (이 경우 플레이어)을 &lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리할&lt;/a&gt; 수 있으므로 채널 그룹은 대규모 그룹을 관리할 수 있는 좋은 방법입니다. 더 좋은 점은 PubNub 네트워크에 연결된 모든 개별 클라이언트가 10개의 채널 그룹을 가질 수 있어, 필요한 경우 20,000개의 채널을 구독할 수 있다는 것입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  파티/로비 채팅
&lt;/h3&gt;

&lt;p&gt;파티 또는 로비 채팅은 특정 게임 세션이나 미션을 위해 구성된 소규모의 임시 그룹을 위한 채팅입니다. 이러한 스타일의 채팅은 서로 다른 목적을 위한 것이지만, 구현 방식은 비공개/귓속말 채팅 채널 패턴을 만드는 패턴과 유사합니다.&lt;/p&gt;

&lt;p&gt;먼저, 각 그룹 채팅 유형에 대한 기본 문자열을 만듭니다. 채널 배열을 구독할 때(다음 단계에서 설명) 와일드카드 구독을 사용하여 구독하여 모든 요청을 수신 대기합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;party&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lobby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;로비 또는 파티가 형성되면, 그룹을 시작한 사람이나 인터넷 연결 및 지역에 따라 결정된 플레이어가 그룹의 리더 또는 소유자로 지정됩니다. 이러한 유형의 플레이어를 파티 리더 또는 호스트라고 합니다. 그런 다음 호스트 플레이어의 사용자 ID를 기본 문자열과 연결하여 고유한 채널 패턴을 만듭니다. 파티나 로비에 초대를 받은 새로운 플레이어는 이 채널에 동적으로 가입하게 되어 사실상 그룹에 가입하게 됩니다. 파티나 로비가 종료되거나 해산되면 채널은 삭제할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  모든 것 정리하기
&lt;/h2&gt;

&lt;p&gt;채널 패턴에 따라 게임에 구현할 채팅 유형을 결정했으면, 이제 이러한 채널을 게시하고 구독하여 실시간으로 메시지를 주고받을 차례입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  메시지 게시
&lt;/h3&gt;

&lt;p&gt;이 과정은 메시지 페이로드를 만드는 것으로 시작됩니다. 이는 Unity 게임의 요구 사항에 따라 간단한 텍스트 채팅일 수도 있고 복잡한 데이터 구조일 수도 있습니다. 페이로드가 준비되면 메시지를 게시할 차례입니다.&lt;/p&gt;

&lt;p&gt;퍼블리시 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;API는&lt;/a&gt; 지정된 채팅 채널의 모든 구독자에게 메시지를 보내는 데 사용됩니다. 한 번에 하나의 채널에만 게시할 수 있지만 게시가 비동기적으로 수행되므로 나머지 코드가 실행되는 것을 차단하지 않습니다(원하는 경우 동기식으로 게시할 수도 있지만).&lt;/p&gt;

&lt;p&gt;예를 들어, 파티에 채팅 메시지를 보내려면 다음과 같이 호출하여 게시할 뿐만 아니라 PubNub 호출이 성공적으로 이루어졌는지 확인하고 호출이 실패하면 처리할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Publish&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Ready&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;go&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub timetoken: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub status code : &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  메시지 구독
&lt;/h3&gt;

&lt;p&gt;메시지가 게시될 때 수신되는 메시지와 이벤트를 수신하려면 적절한 채널을 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#receive-messages?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;구독해야&lt;/a&gt; 합니다. 한 번의 통화로 여러 개의 채팅 채널과 채널 그룹을 구독할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Subscribe&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatAll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;               
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ChannelGroups&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanFriendGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanGuildGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanAllianceGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이제 플레이어가 PubNub 네트워크에 연결되고 &lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;이벤트 리스너는&lt;/a&gt; 이벤트 발생(이 경우 새 메시지 도착)을 기다린 다음 해당 이벤트와 관련된 코드를 실행합니다.&lt;/p&gt;

&lt;p&gt;메시지가 도착하면 리스너는 콜백을 트리거하여 수신 메시지를 처리하기 위해 작성한 코드를 실행합니다. 이는 채팅방에 메시지를 표시하는 것처럼 간단할 수도 있고, 채팅 메시지를 기반으로 게임 내 이벤트를 트리거하는 것처럼 더 복잡한 것일 수도 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  게임 내 채팅을 더욱 매력적으로 만드는 고급 기능
&lt;/h2&gt;

&lt;p&gt;플레이어가 실시간으로 메시지를 주고받을 수 있는 인게임 채팅을 Unity 게임에 성공적으로 구현했습니다! 이미 플레이어가 서로 소통할 수 있는 공간이 만들어졌지만, 구현된 기능은 빙산의 일각에 불과합니다. 플레이어의 게임 내 채팅 참여도를 높이기 위해 구현을 고려해야 할 기능이 많이 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  메시지 기록 로드: 메시지 지속성
&lt;/h3&gt;

&lt;p&gt;게임에서 플레이어는 이전 대화를 다시 확인하거나 놓친 채팅을 따라잡아야 할 수 있습니다. 이때 채팅 메시지 기록을 저장하고 검색할 수 있는 &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메시지 지속&lt;/a&gt; 성이 유용합니다. Unity 게임에서 메시지 지속성 API를 구현하면 채팅 메시지, 메시지 액션, 파일을 저장하고 필요할 때 검색할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFetchHistoryResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fetchHistoryResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FetchHistory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IncludeMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MaximumPerChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;또한 메시지 저장 기간을 유연하게 제어할 수 있어 게임의 특정 요구 사항과 리소스에 따라 스토리지를 관리할 수 있습니다. 메시지 지속성을 사용하려면 &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털에서&lt;/a&gt; 키에 이 기능을 활성화해야 합니다. &lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메시지 지속성 사용 방법 가이드를&lt;/a&gt; 통해 이 기능에 대해 자세히 알아보고 활성화하는 방법을 확인할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  플레이어에게 부재중 메시지 알림 모바일 푸시 알림
&lt;/h3&gt;

&lt;p&gt;모바일 게임의 경우 플레이어가 앱에 들락날락하는 경우가 많아 팀에서 보내는 중요한 메시지나 게임 업데이트를 놓칠 수 있습니다. 이때 &lt;a href="https://www.pubnub.com/docs/general/push/send?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;모바일 푸시 알림이&lt;/a&gt; 유용합니다. 모바일 푸시 알림은 플레이어가 게임에 접속하지 않을 때에도 놓친 채팅 메시지, 게임 업데이트 또는 기타 중요한 알림을 알려줄 수 있는 방법을 제공합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/mobile-push?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;모바일 푸시 알림 API를&lt;/a&gt; 사용하면 iOS와 Android 기기 모두에 푸시 알림을 보낼 수 있는 통합 API를 제공합니다. 따라서 프로세스가 간소화되고 플랫폼에 관계없이 한 번의 API 호출로 모든 기기에 알림을 보낼 수 있습니다. 개별 게이머에게 개인화된 알림을 보내거나 모든 플레이어에게 메시지를 브로드캐스트하는 등 푸시 알림을 사용자 지정할 수도 있습니다. 이러한 유연성을 통해 플레이어와 효과적으로 소통하여 플레이어의 참여와 정보를 유지할 수 있습니다.&lt;/p&gt;

&lt;p&gt;펍넙에서 모바일 푸시 알림을 활용하려면 &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털의&lt;/a&gt; &lt;a href="https://www.pubnub.com/how-to/push-notifications/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;방법 가이드를&lt;/a&gt; 따라 모바일 푸시 알림을 활성화해야 합니다. 또한 &lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-android/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;FCM&lt;/a&gt; 및 &lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-apns/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;APN&lt;/a&gt; 모바일 푸시 알림에 대한 보다 구체적이고 자세한 가이드도 마련되어 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  문자 그 이상: 이모티콘
&lt;/h3&gt;

&lt;p&gt;이모티콘은 디지털 커뮤니케이션에서 보편적인 감정의 언어 역할을 합니다. 이모티콘은 플레이어가 자신의 감정과 반응을 재미있고 다채로운 방식으로 표현할 수 있게 해주며, 채팅을 더욱 상호작용적이고 매력적으로 만들어줍니다.&lt;/p&gt;

&lt;p&gt;펍넙을 사용하면 플레이어가 메시지 대신 &lt;a href="https://www.pubnub.com/docs/general/messages/publish#send-signals?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;시그널을&lt;/a&gt; 게시하도록 하여 Unity 게임에서 이모티콘 지원을 쉽게 구현할 수 있습니다. 시그널은 메시지보다 훨씬 빠르고 저렴하기 때문에 작은 비트의 데이터를 전송하는 데 사용됩니다. 이모티콘은 일반적으로 데이터 크기가 매우 작기 때문에 데이터를 빠르게 전송하기에 완벽한 방법입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#signal?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub의 시그널 API를&lt;/a&gt; 사용하여 지정된 채팅에 이모지를 게시할 수 있습니다. 예를 들어, 플레이어가 글로벌 채팅에 손을 흔드는 이모티콘을 보내고 싶다면, 보내기를 누르면 다음 코드가 실행됩니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;myMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:wave:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Signal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;global&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ErrorData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Information&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;수신하려는 플레이어가 지정된 채널을 구독하는 경우 신호를 받게 됩니다. 이 경우 글로벌 채널용이기 때문에 모든 사람이 이모티콘을 받게 됩니다. 신호를 수신하려면 수신자 이벤트를 구독하세요:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onSignal&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNSignalResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle the emoji by looking up the value and displaying the result.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이모티콘의 값이 Unity에 정의된 실제 이모티콘을 나타내는지 확인해야 합니다. 이러한 이모티콘은 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;앱 컨텍스트&lt;/a&gt; (이전의 오브젝트)를 통해 PubNub 네트워크에 저장하고 검색할 수 있으므로 플레이어가 액세스할 수 있는 모든 이모티콘을 서버리스 스토리지에서 검색할 수 있습니다. Unity 게임에서 앱 컨텍스트를 구현하는 방법에 대한 자세한 내용은 사용법 가이드를 참조하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  메시지 응답: 메시지 반응
&lt;/h3&gt;

&lt;p&gt;좋아요, 하트, 엄지 척, 스티커, 커스텀 게임별 반응과 같은&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메시지 반응&lt;/a&gt;은 플레이어가 채팅 메시지에 빠르고 쉽게 응답할 수 있는 방법을 제공합니다. 채팅에 상호작용을 추가할 뿐만 아니라 플레이어가 서로의 메시지를 인정하고 참여할 수 있도록 함으로써 커뮤니티 의식을 고취할 수 있습니다.&lt;/p&gt;

&lt;p&gt;PubNub의 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메시지 액션 API를&lt;/a&gt; 사용하여 반응 및 읽음 확인과 같은 기능을 구축하거나 사용자 지정 메타데이터를 메시지에 연결할 수 있습니다. Discord와 같은 채팅 애플리케이션에서 서버마다 서로 다른 리액션과 이모티콘을 사용하는 것과 마찬가지로, 채팅 유형도 서로 다를 수 있습니다. 채팅이 로드될 때 다음 호출을 사용하여 지정된 채팅 채널에 대해 사용 가능한 메시지 리액션을 검색할 수 있습니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetMessageActions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNGetMessageActionsResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNGetMessageActionsResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;플레이어가 메시지에 리액션으로 응답하려고 할 때, 게시된 메시지에 메시지 리액션을 추가하면 됩니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddMessageAction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MessageTimetoken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5610547826969050&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PNMessageAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;reaction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smiley_face&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNAddMessageActionResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNAddMessageActionResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PubNub은 시간 토큰을 사용하여 메시지가 네트워크에 게시된 시점을 정확하게 추적합니다. 메시지를 수신하면 소요된 시간도 페이로드에 포함됩니다. 그런 다음 메시지에 반응할 수 있도록 MessageTimetoken() 인수에 적절한 시간 토큰 값을 제공할 수 있습니다.&lt;/p&gt;

&lt;p&gt;반응을 수신하고 원래 메시지를 보낸 플레이어에게 알리려면 리스너를 추가하고 OnPNMessageAction 메서드에서 반응을 처리해야 합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessageAction&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageActionEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//Handle Message Reaction&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이모티콘과 마찬가지로 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;앱 컨텍스트를&lt;/a&gt; 사용하여 이러한 반응이 게임에서 시각적으로 어떻게 표시되는지 검색하고 저장할 수 있습니다. 메시지 반응을 사용하려면 &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털에서&lt;/a&gt; 키에 &lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메시지 지속성이&lt;/a&gt; 활성화되어 있는지 확인해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  GIF 및 기타 멀티미디어
&lt;/h3&gt;

&lt;p&gt;채팅 경험을 향상시키는 또 다른 중요한 기능은 멀티미디어 파일 공유입니다. GIF, 재미있는 순간을 담은 스크린샷, 게임 리소스 공유 등 파일 공유는 게임에 또 다른 차원의 상호작용을 제공합니다.&lt;/p&gt;

&lt;p&gt;이러한 유형의 멀티미디어 파일을 구현하는 데는 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/files?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;PubNub 파일 공유 API가&lt;/a&gt; 사용됩니다. 이 기능을 사용하면 플레이어는 액세스 권한이 있는 파일을 업로드, 다운로드, 삭제할 수 있습니다. 파일을 전송하려면 다음 호출을 수행하면 됩니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SendFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChatSamantha&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cat_picture.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//checks the bin folder if no path is provided&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Look at this photo!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JsonPluggableLibrary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SerializeToJsonString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileUploadResult&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Handle File Upload Error.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;구독자가 파일을 수신할 수 있도록 이벤트 리스너를 추가하고 OnPNFile 메서드에서 파일을 표시하는 방법을 처리해야 합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onFile&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNFileEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Handle how to display the file received&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;또한 다른 채팅 채널과 관련된 모든 파일을 가져오고, 정보를 나열하고, 삭제할 수도 있습니다. 관리자 포털에서 파일 공유 기능과 메시지 지속성을 사용 설정했는지 확인해야 합니다. &lt;a href="https://www.pubnub.com/how-to/admin-portal-enabling-files/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;파일 사용 설정 방법 가이드에서&lt;/a&gt; 자세한 방법을 알아볼 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  채팅 채널 보안 설정하기: 액세스 관리자
&lt;/h3&gt;

&lt;p&gt;모든 게임 환경에서는 채팅 채널의 보안을 유지하는 것이 가장 중요합니다. 원치 않는 메시지로부터 플레이어를 보호하든, 민감한 전략적 토론을 보호하든, Unity 게임의 채팅 시스템은 보안을 염두에 두고 설계해야 합니다.&lt;/p&gt;

&lt;p&gt;이때 PubNub의 &lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/access-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;Access Manager가&lt;/a&gt; 유용합니다. 이 솔루션은 채팅 채널 보안을 위한 강력하고 유연한 프레임워크를 제공합니다. 액세스 관리자를 사용하면 각 채널을 게시하거나 구독할 수 있는 사용자를 제어하여 Unity 게임의 채팅 시스템에 보안을 한층 더 강화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;액세스 관리자를 사용하면 사용자 수준, 채널 수준 또는 개별 키 수준에서 권한을 부여할 수 있습니다. 사용자가 채널을 읽고, 쓰고, 관리할 수 있는지 여부를 지정할 수 있으며, 이러한 권한은 게임의 필요에 따라 동적으로 업데이트할 수 있습니다. 예를 들어 두 플레이어 간의 비공개 채팅에서는 해당 두 플레이어에게만 비공개 채널에 대한 읽기 및 쓰기 권한을 부여할 수 있습니다. 마찬가지로, 길드 채팅에서는 모든 길드원에게 읽기 및 쓰기 권한을 부여하고 길드장에게만 관리 권한을 부여할 수 있습니다.&lt;/p&gt;

&lt;p&gt;또한 액세스 관리자는 토큰 기반 인증을 지원하므로 사용자를 안전하게 인증하고 적절한 권한을 부여할 수 있습니다. 이렇게 하면 권한이 있는 플레이어만 게임 채팅 채널에 액세스할 수 있으므로 잠재적인 위협으로부터 게임 커뮤니티를 보호할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 기능을 사용하려면 &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털에서&lt;/a&gt; 액세스 관리자를 활성화해야 합니다. 이 추가 기능 활성화에 대한 &lt;a href="https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;지원 페이지에서&lt;/a&gt; 자세한 방법을 확인할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  다음 단계
&lt;/h2&gt;

&lt;p&gt;이 사용법 가이드를 통해 Unity 게임에 강력한 실시간 채팅 시스템을 추가하는 방법을 배웠습니다. 환경에서 PubNub 오브젝트를 초기화하는 방법부터 다양한 채팅 유형을 나타내는 채팅 패턴을 설정한 다음 메시지를 보내고 받는 방법까지 모든 것을 설명했습니다. 이모티콘, 메시지 반응, 파일 공유와 같은 고급 기능을 구현하는 방법과 메시지 지속성, 모바일 푸시 알림, 채널 보안 등 좋은 채팅 시스템의 중요한 측면에 대해서도 배웠습니다.&lt;/p&gt;

&lt;p&gt;첫 게임을 개발하는 인디 개발자이든 멀티플레이어 게임을 개선하려는 노련한 개발자이든, PubNub의 실시간 기능은 게임 내 채팅을 지원하는 인프라 역할을 할 수 있으므로 가장 중요한 것에 집중할 수 있습니다.&lt;/p&gt;

&lt;p&gt;다음 리소스를 통해 자세히 알아보세요:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;유니티 문서를&lt;/a&gt; 읽고 게임에 실시간 채팅을 추가하는 데 필요한 모든 정보를 알아보세요.&lt;/li&gt;
&lt;li&gt;  유니티 가이드를 통해 &lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;친구 목록을&lt;/a&gt; 추가하는 방법을 알아보세요.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;유니티 쇼케이스 게임에서&lt;/a&gt; 채팅 패턴을 활용하여 채팅방 등을 관리하는 방법을 알아보세요.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/pubnub/unity"&gt;Unity SDK 소스 코드를&lt;/a&gt; 살펴보세요.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;궁금한 점이 있으면 언제든지 개발자 지원팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; )으로 문의하세요.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>게임에 일루미네이트를 설정하는 방법</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 15 May 2024 23:44:32 +0000</pubDate>
      <link>https://forem.com/pubnub-ko/geime-ilrumineiteureul-seoljeonghaneun-bangbeob-cjp</link>
      <guid>https://forem.com/pubnub-ko/geime-ilrumineiteureul-seoljeonghaneun-bangbeob-cjp</guid>
      <description>&lt;h2&gt;
  
  
  일루미네이트가 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;펍넙 일루미네이트는&lt;/a&gt; 게임 데이터의 실시간 분석 추적을 기반으로 즉각적인 의사 결정 및 실행 가능성을 제공하는 솔루션입니다. 일루미네이트를 사용하면 엔지니어링 팀의 큰 개입 없이도 게임에 중요한 KPI를 매핑하고, 사용자 행동에 기반한 의사 결정을 내리고, 즉각적인 결과를 확인할 수 있습니다. 일루미네이트를 사용하면 실시간 상호작용과 게임플레이가 발생하는 즉시 데이터에 기반한 스마트한 의사 결정을 내릴 수 있어 게임의 성장을 촉진하고 효율성을 최적화할 수 있습니다.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" alt="Illuminate allows you to experiment and iterate in real time" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 튜토리얼에서는 일루미네이트에 대해 자세히 알아보고, 일루미네이트가 게임과 스튜디오의 성공에 중요한 이유와 게임 데이터를 기반으로 작업을 트리거하는 즉각적인 결정을 내릴 수 있도록 일루미네이트를 설정하는 방법에 대해 알아봅니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  게임에 왜 일루미네이트가 필요한가요?
&lt;/h2&gt;

&lt;p&gt;대부분의 기존 분석 도구를 사용하면 실시간 데이터에 대한 조치를 취하는 것이 보통 사후 대응적인 방식입니다. 플레이어 피드백에 따른 가격 변경과 같은 조정은 데이터 수집, 테스트, 플랫폼 전반의 배포를 포함하는 긴 패치 주기로 인해 개발 및 향후 콘텐츠 제작에 리소스를 투입할 수 없게 됩니다. 이벤트 발생 후 몇 시간이라도 지연되면 실행 가능한 인사이트를 얻을 수 없기 때문에 플레이어 참여와 수익화에 대한 실시간 가시성을 확보하여 신속하게 전술적 결정을 내릴 수 있어야 합니다.&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" alt="There are a lot of problems that game companies face when trying to experiment or deploy changes based on feedback. Illuminate can help solve these problems." width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;일루미네이트는 게임 관리자와 데이터 분석가가 전략적 결정의 영향을 즉시 적용하고 평가할 수 있는 로우코드 커스터마이징 제품입니다. 일루미네이트를 사용하면 게임 개발자에게 부담을 주지 않고 부정 행위를 감지하는 동시에 게임 밸런스를 즉각적으로 조정하고, 실시간 실험을 통해 보다 효과적이고 적절한 수익화 전략을 수립하고, 개인화된 플레이어 보상을 제공하여 리텐션과 플레이어 경험을 개선할 수 있습니다.&lt;/p&gt;

&lt;p&gt;일루미네이트를 사용하면 플랫폼을 관리하고 실시간으로 즉각적인 조치를 취할 수 있습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 채널에서 타겟팅된 수익화 실험을 실행하고 즉각적인 결과 확인&lt;/li&gt;
&lt;li&gt; 플레이어의 행동에 따라 개인화된 추천을 즉시 전송할 수 있습니다.&lt;/li&gt;
&lt;li&gt; 사용자 또는 코호트 행동에 기반한 액션을 트리거하고 즉각적인 결과를 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt; 사기 탐지를 개선하고 의심스러운 행동을 실시간으로 식별하여 조치를 취하세요.&lt;/li&gt;
&lt;li&gt; 게임 내 상점 아이템의 가격을 조정하고 실험해 보세요. 플레이어가 동일한 아이템을 여러 개 구매하는 경우 가격을 조정하고 게임 내 이벤트를 트리거하여 모든 상점 가격에 영향을 줄 수 있습니다.&lt;/li&gt;
&lt;li&gt; 도전 과제/업적을 완료한 플레이어에게 게임 내 아이템 할인 코드를 보상으로 제공하세요. 플레이어가 가장 적은 시간을 보내는 지역을 조정하고 해당 지역에서 시간을 보내도록 플레이어에게 보상을 제공하거나 플레이어가 받는 보상의 종류를 변경하는 것을 고려하세요.&lt;/li&gt;
&lt;li&gt; 유용한 아이템을 생성하고 핵심 게임플레이 기능을 즉석에서 조정하여 엔지니어에게 버그를 요청하지 않아도 됩니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2TXLPfAWNVI"&gt;게임용 일&lt;/a&gt; 루미네이트 동영상에서 일루미네이트가 게임을 어떻게 지원하는지 자세히 알아볼 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  게임용 일루미네이트 설정 방법
&lt;/h2&gt;

&lt;p&gt;게임용 일루미네이트 설정에 들어가기 전에 설정 전반에 걸쳐 사용되는 몇 가지 주요 용어를 이해해야 합니다. 일루미네이트는 다음 세 가지 모듈로 구성됩니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;비즈니스 오브젝트&lt;/strong&gt;: 일루미네이트에 데이터를 가져오는 방법. 선택한 앱과 키세트에서 데이터를 캡처하기 위한 컨테이너인 비즈니스 오브젝트를 정의, 생성 및 활성화할 수 있습니다. 일련의 옵션(측정값, 차원 또는 지표)을 통해 실시간으로 추적할 특정 데이터와 집계 방법을 결정할 수 있습니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;결정&lt;/strong&gt;: 결정: 생성한 메트릭에 대해 조치를 취하는 곳입니다. 충족해야 할 조건이 있는 규칙을 정의하고 이러한 규칙이 충족될 때마다 트리거되는 작업을 정의하여 이를 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;대시보드&lt;/strong&gt;: 비즈니스 개체에서 만든 메트릭과 의사 결정에서 실행된 작업을 차트 및 대시보드(차트 모음)를 통해 시각화할 수 있는 곳입니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" alt="Illuminate is a constant cycle of experimentation and iteration once you have set up the associated Dashboard, Business Object, and Decisions." width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이제 주요 용어를 정의했으니, Illuminate를 게임과 통합하는 과정은 6단계로 구성됩니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 메시지 스키마 이해하기&lt;/li&gt;
&lt;li&gt; 데이터의 출처를 선택합니다.&lt;/li&gt;
&lt;li&gt; 데이터 선택&lt;/li&gt;
&lt;li&gt; 데이터 시각화하기&lt;/li&gt;
&lt;li&gt; 데이터 활용하기&lt;/li&gt;
&lt;li&gt; 시각화 및 조정하기&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  메시지 스키마 이해하기
&lt;/h3&gt;

&lt;p&gt;게임의 데이터 스키마를 이해하는 것이 중요합니다. 즉, 플레이어 행동, 게임 내 거래, 시스템 이벤트 등 추적하고 분석하려는 데이터의 유형을 파악해야 합니다. 개발자는 페이로드에 정확히 무엇이 포함되어 있는지 이해하고 문서화함으로써 분석가와 다른 팀원이 JSONPath를 사용하여 데이터를 적절한 소스에 효과적으로 매핑할 수 있도록 할 수 있습니다. 비즈니스 객체를 만들 때 데이터를 선택할 때 이것이 왜 중요한지 이해하게 될 것입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터의 출처 선택
&lt;/h3&gt;

&lt;p&gt;일루미네이트는 PubNub의 지원 여부와 관계없이 온라인으로 연결되는 모든 게임에서 사용할 수 있습니다. PubNub이 게임 인프라를 지원하는 경우, &lt;a href="https://admin.pubnub.com/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;관리자 포털에서&lt;/a&gt; 비즈니스 오브젝트를 생성할 때 게임에 적합한 앱과 키셋을 선택하기만 하면 됩니다(자세한 내용은 곧 설명합니다).&lt;/p&gt;

&lt;p&gt;게임이 PubNub로 구동되지 않는 경우, &lt;a href="https://www.pubnub.com/docs/sdks/rest-api/send-fire-request?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;REST API&lt;/a&gt; 또는 유니티의 &lt;a href="https://www.pubnub.com/docs/sdks?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;SDK&lt;/a&gt; 중 하나를 통해 Fire API를 사용하여 데이터를 전송할 수 있습니다. Fire 엔드포인트를 사용하면 클라이언트가 Functions 이벤트 핸들러에 메시지를 보낼 수 있습니다. 이러한 메시지는 발신하는 채널에 등록된 이벤트 핸들러로 직접 전달되어 실행을 트리거합니다.&lt;/p&gt;

&lt;p&gt;PubNub Fire API를 활용하려면 PubNub 계정을 생성하고 게임에 필요한 기능으로 키셋을 설정해야 합니다. 이 키세트에는 Fire API에 필요한 퍼블리시 및 구독 키가 포함되어 있습니다. 설정 방법은 &lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;방법 가이드를&lt;/a&gt; 참조하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 선택: 비즈니스 오브젝트
&lt;/h3&gt;

&lt;p&gt;비즈니스 오브젝트는 일루미네이트의 기본 요소입니다. 비즈니스 오브젝트는 일루미네이트 내에서 의사 결정 및 시각화에 사용하려는 데이터를 담는 컨테이너이며, 기본적으로 데이터를 일루미네이트에 가져오는 방법입니다.&lt;/p&gt;

&lt;p&gt;비즈니스 개체를 구성하는 요소는 세 가지입니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 데이터 선택(측정값 및 차원)&lt;/li&gt;
&lt;li&gt; 데이터 소스(데이터의 출처&lt;/li&gt;
&lt;li&gt; 조건(메트릭)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;데이터베이스와 관련이 없지만 비즈니스 개체의 구조를 SQL의 SELECT(측정값 및 차원), FROM(데이터 소스), WHERE(메트릭)의 관점에서 생각하면 도움이 됩니다. 비즈니스 개체를 만들 때 알아야 할 구체적인 세부 사항이나 해결 방법은 &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;설명서를&lt;/a&gt; 참조하세요.&lt;/p&gt;

&lt;h4&gt;
  
  
  데이터 선택
&lt;/h4&gt;

&lt;p&gt;비즈니스 개체에 대해 선택할 수 있는 값에는 두 가지 유형이 있습니다: 측정값과 차원입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#measures?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;측정값은&lt;/a&gt; 숫자로 된 정량적 값입니다. 측정값의 예로는 게임 시간, 코인 수, 킬 수, 무기 데미지, 주문 값 등이 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#dimensions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;차원은&lt;/a&gt; 플레이어 언어, 선택한 코스튬, 퀘스트 유형, 선택한 무기 유형 또는 게임 레벨과 같은 정성적 값입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" alt="With Illuminate, you can create and edit Business Objects which contain mapped quantitative and qualitative data to capture." width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;추적하려는 데이터 유형에 따라 JSONPath를 사용하여 &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#data-mapping?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;데이터를&lt;/a&gt; 측정값과 차원에 &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#data-mapping?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;매핑해야&lt;/a&gt; 합니다. 일루미네이트는 데이터 소스(이전 단계에서 설정한)에서 이 데이터 캡처를 시작하기 위해 어디에서 찾을지 이해해야 합니다. 데이터 소스를 정의하려면 각 측정값 및 차원 옆에 있는 맵 버튼을 선택하고 해당 JSON 경로를 입력합니다.&lt;/p&gt;

&lt;p&gt;메시지 스키마를 이해해야 하므로 비즈니스 개체 설정에서 가장 까다로운 부분입니다. 앞서 메시지 스키마를 문서화했거나 이해했으므로, 이를 일루미네이트가 데이터를 찾는 방식에 매핑해야 합니다.&lt;/p&gt;

&lt;p&gt;메시지(특히 게시 메시지 API)를 캡처하는 경우, 일루미네이트는 다음과 같은 구조를 찾고 있습니다. 인프라가 PubNub에 의해 구동되지 않는 경우, 데이터를 게시 메시지 API와 동일한 구조로 매핑해야 합니다:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the published message&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;UUID&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;published&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;측정값 또는 차원을 올바르게 매핑하려면 &lt;code&gt;메시지&lt;/code&gt; 개체 다음에 다른 필드를 제공해야 합니다. 항상 &lt;code&gt;$.message.{필수-보조 필드}.{옵션-추가 필드}와&lt;/code&gt; 같은 구조를 따릅니다.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;데이터를 매핑하는 방식은 전적으로 메시지 구조를 기반으로&lt;/em&gt; 합니다. 다음은 메시지에 대한 데이터 매핑의 몇 가지 예입니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  코인 수 추적(측정값) =&amp;gt; $.message.meta.coins&lt;/li&gt;
&lt;li&gt;  장착한 코스튬 아이템(차원) =&amp;gt; $.message.body&lt;/li&gt;
&lt;li&gt;  채널 이름(차원) =&amp;gt; $메시지.채널&lt;/li&gt;
&lt;li&gt;  피해량(측정값) =&amp;gt; $.message.body[6]&lt;/li&gt;
&lt;li&gt;  특정 사용자 이름 가져오기 (차원) =&amp;gt; $.message.userId&lt;/li&gt;
&lt;li&gt;  친구 수(측정값) =&amp;gt; $.message.body.user.friends_count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" alt="In Illuminate, you can map different data to be captured via Business Objects." width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;또한, 일루미네이트는 PubNub 네트워크를 통해 전송된 채널, 채널 멤버, 채널 멤버 및 사용자에 대한 메타데이터를 유지할 수 있는 PubNub의 &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;앱 컨텍스트를&lt;/a&gt; 활용하여 데이터를 캡처할 수도 있습니다. Illuminate가 이 데이터를 캡처하는 방법을 정확히 따라하면 이 정보에 액세스할 수 있습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// data from the sending user metadata, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;externalId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;external&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the channel the message is sent on, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;membership&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the user's membership to the channel, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;메시지와 마찬가지로 측정값이나 차원을 올바르게 매핑하려면 &lt;code&gt;사용자&lt;/code&gt;, &lt;code&gt;채널&lt;/code&gt; 또는 &lt;code&gt;멤버십&lt;/code&gt; 개체를 제공한 다음 JSON에서 하나 이상의 키를 제공해야 합니다. 항상 &lt;code&gt;$.user.{필수-보조-필드}.{옵션-추가-필드}의&lt;/code&gt; 구조를 따릅니다. 다음은 앱 컨텍스트에 대한 데이터 매핑의 몇 가지 예입니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  상점 항목 세부 정보(차원) =&amp;gt; $.channel.custom.details&lt;/li&gt;
&lt;li&gt;  친구 목록 상태(차원) =&amp;gt; $.membership.status&lt;/li&gt;
&lt;li&gt;  플레이어 언어(차원) =&amp;gt; $.user.custom.language&lt;/li&gt;
&lt;li&gt;  플레이어의 평균 점수(측정값) =&amp;gt; $.user.custom.team_deathmatch_score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;참고&lt;/strong&gt;: 비즈니스 개체를 만들려면 하나 이상의 차원 또는 측정값을 추가해야 합니다.&lt;/p&gt;

&lt;h4&gt;
  
  
  데이터 소스
&lt;/h4&gt;

&lt;p&gt;측정값과 차원을 매핑한 후에는 데이터의 출처를 결정해야 합니다. 이것은 앞서 결정한 것입니다. 앞서 정의한 적절한 앱 및 키 집합을 선택하여 Illuminate가 올바른 소스에서 데이터를 캡처하도록 하세요.&lt;/p&gt;

&lt;h4&gt;
  
  
  조건(지표)
&lt;/h4&gt;

&lt;p&gt;데이터 소스를 선택한 후에는 &lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메트릭이라는&lt;/a&gt; 조건을 추가할 수 있습니다. SQL의 WHERE 문과 유사하게, 메트릭은 비즈니스 오브젝트가 데이터를 캡처하는 데 반드시 필요한 것은 아니지만 측정값 및 차원을 필터링하고 계산을 적용하는 데 매우 유용합니다. 의사 결정을 만들거나 차트를 통해 대시보드에서 시각화하려면 메트릭이 필요하다는 점만 기억하세요(자세한 내용은 나중에 설명).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/create-business-object#create-metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;메트릭을 만들&lt;/a&gt; 때 필터에 필드를 할당하고 선택해야 합니다. 몇 가지 주의해야 할 필드가 있습니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  대시보드에서 데이터를 시각화할 차트의 이름이 동일하므로 의미 있는 메트릭 이름을 지정하세요.&lt;/li&gt;
&lt;li&gt;  함수를 선택할 때, 측정값은 현재 &lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;AVG&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt; 및 &lt;code&gt;MIN을&lt;/code&gt; 사용하여 집계할 수 있습니다. 차원은 &lt;code&gt;카운트&lt;/code&gt; 함수만 사용할 수 있습니다. 함수를 선택하면 드롭다운 목록에서 측정값 또는 차원을 선택할 수 있습니다.&lt;/li&gt;
&lt;li&gt;  기간의 경우 집계 창 또는 함수의 기간을 선택합니다.&lt;/li&gt;
&lt;li&gt;  차트 및 의사 결정에서 사용할 수 있는 차원을 선택해야 합니다(나중에 이러한 차원을 선택하지 않으면 차트에서 세분화하고 의사 결정의 규칙에 적용할 수 없으므로).&lt;/li&gt;
&lt;li&gt;  다양한 차원을 기준으로 특정 메시지 또는 앱 컨텍스트 데이터를 필터링합니다. 대시보드에서 시각화하고 데이터를 수집하기 위해 메트릭에 필터를 적용할 필요는 없다는 점에 유의하세요.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;하나의 비즈니스 개체에 대해 서로 다른 데이터를 캡처하는 여러 지표를 만들 수 있습니다. 아래는 측정값에 대해 발생한 피해와 해당 피해를 수행한 무기 유형을 캡처하는 지표의 예입니다:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" alt="In Illuminate, you can edit a metric associated with a Business Object to capture specific data by using Filters." width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 시각화 대시보드 및 차트
&lt;/h3&gt;

&lt;p&gt;일루미네이트를 사용하면 추적하려는 지표뿐만 아니라 대시보드의 차트를 통해 의사 결정 작업과 그 결과도 &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;시각화할&lt;/a&gt; 수 있습니다.&lt;/p&gt;

&lt;p&gt;이렇게 하면 제품의 추세를 실시간으로 관찰하고, 데이터에 기반한 비즈니스 의사결정을 통해 대응하고 접근 방식을 개선할 수 있습니다. 또한 앞서 설정한 비즈니스 오브젝트를 기반으로 일루미네이트가 데이터를 제대로 캡처하고 있는지 확인할 수 있는 좋은 방법입니다!&lt;/p&gt;

&lt;p&gt;모든 메트릭을 한 곳에서 볼 수 있는 차트 모음인 &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#dashboards?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;대시보드를&lt;/a&gt; 만들고 대시보드에 차트를 추가할 수 있습니다. &lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#charts?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;차트는&lt;/a&gt; 특정 비즈니스 개체에 대해 정의된 메트릭을 시각적으로 표현한 것입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" alt="With Illuminate, you can add charts to Dashboards to visualize data." width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;언제든지 차트에 다른 시간 범위(예: 30분, 1시간 또는 사용자 지정 날짜)를 표시하거나 막대형 차트(기본 보기) 또는 선 그래프 등 다양한 차트 유형을 통해 메트릭 데이터를 표시하는 등 차트에 메트릭 데이터가 표시되는 방식을 사용자 지정할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" alt="In Illuminate, you can monitor data captured in real time by visualizing the charts in your Dashboard and see when any associated Decisions are triggered." width="740" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;하나의 대시보드에 여러 차트(지표)를 추가할 수 있으며, 게임의 여러 영역(수익화, 게임플레이, 퀘스트 보상 등)을 시각화하기 위해 여러 대시보드를 만들 수도 있습니다. 의사 결정을 구성한 후에는 대시보드의 차트를 통해 트리거되는 의사 결정 작업과 그 결과를 확인할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  데이터 활용하기: 의사 결정 및 조치
&lt;/h3&gt;

&lt;p&gt;메트릭이 만들어지면 해당 데이터를 평가하고, 추세를 모니터링하고, 가장 중요한 것은 그에 따라 조치를 취할 수 있습니다.&lt;/p&gt;

&lt;p&gt;일루미네이트에는 다양한 유형의 작업과 이러한 작업을 실행할 시기를 정의하는 규칙을 만들어 실행하려는 메트릭을 정의할 수 있는 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;의사 결정&lt;/a&gt; 모듈이 포함되어 있습니다.&lt;/p&gt;

&lt;p&gt;결정을 만들 때는 다음과 같이 하세요:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  비즈니스 개체와 연결된 메트릭 중 하나를 선택합니다.&lt;/li&gt;
&lt;li&gt;  수행하려는 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;작업을&lt;/a&gt; 정의합니다.&lt;/li&gt;
&lt;li&gt;  선택한 조건과 구성된 작업을 사용하여 [규칙}&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;(https://www.pubnub.com/docs/illuminate/decisions/basics#rules)&lt;/a&gt; 을 설정합니다. 이러한 규칙은 작업을 트리거합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;규칙은 제품 관리자가 코드화 및 배포하기 전에 참여도 및 수익화 전략을 실험해 볼 수 있도록 돕기 위한 것입니다. 일루미네이트를 사용하면 가정이 아닌 실제 데이터를 기반으로 의사 결정을 내린 다음 자동화된 조건과 조치를 통해 해당 데이터에 따라 조치를 취할 수 있습니다.&lt;/p&gt;

&lt;p&gt;의사 결정은 두 부분으로 구성됩니다: 조치와 규칙.&lt;/p&gt;

&lt;h4&gt;
  
  
  액션
&lt;/h4&gt;

&lt;p&gt;작업은 조건(다음에 설명)이 충족될 때 어떤 일이 일어날지를 정의합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" alt="In Illuminate, edit the configuration of your Decision to trigger on different conditions and execute various actions." width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;작업을 설정할 때 선택할 수 있는 5가지 작업 유형이 있습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 메시지 보내기: 사용자 또는 채널에 메시지를 게시하고 PubNub 게시 API를 활용합니다. 의사 결정 규칙을 설정할 때 동적으로 제어하고 변경할 수 있는 변수(${variableThatChanges})를 선택적으로 추가할 수 있습니다.&lt;/li&gt;
&lt;li&gt; 웹훅: 타사 서비스 연동 서비스에 연결하여 특정 URL로 호출을 보냅니다. 의사 결정 규칙을 설정할 때 동적으로 제어하고 변경할 수 있는 변수(${variableThatChanges})를 선택적으로 추가할 수 있습니다.&lt;/li&gt;
&lt;li&gt; 사용자 업데이트: 사용자를 위해 PubNub 앱 컨텍스트 API를 활용하여 원하는 정보를 키/값 쌍으로 제공하여 사전 정의된 사용자 메타데이터 또는 사용자 지정 사용자 메타데이터를 설정합니다.&lt;/li&gt;
&lt;li&gt; 채널 업데이트: 원하는 정보를 키/값 쌍으로 제공하여 사전 정의된 또는 사용자 지정 채널 메타데이터를 설정하고, 채널에 대한 PubNub 앱 컨텍스트 API를 활용하여 설정합니다.&lt;/li&gt;
&lt;li&gt; 멤버십 업데이트: 멤버십에 대한 PubNub 앱 컨텍스트 API를 활용하여 원하는 정보를 키/값 쌍으로 제공하여 사전 정의된 또는 사용자 지정 멤버십 메타데이터를 설정합니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;의사 결정당 하나의 메트릭만 구성할 수 있지만, 사용 사례에 맞게 여러 의사 결정을 만들 수 있습니다. 의사 결정에 대한 액션을 만들 때는 반드시 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;설명서를&lt;/a&gt; 따르세요.&lt;/p&gt;

&lt;p&gt;작업 구성을 완료한 후에는 트리거할 작업에 대한 규칙을 설정해야 합니다.&lt;/p&gt;

&lt;h4&gt;
  
  
  규칙
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;규칙은&lt;/a&gt; 작업을 트리거하기 위해 충족해야 하는 기준인 &lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;조건과&lt;/a&gt; 조건이 충족될 때 실행할 평가 및 작업으로 구성됩니다. 하나의 규칙은 어떤 조건에 대해 어떤 작업을 트리거해야 하는지 명시하는 정의(의사 결정 테이블의 행)입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" alt="In Illuminate, you can add and edit rules that when satisfied, trigger various Actions associated with your Decisions." width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;의사 결정 테이블은 네 부분으로 구성됩니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; 히트 정책: 조건이 충족되면 첫 번째 일치하는 규칙(단일)에 대해서만 작업을 트리거할지, 아니면 모든 규칙(다중)에 대해 작업을 트리거할지를 정의하는 설정입니다.&lt;/li&gt;
&lt;li&gt; 집계 창: 규칙 구성 창에서 편집할 수 없는 유일한 값입니다. 메트릭을 만들 때 함수에 대해 선택한 기간 값에서 자동으로 채워집니다. 메트릭이 측정값 또는 차원에 대해 지정된 함수(카운트, 평균, 최대 또는 기타)를 실행하는 빈도를 나타냅니다.&lt;/li&gt;
&lt;li&gt; 평가 빈도: 이 결정에서 일루미네이트가 규칙을 실행해야 하는 빈도를 정의하는 규칙의 룩백 창입니다.&lt;/li&gt;
&lt;li&gt; 조건: 구성 테이블을 사용하여 직접 정의한 요구 사항 집합입니다. 여기에서 어떤 조건(및 조건이 충족하는 임계값)이 어떤 작업을 트리거할지 정의할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;의사 결정 테이블의 각 행은 조건과 작업으로 구성된 별도의 의사 결정 규칙이라는 점에 유의하세요. &lt;strong&gt;규칙의 순서에 따라 규칙이 실행되는 순서가 결정됩니다&lt;/strong&gt;. 기존 순서를 변경하려면 의사 결정에서 규칙 편집을 선택하고 각 규칙 옆의 '작업' 메뉴에서 위로 이동 또는 아래로 이동 옵션을 사용하여 순서를 변경합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  시각화 및 조정하기
&lt;/h3&gt;

&lt;p&gt;비즈니스 개체, 대시보드 및 차트, 의사 결정을 설정한 후에는 실시간으로 변경 사항을 분석하고 실험해 볼 수 있습니다. 변경 사항이 게이머나 게임에 긍정적인 영향을 미치는지 확인하기 위해 더 이상 밸런스 패치를 기다릴 필요가 없습니다.&lt;/p&gt;

&lt;p&gt;대부분의 시간을 이곳에서 보내면서 게임 내 참여도를 높이기 위한 조정을 위한 실험 결정을 내릴 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  다음 단계
&lt;/h2&gt;

&lt;p&gt;일루미네이트는 성장과 회사의 수익을 직접적으로 담당하는 팀에게 실시간 실험의 힘을 제공합니다. 게임에 중요한 KPI를 매핑하고 이러한 행동을 기반으로 의사 결정을 트리거하여 게임플레이와 사용자 행동을 기반으로 실험하고 데이터에 기반한 현명한 의사 결정을 내릴 수 있는 유용한 플랫폼입니다.&lt;/p&gt;

&lt;p&gt;일루미네이트 &lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ko"&gt;리소스를&lt;/a&gt; 통해 일루미네이트가 게임에 어떤 도움을 줄 수 있는지 알아보고, 직접 사용해보는 방법을 알아보세요. 궁금한 점이 있으면 언제든지 개발자 지원팀( &lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;)으로 문의해 주세요.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
