비회원 쿠폰 바로구매 버튼 먹통과 파트너 코드 유실 수정
목차
비회원 진입 동선이 무너졌던 이유
이커머스 파트너가 공유한 쿠폰 링크로 비회원이 들어왔을 때, 바로구매 버튼이 먹통이 됨. 로그인 회원은 멀쩡한데 비회원만 클릭해도 아무 반응이 없거나 엉뚱한 페이지로 튕김.
원인 추적해보니 두 갈래였음.
- 쿠폰 상세에서 바로구매 호출할 때 세션의 사용자 식별자를 무조건 참조하고 있었음
- 파트너 추천 파라미터가 로그인 리다이렉트 한 번 거치면 휘발됨
무엇을 고쳤나
쿠폰 쪽 컨트롤러는 비회원도 미리보기 가격이 계산되도록 분기를 추가. 주문 컨트롤러는 비회원 진입 시 로그인 페이지로 보내되, 원래 쿠폰 ID와 파트너 코드를 returnUrl에 담아 살아남게 함.
| 케이스 | 이전 | 이후 |
|---|---|---|
| 회원 + 파트너 링크 | 정상 | 정상 |
| 비회원 + 파트너 링크 | 버튼 무반응 | 로그인 후 바로구매로 복귀 |
| 비회원 + 일반 링크 | 버튼 무반응 | 로그인 후 상세로 복귀 |
상세 페이지 템플릿에서 버튼 disabled 조건도 손봤음. 기존엔 로그인 여부만 체크해서 disabled를 풀어줬는데, 사실 비회원에게도 클릭은 허용해야 함. 클릭 후 처리 분기에서 로그인 유도하는 게 자연스러움.
삽질 포인트
returnUrl 인코딩을 두 번 해버려서 한참 헤맸음. 클릭 → 로그인 → 복귀까지 가는데 파트너 코드가 %2526 꼴로 깨져서 들어옴. 로그인 처리부에서 디코딩 한 번 더 하면서 어긋남.
- 쿼리스트링 만들 때 인코딩 책임을 한 군데로 모음
- 복귀 URL 검증 로직에 화이트리스트 도입 (오픈 리다이렉트 방지)
- 비회원 시나리오를 통합 테스트에 추가, 회원/비회원 두 케이스를 매번 같이 돌림
GET /coupon/{id}?ref=PARTNER123
→ 비회원 클릭
→ /login?returnUrl=/order/buy?couponId=...&ref=PARTNER123
→ 로그인 성공 시 returnUrl로 복귀, 파트너 코드 보존
회고
파트너 유입 트래픽 중 비회원 비중이 생각보다 컸음. 이 동선이 막혀 있던 동안 전환이 얼마나 깎였을지 가늠하기도 어려움. 로그인 게이트 거치는 모든 버튼은 비회원 케이스를 1급 시민으로 다뤄야 한다는 교훈을 얻음. 다음 비슷한 화면 만들 땐 처음부터 비회원 플로우를 그려놓고 시작할 생각.
다음
댓글 0
첫 댓글 달아줘.