개발 slecs

채팅 페이월 도입으로 무료 횟수 제한과 프리미엄 전환 유도 구현

목차

이번에는 서비스의 첫 마네타이제이션 기능을 구현했다. 평생 무제한 무료로 제공하던 채팅을 무료 사용자는 10회, 프리미엄은 무제한으로 제한하는 페이월 시스템이다.

왜 이 시점에 페이월을 도입했나

비즈니스 관점에서 언제 페이월을 도입할지는 엄청 중요한 결정이다. 너무 일찍 도입하면 사용자를 잃고, 너무 늦으면 운영 비용을 감당 못 한다. 우린 어느 정도 사용자 기반이 생기고, 채팅 API 호출 비용이 가시화되는 시점에 이 결정을 내렸다.

무료 사용자에게 10회 한도를 정한 건 전략적 선택이다. 너무 많으면 (예: 100회) 마네타이제이션 효과가 없고, 너무 적으면 (예: 3회) 사용자가 UX를 느껴보지 못해 이탈한다. 10회는 서비스의 핵심 기능을 충분히 체험할 수 있으면서도, 정말 필요한 순간엔 프리미엄으로 업그레이드를 고려하게 만드는 포인트를 노렸다.

세 개 파일의 역할

파일 역할 이번 변경의 의미
src/app/api/chat/route.ts 채팅 API 엔드포인트 각 요청의 서버 사이드 가드: 사용자 상태를 확인하고 한도 초과 시 즉시 차단
src/app/chat/[slug]/chat-client.tsx 클라이언트 UI 프리미엄 유도 버튼을 언제 보여줄지 결정: 남은 횟수 정보를 받아 UX 제어
src/lib/user.ts 사용자 유틸리티 신뢰 가능한 기록: 사용자의 프리미엄 상태와 남은 무료 횟수를 DB에 저장

세 파일이 수정된 이유는 페이월이 단순 API 제한이 아니라 클라이언트-API-데이터베이스 전체를 아우르는 일관된 로직이기 때문이다. API만 수정하면 클라이언트에서 무한 요청을 보낼 수 있고, UI만 수정하면 API를 직접 호출하는 사용자는 우회할 수 있다. 이래서 이런 결정권(guard rail)은 항상 서버 사이드 우선으로 구현해야 한다.

구현의 핵심: 정확한 상태 동기화

페이월 시스템에서 가장 까다로운 부분은 무료 횟수 카운팅을 정확하게 추적하는 것이다.

1. 사용자가 채팅 요청  API 수신
2. API: 사용자의 (프리미엄 여부, 현재 사용횟수) 조회
3. 프리미엄이 아니면서 횟수 >= 10인가?  차단
4. 아니면 요청 처리 + 사용 횟수 +1 업데이트
5. 클라이언트에 응답  "남은 횟수" 정보 포함
6. 클라이언트: 남은 횟수 0이면 UI에서 프리미엄 버튼 강조

이 흐름에서 주의할 점:

  • API에서는 요청 처리 전에 체크 — 요청을 먼저 처리하고 업데이트하면 동시성 문제(race condition)가 발생한다
  • 응답에 남은 횟수를 포함 — 클라이언트가 UI를 즉시 갱신해야 UX가 끊기지 않는다
  • 사용 기록을 DB에 저장 — "사용 횟수 +1"만 하고 언제, 어디서 사용했는지 기록하지 않으면, 나중에 정산이나 분석할 때 논쟁이 생긴다

비즈와 개발의 협력

이 기능을 구현하면서 느낀 점은, 페이월이 단순 기술 문제가 아니라는 것이다. 다섯 가지를 동시에 고려해야 했다:

  • 비즈: 무료 사용자는 언제 프리미엄으로 유도할 것인가?
  • 마케팅: 프리미엄 이벤트 기간엔 한도를 늘릴 건가?
  • 고객지원: 한도 초과한 사용자의 문의에 어떻게 응답할 건가?
  • 데이터: 사용자의 행동 패턴을 어떻게 추적할 건가?
  • 개발: 이 모든 요구사항을 안정적으로 구현할 수 있는가?

나는 기술 리더로서, 비즈니스 요구사항을 먼저 정확히 파악한 후에 개발을 시작했다. "10회"라는 숫자도, "프리미엄은 무제한"이라는 정책도 팀 토론을 통해 나온 결정이었다. 개발자가 일방적으로 "이게 구현하기 쉬우니까 이렇게 하자"가 아니라, 비즈 팀이 "이게 비즈 목표니까 이렇게 구현해달라"는 명확한 요구사항으로 받아야 한다는 뜻이다.

다음은 데이터를 본다

이 기능은 최소 페이월이다. 앞으로는 실제 데이터를 보며 다음을 고려할 예정이다:

  • 무료/유료 사용자별 상세 분석 대시보드
  • 한도 재설정 이벤트 (예: 매월 초 무료 횟수 리셋)
  • A/B 테스트로 최적 한도 찾기 (10회가 정말 맞는가?)
  • 엔터프라이즈 고객을 위한 커스텀 플랜

결국 페이월은 한 번 구현하고 끝이 아니라, 사용자 데이터를 보며 지속적으로 튜닝하는 과정이다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.