경합 조건
경합 조건은 결과가 여러 이벤트의 순서나 타이밍에 따라 달라질 때 발생합니다. 예를 들어, 원하는 이벤트 순서가 “이벤트 A” 다음에 “이벤트 B”인데, 때로는 “이벤트 A”가 먼저 오고 때로는 “이벤트 B”가 먼저 오는 경우, 이를 경합 조건이라고 합니다. 이러한 이벤트들이 공유 리소스나 데이터에 접근하기 위해 경쟁하기 때문에 예상치 못한 결과나 오류가 발생할 수 있습니다.
Braze에서 경합 조건은 사용자 데이터나 이벤트를 기반으로 여러 동작이 동시에 트리거될 때 발생할 수 있습니다. 예를 들어, 사용자가 여러 캠페인을 트리거하면(뉴스레터 가입이나 구매 등) 올바른 순서로 메시지를 받지 못할 수 있습니다.
경합 조건의 유형
가장 일반적인 경합 조건 유형은 다음과 같은 작업을 수행할 때 발생할 수 있습니다:
- 신규 사용자 타겟팅
- 여러 API 엔드포인트 사용
- 동작 기반 트리거와 오디언스 필터 매칭
다음 시나리오를 고려하고 이러한 경합 조건을 방지하기 위한 모범 사례를 구현하세요.
시나리오 1: 신규 사용자 타겟팅
Braze에서 가장 일반적인 경합 조건 중 하나는 새로 생성된 사용자를 타겟으로 하는 메시지에서 발생합니다. 예상되는 이벤트 순서는 다음과 같습니다:
- 사용자가 생성됩니다.
- 동일한 사용자가 즉시 메시지의 타겟이 되거나, 커스텀 이벤트를 수행하거나, 커스텀 속성을 기록합니다.
그러나 일부 경우에는 두 번째 이벤트가 먼저 트리거됩니다. 이는 아직 존재하지 않는 사용자에게 메시지를 보내려고 시도한다는 것을 의미합니다. 결과적으로 사용자는 해당 메시지를 받지 못합니다. 이는 이벤트나 속성에도 적용되며, 아직 생성되지 않은 고객 프로필에 이벤트나 속성을 기록하려고 시도하는 경우에도 마찬가지입니다.
인앱 메시지의 경우, 인앱 메시지가 트리거되기 전에 사용자의 기기에 로드되어야 합니다. 트리거 이벤트가 온보딩 프로세스의 일부이거나, 사용자가 첫 번째 세션의 일부로 커스텀 이벤트에 대한 세그먼트에서 이탈하는 경우, 사용자가 인앱 메시지를 보지 못할 가능성이 높습니다.
인앱 메시지
인앱 메시지의 경우 상황이 더 복잡할 수 있습니다. 인앱 메시지는 트리거되기 전에 SDK에 전달되고 캐시되어야 하며, 이는 일반적으로 세션 시작 시 이루어집니다. 트리거 이벤트가 사용자 생성 프로세스의 일부이거나, 인앱 메시지 캠페인이 사용자가 첫 번째 세션 동안 오디언스 기준을 충족하기 전(또는 더 이상 충족하지 않은 후)에 전달되는 경우, 사용자가 인앱 메시지를 보지 못할 수 있습니다.
모범 사례
지연 도입
새 사용자가 생성된 후, 타겟 캠페인이나 캔버스를 보내기 전에 지연을 추가할 수 있습니다. 이 타이밍 지연을 통해 고객 프로필이 생성되고 메시지 수신 자격을 결정할 수 있는 관련 속성이 업데이트될 수 있습니다.
예를 들어, 사용자가 앱에 등록한 후 24시간 후에 프로모션 오퍼를 보낼 수 있습니다. 또는 사용자를 생성하거나 커스텀 속성을 기록하는 경우, 이 경합 조건을 방지하기 위해 프로세스를 진행하기 전에 1분의 지연을 추가할 수 있습니다.
새 사용자가 캔버스에 진입하도록 트리거하는 특정 커스텀 이벤트에 대해 Braze SDK에서도 이 지연을 추가할 수 있습니다.
시나리오 2: 여러 API 엔드포인트 사용
속도와 유연성을 극대화하기 위해 비동기 처리를 사용합니다. 이는 API 호출이 별도로 전송될 때, 전송된 순서대로 처리된다는 것을 보장할 수 없다는 것을 의미합니다.
여러 API 엔드포인트를 사용할 때도 이 경합 조건이 발생할 수 있는 몇 가지 시나리오가 있습니다:
- 별도의 API 엔드포인트를 사용하여 사용자를 생성하고 캔버스 또는 캠페인을 트리거하는 경우
/users/track엔드포인트에 여러 개의 별도 호출을 하여 커스텀 속성, 이벤트 또는 구매를 업데이트하는 경우
/users/track 엔드포인트를 사용하여 사용자 정보를 Braze에 전송하면, 처리하는 데 몇 초가 걸릴 수 있습니다. 이는 /users/track과 /campaign/trigger/send와 같은 메시징 엔드포인트에 동시에 요청이 이루어질 때, 메시지가 전송되기 전에 사용자 정보가 업데이트된다는 보장이 없다는 것을 의미합니다.
사용자 속성과 이벤트가 동일한 요청으로 전송되는 경우(/users/track 또는 SDK에서), Braze는 이벤트를 처리하거나 메시지를 전송하기 전에 속성을 먼저 처리합니다.
모범 사례
여러 엔드포인트를 사용할 때 요청을 하나씩 보내기
여러 엔드포인트를 사용하는 경우, 각 요청이 완료된 후 다음 요청을 시작하도록 요청을 순차적으로 보낼 수 있습니다. 이렇게 하면 경합 조건의 가능성을 줄일 수 있습니다. 예를 들어, 사용자 속성을 업데이트하고 메시지를 보내야 하는 경우, 먼저 고객 프로필이 완전히 업데이트될 때까지 기다린 후 엔드포인트를 사용하여 메시지를 보내세요.
스케줄된 메시지 API 요청을 보내는 경우, 이러한 요청은 별도로 이루어져야 하며, 스케줄된 API 요청을 보내기 전에 사용자가 생성되어야 합니다.
트리거와 함께 핵심 데이터 포함
여러 엔드포인트를 사용하는 대신, campaign/trigger/send 엔드포인트를 사용하여 단일 API 호출에 사용자 속성과 트리거 등록정보를 포함할 수 있습니다.
이러한 오브젝트가 트리거와 함께 포함되면, 메시지가 트리거되기 전에 속성이 먼저 처리되어 잠재적인 경합 조건을 제거합니다. 트리거 등록정보는 고객 프로필을 업데이트하지 않으며, 메시지의 컨텍스트에서만 사용된다는 점에 유의하세요.
POST: Track users (sync) 엔드포인트 사용
/users/track/sync/ 엔드포인트를 사용하여 커스텀 이벤트와 구매를 기록하고 고객 프로필 속성을 동기적으로 업데이트할 수 있습니다. 이 엔드포인트를 사용하여 고객 프로필을 동시에 단일 호출로 업데이트하면 잠재적인 경합 조건을 방지하는 데 도움이 됩니다.
This endpoint는 현재 베타 상태입니다. 베타 참여에 관심이 있으시면 Braze 계정 관리자에게 문의하세요.
시나리오 3: 동작 기반 트리거와 오디언스 필터 매칭
또 다른 일반적인 경합 조건은 동작 기반 캠페인이나 캔버스를 오디언스 필터와 동일한 트리거로 구성할 때 발생할 수 있습니다(예: 변경된 속성 또는 수행된 커스텀 이벤트). 사용자가 트리거 이벤트를 수행하는 시점에 오디언스에 포함되지 않을 수 있으며, 이 경우 캠페인을 받지 못하거나 캔버스에 진입하지 못합니다.
모범 사례
지연 후 오디언스 확인
트리거 기준을 포함하는 오디언스 필터를 사용하지 않으려면, 전달 전에 오디언스를 확인하는 것을 권장합니다. 예를 들어, 캔버스 메시지 단계에서 전달 유효성 검사를 사용하여 메시지 전송 시 오디언스가 전달 기준을 충족하는지 추가로 확인할 수 있습니다. 또한 캔버스의 종료 기준을 활용하여 사용자 여정 중 언제든지 기준을 충족하는 사용자를 종료시킬 수 있습니다.
캠페인의 경우, 종료 이벤트를 사용하여 트리거 이벤트가 있는 캠페인이 지연 중에 종료 이벤트를 수행하는 사용자에게 메시지를 중단할 수 있습니다.
트리거 이벤트와 함께 고유한 필터 사용
필터를 구성할 때 “만약을 위해” 중복 필터를 추가하고 싶을 수 있습니다. 그러나 이러한 중복은 더 많은 문제를 초래할 수 있습니다. 대신, 가능한 한 트리거를 포함하는 필터를 사용하지 마세요. 이것이 경합 조건을 방지하는 가장 안전한 방법입니다.
예를 들어, 캠페인 트리거가 “구매를 했음”이고 오디언스 필터가 “구매를 한 적이 있음”인 경우, 이 중복이 경합 조건을 유발할 수 있습니다.
트리거 이벤트가 업데이트되었다고 가정하는 오디언스 필터 피하기
이 모범 사례는 트리거 이벤트와 중복 필터를 피하는 것과 유사합니다. 일반적으로 트리거 이벤트가 고객 프로필에 업데이트되었다고 가정하는 필터는 실패합니다.
Liquid 중단 사용(속성만 해당)
캠페인과 캔버스 단계에서 Liquid 중단을 사용하면 진입 스케줄에서 트리거 속성을 포함하는 오디언스 필터를 사용하지 않을 수 있습니다. 예를 들어, 배열 속성 “좋아하는 색상”이 있고 속성 배열을 임의의 값으로 업데이트하는 모든 사용자를 타겟으로 하면서, 업데이트가 완료된 후 배열에 “파란색”이 포함된 사용자도 타겟으로 하고 싶다고 가정해 보겠습니다. 이 예시에서 오디언스 필터를 사용하면 경합 조건이 발생하여 처음으로 배열에 “파란색”을 추가하는 사용자를 놓칠 수 있습니다.
이 경우, 캠페인에서 트리거 지연을 구현하거나 캔버스에서 지연 단계를 사용하여 고객 프로필이 일정 시간 동안 업데이트되도록 한 다음, 다음과 같은 Liquid 중단 로직을 사용할 수 있습니다:
1
2
3
4
{%assign colors={{custom_attribute.$(Favorite Color)|split:”,”}}%}
{%unless colors contains ‘Blue’%}
{%abort_message(Blue not present)%}
{%endunless%}
사용자 데이터 관리 방식 확인
캔버스 진입 평가 중에 경합 조건이 발생하면, 사용자가 진입하지 않아야 할 캔버스에 진입할 수 있습니다. 예를 들어, 사용자의 프로필이 오디언스에 포함되도록 설정된 후, 캔버스가 사용자를 대기줄에 넣은 이후에 더 이상 오디언스에 적합하지 않도록 업데이트될 수 있습니다.
사용자가 같은 초 내에 캔버스 진입 이벤트를 여러 번 트리거하는 경우, Braze는 해당 초에 대해 하나의 진입만 허용합니다(재진입이 활성화된 경우에도). 이는 중복 진입을 방지하므로, 총 캔버스 진입 수가 총 트리거 이벤트 수보다 적을 수 있습니다.
사용자 데이터가 어떻게 관리되고 업데이트되는지, 특히 특정 속성이 언제 어떻게 업데이트되는지(SDK, API, 배치 API 및 기타 방법 등) 확인하는 것을 권장합니다. 이를 통해 사용자가 캠페인이나 캔버스에 진입한 이유와 고객 프로필이 업데이트된 시점을 파악하고 명확히 하는 데 도움이 됩니다.