menu
Is this helpful?

# User Identification Rules(유저 식별 규칙)

# 유저 식별 규칙

이 문서에서는 TE (ThinkingEngine)에서 채택하고 있는 유저 식별 규칙을 설명하고, 2명의 유저를 식별하는 방법과 로그인 상태와 비로그인 상태의 동일한 유저를 구분하는 규칙에 대해 설명합니다.

포인트

    1. 유저는 식별을 위해 세 가지 ID를 가질 것입니다
       즉:
        방문자 ID      #distinct_id   로그인하지 않은 상태의 유저 ID
        계정 ID        #account_id    로그인 상태의 유저 ID
        TE 유저 ID    #user_id         TE에 의한 유저의 유니크 ID

    2. 유저를 식별하는 가장 중요한 ID는 유저 ID입니다
       각 데이터 조각에서의 유저 ID는 계정 ID와 방문자 ID에서 생성됩니다
       생성은 계정 ID를 우선시하며, 계정 ID가 존재하지 않는 경우 방문자 ID를 기반으로 합니다

    3. TE 배경이 새로운 계정 ID를 포함하는 데이터를 받을 때, 이는 현재 데이터의 방문자 ID에 바인딩됩니다.
       방문자 ID가 존재하고 다른 계정 ID에 의해 바인딩되지 않은 경우, 바인딩은 성공하고 두 ID로 식별된 데이터는 동일한 유저 ID를 사용합니다
       방문자 ID가 존재하지 않거나 다른 계정 ID에 의해 바인딩된 경우, 바인딩은 실패하고 더 이상 바인딩되지 않습니다, 바인딩되지 않은 ID는 NULL입니다

    4. 유저 ID, 계정 ID 및 방문자 ID는 모두 서로 대응하며, 하나 이상의 번들이 있는 경우는 없습니다

유저는 다른 디바이스에서 앱을 사용할 수 있으며, 로그인하지 않은 상태에서 앱을 사용할 수도 있기 때문에, 정확한 유저 식별이 매우 복잡해집니다. 이 문서에서는 유저 식별 규칙의 세부 사항을 설명하고 이해를 돕기 위해 예를 드립니다.

# 1.유저 식별 규칙

TE에서는 주로 'Guest ID(#distinct_id)', 'Account ID(#account_id)' 및 'TE user ID(#user_id)'의 3가지 ID를 사용하여 유저 식별이 이루어집니다. 이 섹션에서는 각 ID의 규칙에 대해 설명합니다.

# 1.1 Guest ID

Guest ID는 로그인하지 않은 상태에서의 유저 ID이며, 유저가 SDK를 통해 데이터를 전송할 경우, 앱을 설치할 때 Guest ID가 자동으로 부여됩니다. 수동으로 Guest ID를 생성해야 하는 경우, 이벤트를 업로드하기 전에 identify로 설정합니다. Guest ID는 SDK에 저장되므로, 여러 번 생성할 필요가 없습니다. 이벤트 업로드 후의 identify에서의 Guest ID 변경은 유저의 불일치나 중복을 초래할 수 있으므로, 주의하십시오.

login으로 Accout ID가 생성될 때까지, 해당 유저의 데이터에 연결된 ID는 #distinct_id만 있고, #account_id는 없습니다. 따라서, 해당 데이터는 #distinct_id를 사용하여 User ID에 연결합니다.

# 1.2 Account ID

Account ID는 유저가 로그인하거나 등록에 성공했을 때, login을 호출하여 Account ID를 설정할 수 있습니다. 이 시점에서 데이터에는 #account_id와 #distinct_id가 SDK에 저장됩니다. Account ID를 설정하기 위해 login을 여러 번 호출하면, 마지막으로 받은 값이 Account ID로 가져옵니다. Account ID를 삭제하기 위해 logout을 호출할 수 있고, 삭제된 후의 데이터에서는 #distinct_id만 저장됩니다. 수신 데이터가 #account_id를 가지고 있는 경우, 백그라운드는 #account_id를 따라 우선적으로 User ID에 연결합니다.

# 1.3 TE User ID

TE User ID는 유저를 식별하는 유일한 ID입니다. TE가 데이터를 수신하면, Account ID와 Guest ID에 기반하여 연결된 User ID를 검색하고, 각 데이터의 주 키로 삽입하거나, User Table에서 주 키에 해당하는 프로필을 검색하여 유저 속성을 설정합니다.먼저, Account ID가 존재하는 경우 우선적으로 Account ID에 연결된 User ID를 검색합니다. 다음으로 Account ID가 존재하지 않는 경우에는, Guest ID에 연결된 User ID를 검색합니다.

