12. 로그 연동

아이펀 디플로이는 게임 서버가 남기는 로그를 통해서 기본적인 통계 분석 기능을 제공하고, 사용자의 플레이 이력 검색 기능을 제공합니다.

Note

SQL 서버 대신 MongoDB 를 쓰는 이유는 MongoDB 와 같은 NoSQL 이 로그 포맷에 따른 저장 방식의 제약이 적기 때문입니다.

또한, 환경 변수 방식은 서버를 작성하는데 사용한 프로그래밍 언어에 상관없이 동작하고, DB 정보를 별도 설정 파일로 넘기는 것에 비해서 개발 설정을 라이브 설정으로 전환할 때 실수할 확률이 적다는 이점이 있습니다.

Important

아이펀 디플로이에서 제공하는 분석 기능을 사용하시기 위해서는, 게임에서 로그를 남길 때 사용하는 MongoDB의 버전이 3.0 이상이어야 합니다.

12.1. 각 로그 엔트리에서의 필수 필드들

아이펀 디플로이가 로그 시간과 로그 종류를 판단하기 위해서 다음의 두 필드는 로그의 종류에 상관없이 공통으로 기록을 하셔야 합니다.

  • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다. MongoDB 에 저장하실 때는 Date 타입으로 저장해 주셔야 합니다.

Tip

_ts 를 UTC 시간으로 저장하는 이유는 게임이 여러 타임존에 걸쳐서 서비스되는 경우를 대비하기 위함입니다. 각 사용자는 아이펀 디플로이 자기 계정 설정에서 타임존을 변경할 수 있고, 로그를 검색했을 때는 아이펀 디플로이가 UTC 시간을 이 타임 존에 맞춰서 표시해줍니다.

  • _type: 로그 종류에 해당합니다. 필수 로그인 경우 아래에 각 로그 타입별로 써야 하는 타입 문자를 기재했습니다.

12.2. 통계 분석 기능을 위한 필수 로그

아이펀 디플로이의 통계 분석 기능을 위해서는 몇몇 로그는 정해진 MongoDB colleciton 에 정해진 field 들을 저장해주어야 합니다.

12.2.1. 새로운 유저 가입

  • 설명: 신규 유저가 가입할 때 남기는 로그입니다. NRU (Newly Registered Users) 를 계산하는데 이용됩니다.
  • MongoDB collection: AccountRegisterApp
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: AccountRegisterApp 라고 기록하면 됩니다.
    • account_id: 새로 등록한 사용자 계정 아이디를 기록하면 됩니다.

12.2.2. 유저 로그인

  • 설명: 사용자가 로그인할 때 기록합니다. DAU, Retention Rate 을 계산할 때 이용됩니다.
  • MongoDB collection: AccountLoginApp
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: AccountLoginApp 라고 기록하면 됩니다.
    • account_id: 로그인한 유저 아이디를 기록하시면 됩니다.

12.2.3. 결제 결과

  • 설명: 결제 결과를 기록합니다. 결제 성공뿐만 아니라 결제 실패와 그에 따른 에러 코드도 기록 가능합니다. 과금 관련 통계 계산에 활용됩니다.

  • MongoDB collection: PaymentEnd

  • 필요한 필드

    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: PaymentEnd 라고 기록하면 됩니다.
    • receipt_id: 환불 처리를 위해 필요한 고유한 영수증의 ID 입니다.
    • account_id: 결제 시도한 유저 아이디를 기록하시면 됩니다.
    • account_type: 결제 시도한 유저 계정의 타입을 기록하시면 됩니다.
    • amount: 결제 액을 기재합니다.
    • system_error: 결제 오류가 발생한 경우 true/false 로 기록합니다.
    • product_id: 결제한 물품의 아이디를 기록합니다.
  • 추가 필드

    product_display_name: 결제한 물품 아이디에 매칭되는 이름을 기록합니다. 만약 해당 필드가 없다면 결제 내역 조회 테이블에선 product_id 가 보이게 됩니다.

