가입 장벽 없이 공유하기 — ‘6자리 코드’ 온보딩을 설계한 방법

협업 앱의 진짜 적은 기능이 아니라 진입 장벽이다. “그룹 만들고, 상대를 검색하고, 권한 승인하고…” 이 과정에서 대부분 이탈한다. 나는 가족 장보기 앱에서 이걸 6자리 코드 하나로 눌렀다. 설계 의도와 뒤에서 돌아가는 구조를 공개한다.

공유 = 코드 하나 불러주기

모든 바구니(리스트)에는 고유한 6자리 코드가 붙는다. 가족에게 공유하려면 복잡한 초대 절차 대신 이 코드만 알려주면 된다. 받은 사람은 코드를 입력해 바로 합류한다. 검색·친구수락·권한요청 단계를 통째로 없앴다. 사용자가 겪는 절차는 “코드 부르기 → 입력 → 끝”이 전부다.

뒤에서는 이렇게 돌아간다

  • 코드 생성: 백엔드의 generateCode 유틸이 충돌 없는 코드를 발급한다. 이미 쓰이는 코드면 다시 뽑는다.
  • 역할 관리: 바구니-사용자 관계 테이블이 소유자/멤버 역할을 구분한다. 소유자는 바구니를 지우거나 멤버를 관리하고, 멤버는 항목을 동등하게 편집한다.
  • 내부 식별자는 따로: DB의 실제 기본키는 UUID다. 사람이 만지는 표면엔 짧은 코드를, 내부엔 안전한 UUID를 둔다.
  • 삭제는 소프트/하드로: 실수로 지운 항목을 복구할 여지를 남기려고 소프트 삭제를 두고, 완전 삭제는 별도로 처리한다.

왜 6자리인가 — 외우고 부를 수 있어야 한다

길이는 의도적이다. 너무 짧으면 충돌하고, 너무 길면 전화로 불러주거나 카톡으로 넘기기가 번거롭다. 6자리는 “말로 불러줄 수 있는” 상한선에 가깝다. 이 앱의 공유는 상당수가 오프라인(같은 집·마트)에서 일어난다. “지금 이 코드 입력해봐”라고 입으로 전달 가능한 길이가 실제 사용성을 좌우한다. 프로필 화면엔 코드를 복사하는 버튼을 둬서, 온라인 공유도 한 번 탭이면 되게 했다.

같은 패턴을 성장에도 재사용

친구 초대도 같은 코드 발상이다. 사용자마다 추천 코드가 있고, 그 코드로 친구가 들어오면 바구니 슬롯을 보상으로 준다(최대 몇 개까지). 무료 사용자는 기본 2개 바구니로 시작하지만, 초대로 슬롯을 늘릴 수 있다. “공유를 쉽게 만드는 장치”가 그대로 바이럴 성장 장치가 되는 것이다. 초대에는 만료를 두어 오래된 링크가 악용되지 않게 했다.

핵심: 온보딩 마찰을 “외워서 부를 수 있는 짧은 코드” 하나로 치환하면, 진입도 공유도 성장도 같은 메커니즘으로 굴러간다.

복잡한 권한 모델(소유자/멤버·UUID·소프트삭제)은 전부 뒤에 숨기고, 사용자에겐 코드 한 줄만 보이게 하는 것. 이 “Zero Barrier 코드” 패턴은 장보기 앱뿐 아니라 모든 공유·협업 제품에 이식 가능하다고 본다.

충돌과 보안도 코드 뒤에서 처리한다

짧은 코드는 편하지만 충돌·추측 위험이 있다. 그래서 발급 시 이미 쓰이는 코드면 다시 뽑고, 코드 자체는 바구니 참여 권한을 여는 열쇠일 뿐 민감 데이터를 담지 않는다. 실제 인증·식별은 로그인된 사용자와 내부 UUID로 하고, 6자리 코드는 “이 바구니에 합류” 요청을 여는 입구 역할만 한다. 초대에 만료를 둔 것도 같은 이유다 — 오래된 코드가 계속 유효하면 원치 않는 합류가 생길 수 있다. 사용성(짧고 부르기 쉬움)과 안전(권한은 서버가, 코드는 입구만) 사이의 균형을 이렇게 잡았다.

댓글 남기기

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.ㅇ