어느 경우에도 User ID를 찾을 수 없는 경우에는, 새로운 User ID가 생성되고, Account ID 또는 Guest ID와 연결됩니다.

어떤 경우에도, 세 개의 ID는 각각 연결됩니다. Guest ID와 Account ID의 연결에 대해서는 다음 섹션에서 설명합니다.

# Guest ID와 Account ID의 연결

TE는 새로운 Guest ID로부터 데이터를 수신하면, Guest ID를 기반으로 User ID를 생성하고, Guest ID와 연결합니다. 한편, 새로 로그인한 유저에 관한 데이터를 수신한 경우에, Guest ID가 이미 User ID에 연결되어 있을 가능성이 있습니다. 그것을 확인한 후에 Guest ID와 Account ID를 연결할지를 판단해야 합니다. 그 때에 다음 3가지 시나리오가 발생할 수 있습니다.

  1. Guest ID와 User ID가 연결되어 있지 않은 경우, 로그인을 해당 유저가 처음으로 보낸 이벤트로 간주할 수 있습니다. 게스트 상태에서 이벤트가 전혀 발생하지 않은 경우, 새로운 User ID가 생성되고, Account ID와 Guest ID에 연결됩니다.
  2. Guest ID와 User ID가 연결되어 있고, Account ID와는 연결되어 있지 않은 경우, 즉, 게스트 상태의 유저가 로그인한 유저로 변경된 경우, Account ID는 Guest ID와 대응하는 User ID에 연결되고, 새로운 유저는 생성되지 않습니다.
  3. Guest ID와 UserID가 연결되어 있고, Account ID와도 연결되어 있는 경우, 즉, 로그인하고 있는 유저가 사용하던 디바이스에 새로운 유저가 계정을 등록한 경우, Account ID는 Guest ID를 연결하지 않고, 새로운 User ID를 생성하여 Account ID와 연결됩니다.

단, 계정 ID와 유저 ID의 제약 판정은, 새로운 계정 ID를 포함하는 데이터를 백그라운드에서 수신한 경우에 한 번만 발생하므로, 즉, 계정 ID의 제약 판단은 한 번만 이루어지므로, 3번째 경우에서는, 계정 ID는 영구적으로 방문자 ID를 제약할 수 없게 됩니다.

# 케이스 스터디

TE의 유저 식별 규칙을 더 잘 이해하기 위해, 이 섹션에서는 규칙이 어떻게 작동하는지 케이스 스터디를 보여줍니다. 각각, 데이터를 수신한 후에 User ID를 설정하는 시나리오를 보여줍니다. 각 단계에서의 #user_id와 다른 ID와의 연결 원칙을 이해해 주세요.

# #distinct_id만의 경우

#distinct_id만의 경우에는, #distinct_id만이 생성됩니다.

단계 #account_id #distinct_id #user_id
1 null A 1
2 null B 2
3 null C 3
4 null A 1

위의 경우에서는, 단계1에서 단계3까지 각각 3개의 새로운 #distinct_id를 받고, 3개의 새로운 #user_id가 생성됩니다. 그 후 단계4에서, #user_id = 1은 #distinct_id = A에 연결됩니다. 이것은 단계1에서 생성된 #user_id = 1로 간주되고 있음을 의미합니다.

# #distinct_id와 #user_id에 연결되어 있고, #account_id에는 연결되어 있지 않은 경우

#distinct_id 와 #user_id 에 연결되고, #account_id 와는 연결되지 않은 경우에는, 받은 #account_id 는 #account_id 와 #distinct_id 에 연결됩니다.

단계 #account_id #distinct_id #user_id
1 null A 1
2 A A 1

위의 경우에서는, 단계1에서 #distinct_id 와 #user_id 에 연결되고, #account_id 와는 연결되지 않습니다. 즉, 새로운 #distinct_id 를 받고, 새로운 #user_id 가 생성되었습니다. 그 후의 단계2에서는, 새로운 #account_id 를 받은 후, #distinct_id 는 연결되지 않고, 새로운 #account_id 는 #distinct_id 와 연결됩니다.