12.2.4. 환불 결과

  • 설명: 환불 결과를 기록합니다. 환불 성공뿐만 아니라 환불 실패와 그에 따른 에러 코드도 기록 가능합니다. 과금 관련 통계 계산과 환불된 결제 결과 표시에 활용됩니다.
  • MongoDB collection: PaymentRefund
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: PaymentRefund 라고 기록하면 됩니다.
    • receipt_id: 환불 처리를 위해 필요한 고유한 영수증의 ID 입니다.
    • system_error: 환불 오류가 발생한 경우 true/false 로 기록합니다.
  • 추가 필드
    • error_message: 환불 오류 사항을 기록하면 됩니다. 만약 해당 필드가 없다면 system_error 값에 따라 에러 유무만 표시됩니다.

12.2.5. 새 세션 생성

  • 설명: 사용자가 최초 접속해서 가입이나 로그인조차도 거치지 않은 상태의 신규 세션인 경우 기록합니다.
  • MongoDB collection: SessionOpened
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: SessionOpened 라고 기록하면 됩니다.
    • session_id: 세션의 id 를 기록합니다.

12.2.6. 세션 종료/만료

  • 설명: 사용자 세션이 종료되거나 만료되었을 때 기록합니다.
  • MongoDB collection: SessionClosed
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: SessionClosed 라고 기록하면 됩니다.
    • session_id: 세션의 id 를 기록합니다.

12.2.7. 동접

  • 설명: 게임에 접속한 유저의 수를 시간별로 기록합니다.
  • MongoDB collection: ConcurrentUser
  • 필요한 필드
    • _ts: 이 로그가 생성된 시점의 타임스탬프입니다. UTC 기준이어야 합니다.
    • _type: ConcurrentUser 라고 기록하면 됩니다.
    • cu: _ts 시점에 게임을 플레이중인 유저의 수를 기록합니다.

12.3. 게임 서버에서 임의로 만드는 로그

통계 분석 기능을 위한 필수 로그 에서 언급한 로그 타입 외에 아이펀 디플로이는 MongoDB 에 쓰이는 로그에 대해서 신경 쓰지 않습니다. 따라서 게임 서버에서는 자유롭게 MongoDB 에 로그를 추가할 수 있습니다.

단, 게임에서 사용하는 로그라고 하더라도 각 로그 엔트리에서의 필수 필드들 에 언급한 필드들은 추가해주셔야 합니다. 이 필드들은 아이펀 디플로이 대쉬보드에서 로그 검색 기능을 이용할 때 로그를 시간 순으로 정렬하거나, 로그 종류 별로 필터를 거는 데 필요하기 때문입니다.

12.4. 로그 연동 상태 확인

게임 서버에서 로그를 생성하기 시작하면, 아이펀 디플로이는 이 로그 DB서버에 필요한 로그가 모두 존재하는지를 확인하고, 연동 상황을 표시해줍니다.

디플로이먼트 설정 을 눌러서 나오는 화면에서, 사이드바에서 통계 연동 상태 메뉴를 클릭하면 다음과 같은 화면이 나옵니다. 각 로그 타입별로 필드들이 제대로 생성되고 있는지가 표시되며, API 에서와 마찬가지로 녹색은 제대로 연동된 것, 빨간색은 필드가 빠진 것임을 뜻합니다.

_images/deployment-mgmt-08.png

그림: 디플로이 로그 연동 상태 확인 화면

Important

사전에 호출해봄으로써 연동이 됐는지를 알 수 있는 API 연동과는 달리, 로그 연동은 게임 서버가 실제로 로그를 생성하기 시작한 뒤에나 정확히 확인할 수 있게 됩니다. 그러니 로그가 없어서 처음에 빨간색으로 표시되더라도, 이후 로그가 생성됨에 따라 녹색으로 변경되어 표시될 수 있습니다.