Braze를 활용한 개인화 CRM 기반 그로스 마케팅
이전 글에서는 Amplitude 중심으로 29CM의 CRM 개인화 전략을 다루어 보았다.
적절한 지표를 선정하고, 지표의 정확성과 모수의 확보 사이의 균형을 맞추어
더 많은 유저에게 개인화 서비스를 제공하는 과정을 다루었다.
https://brunch.co.kr/@ericpm/19
이번 글부터는 같은 발표의 후반부,
29CM가 실제 유저 메시지에 어떻게 Braze를 활용해 개인화를 구현했는지를 구체적으로 살펴보려 한다.
Amplitude에서 유저의 행동을 분석했다면,
Braze에서는 그 행동에 따라 딱 맞는 메시지를 자동으로 만들고 보내는 실제 액션을 수행할 수 있다.
유저가 어떤 브랜드를 좋아했는지
어떤 상품을 장바구니에 담았는지
어떤 혜택에 반응했는지
위와 같은 고객 시그널과 혜택 데이터를 연결해,
1:1 맞춤형 메시지를 자동으로 생성하고 발송하는 구조가 어떻게 작동하는지를 다루고자 하는데,
CRM을 고도화하고 싶은 마케터라면 반드시 참고할 만한 사례가 될 것 같다.
이제부터, 3개의 Key로 나누어 이 과정을 정리해보고자 한다.
먼저 29CM가 Braze를 활용하는 첫 번째 단계는
데이터를 활용할 수 있는 형태로 수집되도록 세팅하는 것이다.
아래와 같이 Nested Attributes로 하나하나의 상품 정보를 위계에 맞게 수집하여 활용한다.
여기서, Nested Attributes 데이터 타입이 무엇일까?
Nested Attributes는 Braze의 사용자 프로파일이나 이벤트에 저장되는 속성값 중,
단순 문자열이나 숫자가 아닌 JSON 형태의 중첩 구조를 허용하는 데이터 타입이다.
쉽게 말해, 하나의 데이터에 여러 가지 속성을 묶어서 저장할 수 있고,
그 데이터를 원하는 타이밍과 형태로 가져올 수 있으며,
이 데이터들에 위계를 매겨 더 중요하게 활용할 데이터를 정할 수도 있다.
다음과 같은 형태로 하나의 key 아래에 여러 속성을 가지는 오브젝트 형태로 저장된다.
"attributes": {
"최근 구매 상품": {
"상품명": "Wander Pouch (Pink)",
"브랜드코드": "78910",
"카테고리1": "가방",
"카테고리2": "파우치"
}
}
이렇게 Nested 형태로 데이터를 수집하면, Braze에서 다양한 형태로 활용할 수 있는데,
3가지 정도로 정리할 수 있다.
사용자 정보를 Key로 설정한다면,
사용자가 본 상품, 찜한 상품, 장바구니 담은 상품 등을 각각의 리스트로 Nested구조로 저장할 수 있다.
그러니, 유저를 본 상품, 찜한 상품 등 다양한 데이터로 타겟할 수 있는 데이터 체계가 완성된다.
이러한 데이터 체계가 완성되면, 반복되는 구매, 카테고리 이동, 장바구니 담기 등의 액션을
순서에 따라, 비율에 따라 퍼널로 만들 수 있고,
이렇게 퍼널을 분석하여 유저가 이탈하는 구간을 확인할 수도 있다.
예를 들어, 카테고리 뷰까지의 전환율은 좋으나 장바구니 담기로 넘어가는 이탈율이 높으니,
카테고리 뷰에서의 장바구니 담기 버튼에서의 UX나 혜택, 메시지에 문제가 있을 것이라는
가설을 수립하고, 실험을 통해 개선할 수 있다.
또한, 유저의 정보가 다각도로 저장되기 때문에 다각적인 분석이 가능하다.
예를 들어 고객이 '에코백' 제품을 봤다면, 단순히 에코백을 본 사실뿐 아니라
아래와 같이 다양한 데이터가 저장된다.
{
"최근_본_상품": {
"상품명": "에코백",
"브랜드": "제로웨이스트",
"카테고리": "가방",
"색상": "베이지"
}
}
이와 같이 데이터를 저장해두면 나중에 유저가 어떤 브랜드/카테고리/컬러를 좋아하는지
데이터로 분석하고 타겟팅할 수 있다.
최근 문자나 카카오톡 광고 메시지를 보면, ~~를 눈여겨보신 ~~님과 같이,
내가 본 아이템과 내 이름, 정보가 언급되어 있는 것을 볼 수 있다.
이렇게 받는 사람의 정보에 맞게 메시지를 개인화하는 것 또한,
Braze 툴의 liquid 문법을 통해 호출할 수 있다.
예를 들어, 고객이 최근에 본 상품의 이름을 메시지에 넣고 싶다면,
{{ attributes.최근_본_상품.상품명 }}
이렇게 쓰면, 최근 본 상품에 따라 고객 A는 에코백, 고객 B는 슬링백이 메시지에 들어간다.
그리고 여러 상품의 브랜드와 상품명을 활용할 수도 있는데,
다음과 같이 세팅하면,
{% for product in attributes.최근_본_상품_리스트 %}
- {{ product.상품명 }} by {{ product.브랜드명 }}
{% endfor %}
고객에게는 다음과 같이 브랜드에서 본 제품을 메시지에 넣을 수 있다.
- 에코백 by 제로웨이스트
- 미니백 by 파타고니아
- 토트백 by 무신사스탠다드
즉, 정리하면, liquid 문법은 고객마다 다르게 메시지를 보여주기 위해,
Nested 데이터에 접근하는 코드 문법이다.
이렇게 유저의 데이터를 개인화 가능한 형태로 적재했다면,
이제부터는 제공할 수 있는 혜택을 데이터화해야 한다.
Braze에는 Catalogs라는 기능이 있는데,
엑셀처럼 생긴 "데이터 표"를 Braze 안에 업로드해서 활용할 수 있는 기능이다.
예를 들면, 이 표 안에는 쿠폰, 상품, 혜택, 썸네일, 할인율 등의 정보가 줄줄이 들어있고,
Braze는 여기에 있는 정보를 유저 상황에 맞춰 자동으로 꺼내서 활용할 수 있다.
예를 들면, 다음과 같은 데이터가 적재된다.
- 쿠폰명 : 여름 시즌 무신사 단독 쿠폰
- 시작일 : 5/1
- 종료일 : 5/7
- 브랜드명 : ABC
- 할인율 : 15%
- 브랜드 코드 : 12345
이러한 데이터를 저장하는 기능이 Catalogs이다.
이 Catalogs가 연계되면 할 수 있는 일이 더 많아진다.
앞에서 저장한 Nested 데이터를 보면, A고객이 최근 본 브랜드가 ABC라는 데이터가 저장되어 있다.
그러면, Braze를 통해 다음과 같은 의사결정을 하거나, 자동화하는 것도 가능하다.
이 고객은 ABC 브랜드를 최근에 봤네?
그럼 ABC 브랜드의 쿠폰이 있는지 보고, 유저에게 제공하자.
그러면, Catalogs에 있는 쿠폰 데이터에서 ABC 브랜드와 연결된 혜택을
자동으로 매칭하여 제공할 수 있다.
좀 더 세부적으로는, Liquid 문법으로 메시지에 자동으로 삽입할 수도 있는데,
{{ catalog.musinsa_coupon.쿠폰명 }}
{{ catalog.musinsa_coupon.할인율 }}
이 코드를 넣어두면,
고객 A에겐 “무신사 여름 쿠폰 – 15% 할인”
고객 B에겐 “MLB 브랜드 단독 쿠폰 – 10% 할인”
이런 식으로 개인 맞춤 혜택 메시지가 자동 생성되어 발송된다.
이렇게 두 가지 기능만 활용해도, 분명히 뛰어난 고객 경험과 마케팅 개인화를 제공할 수 있다.
위의 표와 같이, 고객의 행동을 데이터로 저장하고, 그를 기반으로
Catalogs에 있는 적절한 혜택을 자동화하여 맞춤형으로 제공할 수 있게 된다.
그러면, 이제부터는 조금 더 고도화된 개인화가 필요한데,
바로, 더 구매와 직결되는, 전환 가능성이 높은 행동을 더 우선순위화하는 것이다.
고객은 브랜드에서 다양한 행동을 한다.
1. 상품을 장바구니에 담고
2. 좋아요를 누르고
3. 그냥 둘러본다.
이 세 가지 행동의 구매 가능성은 분명히 다르다.
장바구니에 담는 행동이 구매의 전 단계로서 전환 가능성이 가장 높고,
찜이 그 다음, 그냥 구경하는 것은 전환 가능성이 가장 낮을 것이다.
이렇게 다양한 행동 신호(시그널)을 분석해서
우선순위를 정한 다음,
가장 전환 가능성이 높은 액션을 한 유저에게 우선적으로 메시지를 제공하고,
그 액션을 하지 않은 유저는 다음, 다다음으로 넘어가는 방식이다.
나는 이 우선순위 설정 단계가 그로스 마케터의 역량을 좌우하는 단계라고 생각한다.
툴을 활용하고 세팅하는 것은 조금만 배우면 할 수 있지만,
실제로 성과와 직결되는, 개인화에 적절한 데이터를 찾고 선정하며 시나리오화하는 과정은
문제를 해결하고자 고민하고 데이터를 적절히 해석하는 역량이 필요하기 때문이다.
조금 더 나아가자면, 이러한 시그널의 우선 순위가 유저 코호트에 따라 다를 수도 있다.
예를 들어, 단순히 “장바구니 > 찜 > 뷰”라는 일반 순서를 그대로 적용하는 것보다,
데이터를 세분화해 보면 시그널의 가중치는
고객군(cohort)에 따라 완전히 다르게 작동한다는 사실을 찾을 수 있을 것이다.
예를 들어, 다음과 같이 코호트가 나뉠 수 있다.
20대 남성 고객은 2회 이상 상품을 조회한 뒤 구매로 전환되는 패턴이 강하고,
30대 여성 고객은 장바구니 추가 후 평균 2일 내 구매가 이루어지는 패턴을 보일 수 있다.
고가 브랜드군을 선호하는 고객은 찜보다는 ‘브랜드 홈 진입 여부’가 더 강한 시그널이 될 수도 있다.
이럴 경우, 이 세 코호트에는 각각 다른 시그널 우선순위가 적용되어야 한다.
이처럼, 데이터 기반 개인화 전략을 제대로 수립하려면
전환율부터 시작해서, 코호트를 상세히 나누어 이탈률, 전환 지연 시간(Time-to-Conversion),
이벤트 간 전환율(Funnel Transition Rate) 등을 종합적으로 분석하고,
각 코호트별 가장 구매와 잘 이어질 수 있는 시그널을 맞춤형으로 설계하는 것이 중요하다.
다시 돌아와서, 리퀴드 예시문으로 실제 구현 방법을 좀 더 정리해 보자면,
{% if cart.cataloging == '장바구니' %}
{{ custom_attributes.장바구니상품.브랜드 }}
{% elsif like.cataloging == '좋아요' %}
{{ custom_attributes.좋아요상품.브랜드 }}
{% else %}
{{ custom_attributes.관심상품.브랜드 }}
{% endif %}
세 가지 조건문이 이어져 있는 형태이다.
고객이 장바구니에 담은 상품이 있으면 → 그 브랜드/상품 정보로 메시지를 구성
없으면 좋아요(찜)한 상품으로 대체
그것도 없으면 그냥 본 상품 정보로 대체
즉, 가장 '구매 가능성 높은' 행동 데이터를 먼저, 최대한 많이 사용해서 메시지를 만드는 것이다.
유저가 장바구니에 담은 제품이 있는데, 좋아요 누른 제품이나 뷰만 한 제품에 대해
혜택을 제공한다면 당연히 구매로 이어질 확률이 낮으니까.
그리고, 시그널 우선순위 타겟팅 외에도
Connected Content 기능을 통해
실시간으로 외부 서버에서 할인율이나 썸네일 이미지를 바로 가져와서 메시지에 넣을 수 있다.
다음 예시를 보면, Connected Content 기능이 적용되어 있다.
위의 예시와 같이
예를 들어 고객이 좋아요한 브랜드가 "아워코모스"라면
서버에 "아워코모스의 최신 쿠폰 할인율"을 요청하고
응답받은 10+12% 혜택 정보를 메시지에 동적으로 삽입하는 과정이다.
종합하면, 리퀴드 코드를 활용해서 다음과 같이 개인화 메시지를 세팅할 수 있다.
내가 {{type}} {{brand}} {{cat}}
(광고) 바캉스 위크 {{dc_rate}}+12% 혜택이 시작됐어요.
이렇게 설정해 놓으면, API 호출을 통해 다음과 같은 실제 메시지가 발송된다.
내가 좋아요한 아워코모스 팬츠
(광고) 바캉스 위크 10+12% 혜택이 시작됐어요.
즉, 하나하나 챙기지 않아도, 고객의 관심 브랜드나 장바구니 담기 등 행동에 따라
자동으로 달라지는 1:1 개인화 메시지가 완성되는 것이다.
이번 파트에서는 발표에서 소개된 ‘개인화 2.0’ 전략을 중심으로,
유저 지표 설정 → Braze 기반의 데이터 수집 및 적재 → 혜택 메타데이터 연계를 거쳐,
궁극적으로 자동화된 맞춤형 메시지 발송까지 이어지는 엔드 투 엔드 개인화 시나리오를 다뤄보았다.
이러한 전략은 단순히 툴을 잘 쓰는 법을 넘어서,
'지금 이 유저에게 어떤 메시지를 보내야 할까?'
'이 메시지가 유저의 전환을 끌어낼 수 있는가?'
라는 그로스 마케팅에서 풀어야 하는 문제에 가장 가깝게 다가가는 방법이기도 하다.
이러한 개인화 전략은 Braze를 도입하였다면 당연히 알아야 할 내용이며,
도입하지 않았더라도 유저에게 보내는 메시지를 개인화하여 전환율을 높이고자 한다면
참고해 볼 만한 전략으로 보인다.
풀 버전 영상은 다음 링크를 통해 보시는 것도 추천드린다.
https://www.youtube.com/watch?v=7kWPinAnykI&list=LL&index=2
그러면, 다음 글에서는 개인화 3.0으로서
개인화 메시지를 넘어 유저가 보는 페이지와 구매 경험 전체를 개인화하는 내용을
다루어 보고자 한다.