# #distinct_id 가 #user_id 와 #account_id 둘 다에 연결되어 있는 경우

#distinct_id 가 #user_id 와 #account_id 둘 다에 연결되어 있는 경우에는, 새로운 #account_id 는 #distinct_id 에 연결되지 않고, 다른 #distinct_id 와 연결됩니다.

단계 #account_id #distinct_id #user_id
1 A A 1
2 B A 2
3 B B 2
4 null B 2
5 null A 1
6 C B 3

위의 경우에서는, Step1에서 #distinct_id = A 와 #account_id = A 가 연결되고, Step2에서는 #user_id = 2 라는 조건만으로는, #distinct_id = A 가 연결되지 않습니다. Step3에서 #distinct_id = B 이고, #account_id = B 라고 통보되었을 경우, #distinct_id = B 는 어떤 #account_id 와도 연결되지 않았기 때문에, 새로이 #account_id = B 와 #user_id = 2 둘 다 연결되어 있습니다.

다음으로 Step4에서는, #distinct_id = B 는 이미 #user_id = 2 와 연결되어 있습니다. 그러나, 그 후에, #distinct_id = B 가 새로이 #account_id = C 를 통보하였을 경우에는, 신규 유저로 간주되고, #user_id = 3 이 새로이 발행됩니다.

최종적인 각 ID의 관계성은 아래와 같습니다.

#account_id #distinct_id #user_id
A A 1
B B 2
C null 3

# 복잡한 시나리오의 분석

이해를 쉽게 하기 위해, 주요 단계의 유저 테이블 구조를 보여드립니다. 이 단계의 설명을 비교함으로써 이해할 수 있습니다.

단계 #account_id #distinct_id #user_id
1 null A 1
2 A A 1
3 B A 2
4 null B 3
5 B B 2
6 C B 3
7 C C 3
8 B C 2
9 D C 4
10 null C 2

#distinct_id = A 와 #account_id = A 가 연결되고, Step2에서 #user_id = 2

  1. #distinct_id = A 가 알려지고, #user_id = 1로 연결됩니다
  2. #account_id = A 가 발행된 경우, #distinct_id = A 가 다른 #account_id와 연결되지 않은 경우, #distinct_id = A 와 #account_id = A, #user_id = 1이 연결됩니다
  3. #account_id = B 가 새로 알려진 경우, #distinct_id = A는 #account_id = A와 연결되어 있으므로, 새로운 #user_id = 2와 연결됩니다. 이 경우 새로운 #distinct_id는 발행되지 않습니다. 이 상황에서의 관계는 다음과 같습니다.
#account_id #distinct_id #user_id
A A 1
B null 2
1. 이 때, #distinct_id = B는 어떤 ID와도 연결되지 않았으므로, 만약 발행된 경우, 새로운 #user_id = 3이 발행되어 연결됩니다. 1. 이 상황에서는, #account_id = B와 #distinct_id = B는 2명의 유저에 속해 있습니다. 이 상황에서의 관계는 다음과 같습니다.
#account_id #distinct_id #user_id
A A 1
B null 2
null B 3
1. #distinct_id = B 상황에서 #account_id = C 가 새로 알려진 경우, #distinct_id = B 와 #account_id = C, #user_id = 3 이 연결됩니다. 이 상황에서의 관계는 다음과 같습니다.
#account_id #distinct_id #user_id
A A 1
B null 2
C B 3
1. #user_id = 3 과 #distinct_id = B 에 연결된 #account_id = C 는 현재 #distinct_id = C 에 대해 작동하지 않습니다. 1. #account_id = B 와 #distinct_id = C 가 알려진 경우, #distinct_id = C 는 다른 #account_id 와 연결되지 않았기 때문에 새롭게 연결되었습니다. 이 상황에서의 관계는 다음과 같습니다.
#account_id #distinct_id #user_id
A A 1
B C 2
C B 3
1. 새로운 #account_id = D로 신규 유저가 로그인한 경우, #distinct_id = C 와 #user_id = 2에 속하므로, 연결할 대상이 없습니다. 이 상황에서의 관계는 다음과 같습니다.
#account_id #distinct_id #user_id
A A 1
B C 2
C B 3
D null 4
1. 마지막 #distinct_id = C는 #user_id = 2와 연결되어 있습니다

이 상황에서의 관계는 다음과 같습니다.

#account_id #distinct_id #user_id
A A 1
B C 2
C B 3
D null 4