이벤트 파이프라인
이벤트 파이프라인은 PlayFab Services SDK의 일부인 기능이며 주요 목적은 게임 개발자가 PlayFab Insights에 저장할 이벤트를 보낼 수 있도록 하는 것입니다. 이를 통해 개발자는 배치 크기, 전송 빈도 및 적절한 텔레메트리 솔루션의 기타 측면을 지정할 수 있습니다. 이는 게임 개발자의 부담을 덜고 그러한 모든 측면을 대신 처리하는 데 도움이 됩니다. 구성 가능한 이벤트 파이프라인에 대한 지원이 있습니다. 타이틀에는 이러한 파이프라인이 하나 이상 포함될 수 있으며, 각각 자체 속성으로 구성할 수 있습니다. 파이프라인의 기본 개념 몇 가지를 살펴보겠습니다.파이프라인 타입
파이프라인 타입은 파이프라인이 방출하는 이벤트의 타입과 직접 관련이 있습니다. 개발자가 인스턴스화할 수 있는 두 가지 다른 타입의 파이프라인이 있습니다:- 텔레메트리 이벤트 파이프라인: 텔레메트리 이벤트만 방출할 수 있으며 Write Telemetry Events REST API를 사용합니다.
- PlayStream 이벤트 파이프라인: PlayStream 이벤트만 방출할 수 있으며 Write Events REST API를 사용합니다.
인증 타입
파이프라인 생성의 또 다른 중요한 부분은 인증 타입입니다. PlayFab Events에 대해 지원되는 두 가지 인증 메커니즘이 있습니다—엔터티 인증 및 텔레메트리 키 인증. 엔터티 인증은 게임 개발자가 추가 집계 또는 분석을 위해 특정 엔터티에 이벤트를 연결하려고 할 때 사용됩니다. 예를 들어, 게임 개발자는 세분화를 허용하는 타이틀 플레이어에 대한 추가 행동 분석을 위해 플레이어의 액션과 관련된 이벤트를 로깅할 수 있습니다. 텔레메트리 키 인증은 게임 개발자가 반드시 엔터티에 연결되지 않아도 되는 이벤트를 로깅하려고 할 때 사용됩니다. 예를 들어, 로그인한 플레이어가 있기 전에, 타이틀은 추가 분석을 위해 수집하려는 성능 또는 특정 지표와 관련된 이벤트를 보내기 시작할 수 있습니다. 이는 일반적인 엔터티 인증 프로세스를 거칠 필요 없이 수행할 수 있습니다. 지원되는 인증 타입 / 이벤트 타입 조합엔터티 인증
이 인증 타입은 일반적이고 가장 흔한 PlayFab 인증 방법입니다. 특정 엔터티와 밀접하게 관련되어 있으며 후속 호출에 사용할 엔터티 토큰을 얻으려면 해당 PlayFab 로그인 API를 호출해야 합니다. 다음 목록은 엔터티 인증과 함께 사용할 수 있는 다양한 유형의 엔터티를 나타냅니다.- namespace: namespace 엔터티는 스튜디오 내 모든 타이틀에 대한 모든 전역 정보를 나타냅니다.
- title: title 엔터티는 해당 타이틀에 대한 모든 전역 정보를 나타냅니다.
- master_player_account: master_player_account는 스튜디오 내 모든 타이틀에서 공유되는 플레이어 엔터티입니다.
- title_player_account: 대부분의 개발자에게 title_player_account는 가장 전통적인 방식으로 플레이어를 나타냅니다.
- character: character 엔터티는 title_player_account의 하위 엔터티입니다.
- group: group 엔터티는 다른 엔터티에 대한 컨테이너입니다. 현재 플레이어와 캐릭터로 제한됩니다.
텔레메트리 키 인증
텔레메트리 키 인증은 엔터티 토큰을 요구하지 않으므로 특정 엔터티에 연결되지 않습니다. 텔레메트리 키 인증을 사용하는 경우, 파이프라인 생성 중에 PFEventPipelineTelemetryKeyConfig 구조체가 필요합니다. 이 구조체의 주요 부분은 두 가지입니다:- PlayFab Game Manager를 통해 생성 및 관리되는 문자열로 구성되는 텔레메트리 키.
- 이벤트를 업로드하는 데 사용되어야 하는 올바른 서비스 구성이 무엇인지 SDK에 알려주는 PFServiceConfigHandle. 서비스 구성 핸들은 SDK 초기화 중에 PFServiceConfigCreateHandle을 호출하여 생성됩니다.
이벤트 파이프라인 구성
앞서 언급했듯이, 이벤트 파이프라인은 PFEventPipelineConfig 구조체 파라미터를 통해 파이프라인 생성 후 제공할 수 있는 일부 구성 가능한 속성이 있습니다. 구성 가능한 속성은 다음과 같습니다:- maxEventsPerBatch: PlayFab에 쓰기 전에 배치되는 최대 이벤트 수.
- maxWaitTimeInSeconds: 파이프라인이 미완성 배치를 보내기 전에 대기하는 최대 시간.
- pollDelayInMs: 파이프라인이 이벤트 버퍼를 비운 후 다시 읽기 위해 대기하는 시간.
- compressionLevel: 압축 알고리즘에서 사용되는 압축 수준을 정의합니다. 압축에 대한 자세한 내용은 _GZIP 압축_을 참조하세요.
- retryOnDisconnect: 이벤트 파이프라인은 연결 손실로 인해 실패한 이벤트 전송을 다시 시도합니다. 텔레메트리 이벤트 파이프라인에만 사용할 수 있습니다.
- bufferSize: 파이프라인 버퍼의 이벤트 양 제한.
기본값
PFEventPipelineConfig에 일부 속성만 지정된 경우, 비어 있는 것들은 덮어쓰기되고 기본값을 사용합니다.
이벤트 파이프라인에 대해 이러한 속성 중 어떤 것을 업데이트하는 방법에 대한 예제는 _파이프라인 구성 업데이트_를 참조하세요.
GZIP 압축
이벤트 파이프라인은 GZIP 압축 표준을 사용하여 본문 페이로드를 압축하는 옵션을 제공합니다. 원하는 압축 수준은 PFEventPipelineUpdateConfiguration API 파라미터의 일부인 PFEventPipelineConfig 구조체 내부에 지정할 수 있습니다. 낮은 압축 수준은 압축이 덜 되지만 속도가 가장 높고, 높은 압축 수준은 더 나은 압축률을 달성하지만 압축 속도가 가장 느립니다. 압축률의 차이는 전송되는 데이터의 타입에 전적으로 달려 있습니다. 데이터의 크기와 무작위성에 따라 압축률은 다른 수준에서도 동일할 수 있습니다. 트레이드 오프: 압축을 사용하면 압축 알고리즘 실행의 복잡성이 추가되어 CPU 시간이 증가하지만, 반면에 네트워크 본문 페이로드는 크게 감소합니다. 따라서 게임의 요구 사항과 리소스에 따라 압축을 사용해야 하는지는 게임 개발자의 몫입니다. 내부 유효성 검사에 따르면, CPU 시간이 평균 20% 증가하고 페이로드 본문 크기가 평균 91% 감소합니다. 이 비율은 압축되는 데이터의 페이로드 크기와 복잡성에 따라 크게 달라질 수 있습니다.이벤트 핸들러
파이프라인 생성의 일부로, 게임 개발자는 이벤트가 업로드될 때 호출되는 두 가지 선택적 이벤트 핸들러를 제공할 수 있습니다. 그러나 게임 개발자가 “fire and forget” 경험을 원하는 경우 이벤트 핸들러 제공을 생략할 수 있습니다. 제공할 수 있는 이벤트 핸들러는 다음과 같습니다:- PFEventPipelineBatchUploadSucceededEventHandler: 이름에서 알 수 있듯이, PlayFab에 성공적으로 업로드된 모든 이벤트를 수신합니다.
- PFEventPipelineBatchUploadFailedEventHandler: 파이프라인 재시도 로직을 거친 후 실패한 모든 이벤트를 수신합니다.
파이프라인 생성 예제
아래에서 이전에 논의된 주제를 기반으로 이벤트 파이프라인을 인스턴스화하는 방법에 대한 다양한 예제를 찾을 수 있습니다.-
엔터티 인증을 사용한 텔레메트리 이벤트 파이프라인 생성
개발자가 텔레메트리 이벤트를 보내고 싶고 텔레메트리 키 인증을 사용할 필요가 없는 경우, PFEventPipelineCreateTelemetryPipelineHandleWithEntity API가 다음 예제와 같이 이 목적에 부합합니다:
이 예제는 엔터티 인증을 사용하는 텔레메트리 이벤트 파이프라인을 만드는 방법을 보여주며 핸들러가 없습니다. 이는 파이프라인이 이벤트를 발생시키고 결과에 대해 잊는다는 것을 의미합니다.
-
텔레메트리 키 인증을 사용한 텔레메트리 이벤트 파이프라인 생성
개발자가 텔레메트리 이벤트를 보내고 싶고 텔레메트리 키 인증을 사용할 필요가 있는 경우, PFEventPipelineCreateTelemetryPipelineHandleWithKey API가 다음 예제와 같이 이 목적에 부합합니다:
이 예제는 엔터티 인증을 사용하지 않는 텔레메트리 이벤트 파이프라인을 만드는 방법을 보여줍니다. 이벤트 파이프라인은 텔레메트리 키를 사용하여 이벤트 업로드를 시작하며, 나중에 엔터티를 추가할 수 있는 가능성이 있습니다. 엔터티 인증으로 전환 또는 엔터티 업데이트를 참조하세요.
-
PlayStream 이벤트 파이프라인 생성
개발자가 PlayStream 이벤트를 보내고 싶은 경우, PFEventPipelineCreatePlayStreamPipelineHandle API가 다음 예제와 같이 이 목적에 부합합니다:
이 예제는 엔터티 인증을 사용하는 PlayStream 이벤트 파이프라인이 어떻게 생성되는지 보여주며 핸들러가 없습니다. 이는 파이프라인이 이벤트를 발생시키고 결과에 대해 잊는다는 것을 의미합니다.
-
이벤트 핸들러를 사용하는 이벤트 파이프라인
이 예제는 파이프라인 생성 API에 이벤트 핸들러가 어떻게 제공될 것인지 보여줍니다.
이벤트 방출
이벤트 파이프라인이 이미 생성된 후에 이벤트를 방출하는 것은 간단한 작업입니다. 게임 개발자는 기존 이벤트 파이프라인 핸들과 보내려는 이벤트를 받는 PFEventPipelineEmitEvent API를 호출해야 합니다.E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)
엔터티 인증으로 전환 또는 엔터티 업데이트
파이프라인이 텔레메트리 키 구성만 사용하여 생성된 경우, 엔터티 인증으로 전환하거나 다른 엔터티를 사용하도록 파이프라인을 업데이트하는 방법이 있습니다. PFEventPipelineAddUploadingEntity를 사용하면 재초기화할 필요 없이 실행 중인 파이프라인에 엔터티를 첨부할 수 있습니다. 또한 기존 엔터티가 있는 경우 이를 대체합니다. 예제: 타이틀 실행 시작 시 텔레메트리 키 구성으로 텔레메트리 이벤트 파이프라인이 생성됩니다. 이에 대한 가능한 이유는 아직 플레이어 ID가 없거나 단순히 플레이어와 관련된 어떤 것도 로깅하고 싶지 않기 때문입니다.텔레메트리 키 인증으로 전환
이전 시나리오를 확장하여, 개발자가 텔레메트리 인증으로 돌아가서 엔터티에서 이벤트 로깅을 분리하려는 경우, PFEventPipelineRemoveUploadingEntity를 호출하고 이벤트 파이프라인 핸들을 다음과 같이 전달할 수 있습니다:파이프라인 구성 업데이트
파이프라인은 기존 이벤트 파이프라인 핸들과 새 구성 구조체를 받는 PFEventPipelineUpdateConfiguration API를 사용하여 다음과 같이 쉽게 업데이트할 수 있습니다:무효 / 비활성화된 텔레메트리 키
파이프라인 생성 시 텔레메트리 키가 비활성화되거나 무효한 키가 제공되는 경우, 해당 텔레메트리 키를 사용하여 실행 중인 모든 이벤트 파이프라인은 키가 무효하거나 비활성화되었음을 확인하는 즉시 실패하기 시작합니다. 고객이 키를 다시 활성화하는 경우, 파이프라인은 그것을 인식하지 못하고 실패한 이벤트 핸들러를 통해 계속해서 실패를 다시 보냅니다. 이러한 동작은 세션 기반이라는 점을 언급할 가치가 있으며, 이는 타이틀이 다시 시작되면 새 파이프라인이 생성되고 이벤트를 다시 업로드할 수 있게 됨을 의미합니다.파이프라인 핸들 수명 주기
다른 PlayFab 핸들과 마찬가지로, 이벤트 파이프라인 핸들은 복제/닫기 패턴을 사용합니다:- PFEventPipelineCloseHandle: 파이프라인 핸들을 닫습니다. 파이프라인에 대한 마지막 핸들이 닫히면 파이프라인이 파괴되고 남은 버퍼링된 이벤트가 플러시됩니다.
- PFEventPipelineDuplicateHandle: 파이프라인 핸들을 복제합니다. 원본과 복제된 핸들 모두 PFEventPipelineCloseHandle로 독립적으로 닫아야 합니다.
