Skip to content

Story: 추천인 코드 시스템

메타

항목
Story IDE-07-S-04
EpicE-07 쿠폰 & 추천인 코드
상태ready-for-dev
우선순위P0
규모M
담당 개발자BE

사용자 스토리

As a 기존 유료 유저,
I want 내 추천 코드로 친구를 초대하고 싶다,
So that 크레딧을 적립받을 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 추천 코드 생성

항목내용
Given유료 결제 완료 후
When마이페이지에 진입하면
Then고유 추천 코드가 자동 생성되어 표시된다

AC-02: 추천 코드 검증

항목내용
Given신규 유저가 가입할 때
When추천 코드를 입력하면
Then실시간으로 유효성이 검증된다

AC-03: 추천인 연결

항목내용
Given유효한 추천 코드로 가입했을 때
When가입이 완료되면
Then추천인과 피추천인 관계가 기록된다

AC-04: 어뷰징 방지

항목내용
Given추천 코드로 가입 시도 시
When자기 추천, 기존 가입자, 동일 IP 초과면
Then가입은 허용하되 추천 관계는 무효 처리

태스크 분해

Task 1: 데이터 모델

  • [ ] 1.1: ReferralCode 테이블
    sql
    - id, code, ownerId
    - totalReferrals, activatedReferrals, paidReferrals
    - isActive, createdAt
  • [ ] 1.2: Referral 테이블 (추천 관계)
    sql
    - id, referralCodeId, referrerId, refereeId
    - status (PENDING/ACTIVATED/PAID)
    - activatedAt, paidAt, createdAt
  • [ ] 1.3: 추천 코드 유니크 인덱스

Task 2: API 개발

  • [ ] 2.1: GET /users/me/referral-code - 내 추천 코드
  • [ ] 2.2: GET /referral-codes/validate?code={code} - 코드 검증
  • [ ] 2.3: POST /signup - 추천 코드 파라미터 추가
  • [ ] 2.4: GET /users/me/referrals - 내 추천 현황

Task 3: 추천 코드 생성 로직

  • [ ] 3.1: 코드 형식: SELLER-
  • [ ] 3.2: 첫 결제 완료 시 자동 생성
  • [ ] 3.3: 코드 충돌 시 재생성

Task 4: 어뷰징 방지

  • [ ] 4.1: 자기 추천 검사 (이메일/전화번호)
  • [ ] 4.2: 기존 가입 이력 검사
  • [ ] 4.3: 동일 IP 24시간 내 3건 초과 시 검토 대기

개발 노트

추천 코드 구조

typescript
interface ReferralCode {
  id: string;
  code: string;                    // 예: SELLER-ABC123
  ownerId: string;

  // 통계
  totalReferrals: number;          // 총 추천 수 (가입)
  activatedReferrals: number;      // 활성화 수 (몰연동)
  paidReferrals: number;           // 결제 완료 수

  isActive: boolean;
  createdAt: Date;
}

URL 파라미터 방식

추천 링크: https://jangsawang.com/signup?ref=SELLER-ABC123

- 클릭 시 쿠키/세션에 저장
- 가입 완료 시까지 유지
- 가입 폼에 자동 채워짐 (수정 불가)

이벤트 로깅

이벤트파라미터
referral_code_createduser_id, referral_code
referral_code_validatedcode, is_valid
referral_signupreferral_code, referrer_id, referee_id
referral_invalidreason (self_referral/existing_user/ip_limit)

생성일: 2026-01-20

장사왕 Product Team