[4주차] 바이브 코딩, 1인 창업가 부트캠프 (AI Product Builder)

영상: https://youtube.com/watch?v=cjmMNlOMBdg 강사: 조코딩


📋 4주차 핵심 요약

3주차까지 만든 Personal Stylist (단건 결제 서비스)를 구독형 SaaS로 전환하는 과정. 데이터베이스, 스토리지, 회원가입/로그인, 구독 결제, 무료 체험, 심리학 기반 전환율 최적화, 퍼널 분석 세팅, 페이지 속도 최적화, 전문성 강화까지 다룸.

3주차 → 4주차 변화 요약


0. 해커톤 & 이벤트 안내

해커톤(해코톤)

과제 이벤트


1. 데이터베이스(DB) 개념

왜 DB가 필요한가?

SQL DB vs NoSQL DB

DBMS (Database Management System)

클라우드 DB 서비스


2. 스토리지 개념

왜 별도 스토리지가 필요한가?

Cloudflare R2 (이번 강의 사용)

R2 설정 방법

  1. Cloudflare 대시보드 → Storage & Databases → R2 Object Storage
  2. "Subscribe to R2" 클릭 (과금 정보 등록, 무료 사용량 범위 내 무과금)
  3. Create Bucket → 버킷 이름 지정 (예: personal-stylist-photos)
  4. Pages 프로젝트 Settings → Bindings에서 R2 버킷 연결
  5. Variable name: PHOTO_BUCKET
  6. R2 bucket: 생성한 버킷 선택

3. 회원가입/로그인 구현 (Supabase Auth)

Supabase 가입 및 프로젝트 생성

  1. supabase.com 가입 (GitHub 연동 또는 이메일)
  2. Organization 생성 (Personal, Free Plan)
  3. 프로젝트 생성
  4. DB 패스워드 설정: 크롬 추천 비밀번호 사용 권장 (안전한 곳에 보관 필수)
  5. Region: 글로벌 서비스는 Asia 또는 기본값, 한국 타겟이면 Korea 선택 가능

이메일 로그인

  1. .env에 환경 변수 설정:
  2. VITE_SUPABASE_URL — Settings → Data API에서 확인
  3. VITE_SUPABASE_ANON_KEY — API Keys에서 확인
  4. Anon Key = Publishable Key (최근 이름 변경됨)
  5. "공개돼도 괜찮은 키"라서 프론트엔드에 노출 가능
  6. 클로드 코드에 "회원가입 로그인 기능 구현해줘, Supabase 이용해서" → 딸깍 한 번으로 구현
  7. 자동으로 다국어(한글/영어) 지원, 디자인도 기존 사이트와 어울리게 생성

보안 설정 (Authentication → Configuration → Sign-in Providers)

URL Configuration

이메일 발송 제한 해결 (SMTP 설정)

소셜 로그인 (Google OAuth)

  1. Google Cloud Platform 가입 및 프로젝트 생성
  2. 카드 등록 필요 (실제 과금은 거의 없음)
  3. 새 프로젝트 생성 (예: week-4)
  4. 인증 플랫폼(OAuth Consent Screen) 설정
  5. 앱 이름: Personal Stylist
  6. 사용자 유형: 외부 (글로벌 서비스)
  7. 연락처 이메일 등록
  8. OAuth 클라이언트 ID 생성
  9. 애플리케이션 유형: 웹 애플리케이션
  10. 승인된 JavaScript 원본: 개발서버 URL + 운영서버 URL (슬래시 없이 도메인까지만)
  11. 승인된 리디렉션 URI: Supabase Google Provider의 Callback URL 복사해서 등록
  12. Client ID, Client Secret → Supabase Google Provider에 등록
  13. Skip Nonce Check: 웹에서는 반드시 꺼놓기 (보안 약화 방지, iOS 앱에서만 필요)
  14. 권한은 최소한(이름, 프로필, 이메일)으로 → 심사 간소화
  15. 권한 많이 요청 시 Google 심사 빡세짐 + 사용자 불안

Cloudflare Pages 환경 변수 등록

배포 시 주의사항

마이페이지

로그인 원리 (TMI)


4. 구독 서비스 구현 (Polar)

구독 상품 설정

구독 관리 — Polar Customer Portal

Polar API 키 권한 추가

구독 서비스 구조

  1. 사용자가 로그인 후 프로필 등록 (키, 몸무게, 사진, 거주 도시)
  2. 키/몸무게/도시/타임존 → Supabase DB 저장
  3. 사진 → Cloudflare R2에 업로드, URL만 DB에 저장
  4. 구독 결제 → Polar에서 관리
  5. Polar Customer ID를 Supabase DB에 저장하여 두 시스템 연결 (키 역할)
  6. 매일 아침 6시(사용자 타임존 기준), 거주 도시의 날씨 + 유저 정보 기반 AI 스타일 리포트를 이메일 발송
  7. 크론잡(Cron Job)으로 정기 실행

DB-Polar 연동의 핵심

단건 결제 vs 구독의 UX 분리

Polar API 속도 제한

웹훅(Webhook) 개념


5. 크론잡(Cron Job) 구현

크론잡이란?

Cloudflare Pages의 한계와 해결

구현 구조

[크론 워커] --매시 정각--> [Pages Function(워커)] --이메일--> [사용자]
         (암구호 포함)         (날씨+DB조회+AI생성)
  1. 크론 전용 워커 생성 (Workers & Pages → Create Worker)
  2. 이름: daily-report-cron
  3. 역할: 단순히 Pages Function에 HTTP 요청(fetch)만 보냄
  4. 코드: fetch(URL, { headers: { 'x-cron-secret': SECRET } })
  5. 크론 시크릿(암구호) 설정
  6. 아무 복잡한 값 (UUID 등): 워커와 Pages Function이 동일 키 공유
  7. 해커의 무단 요청 차단: 키 없으면 거부
  8. 환경 변수로 양쪽 모두 등록
  9. 크론 트리거 설정
  10. 워커 Settings → Triggers → Cron: 0 (매시 정각)
  11. 글로벌 서비스이므로 매시간 실행 → "현재 오전 6시인 타임존의 구독자" 필터링

환경 변수 목록 (Cloudflare Pages에 등록)

변수명 설명 보안
VITE_SUPABASE_URL Supabase 프로젝트 URL Text (공개 가능)
VITE_SUPABASE_ANON_KEY Supabase Publishable Key Text (공개 가능)
SUPABASE_URL API 호출용 URL Secret
SUPABASE_SECRET_KEY Supabase Secret Key (구 Service Role Key) Secret ⚠️
OPENWEATHER_API_KEY 날씨 API 키 Secret ⚠️
CRON_SECRET 크론 워커 인증용 암구호 Secret ⚠️

6. 날씨 API (OpenWeatherMap)

왜 전용 API를 쓰나?

설정 방법

  1. openweathermap.org 가입
  2. My API Keys에서 키 발급
  3. .env에 추가 + Cloudflare Pages 환경 변수에 Secret으로 등록
  4. 프라이싱: 일 1,000콜 무료 → 1,000명까지 무과금

대안


7. 인간 심리를 활용한 전환율 최적화

이론적 배경

적용된 심리학 원칙

원칙 적용 방법
앵커링 효과 전문 스타일리스트 비용($200+) 대비 저렴함 강조 (가격 비교 테이블)
손실 회피 "매일 아침 18분 낭비하지 마세요" — 시간 손실 강조
프레이밍 "하루 $0.03, 커피보다 싸다" — 작은 금액으로 재해석
무금 효과 7일 무료 체험 → "제로 리스크" 강조
디폴트 편향 무료 체험 후 자동 결제 전환 (기본값이 구독 유지)
매몰 비용 프로필 데이터(키/몸무게/사진) 작성 → 떠나기 아까움
힉스의 법칙 가격 플랜 1개만 → 선택 피로 방지 (세 개보다 하나가 결정 빠름)
투자 환원 효과 프로필 작성이라는 투자 → 결과를 보고 싶은 심리
목표 그라데이션 단계별 진행 → 완료하고 싶은 심리 자극

⚠️ 절대 금지사항


8. 퍼널 분석 세팅 (Google Analytics + Clarity)

Google Analytics 이벤트 추적

Landing Page View (200명)
    ↓ 50% 이탈
Click Get Started (100명)
    ↓
View Input Form (90명)
    ↓
Upload Photo (70명)
    ↓
Begin Checkout (50명)
    ↓ ── 단건결제 / 구독 분기
Subscribe or Purchase (30명)
    ↓
View Result (28명)
    ↓
Save/Share Report (10명)
  gtag('event', 'purchase', {
    value: 3.99,
    currency: 'USD',
    items: [...]
  });

Google Analytics 설정 방법

  1. GA 관리 → 속성 만들기 (Personal Stylist)
  2. 시간대: 한국, 통화: USD
  3. G태그 설치 (코드에 에 삽입)
  4. SPA(Single Page Application) 특성 고려한 페이지뷰 추적
  5. 이벤트 등록: 클로드에게 "퍼널 분석 전문가" 페르소나 → 자동 설계

Microsoft Clarity 연동


9. 페이지 속도 최적화

문제 분석

개선 작업

프레임워크 권장사항


10. 서비스 전문성 강화

방법

  1. 딥리서치 활용 (ChatGPT Deep Research + Gemini)
  2. 퍼스널 컬러, 패션 스타일링 관련 학술 논문/전문 자료 수집
  3. 얼굴형별 넥라인 (둥근형, 각진형, 타원형 등)
  4. 체형별 실루엣, 소재감, 질감
  5. 컬러 시즌 (봄웜/여름쿨/가을웜/겨울쿨 등)
  6. 키/몸무게에 따른 프로포션 스타일링
  7. ChatGPT → PDF 보고서 다운로드
  8. Gemini → Google Docs로 내보내기
  9. 수집한 자료를 프로젝트에 추가 (예: reports/ 폴더)
  10. 클로드에게 자료 참고하여 프롬프트 전문화 지시
  11. "첨부한 자료들 기반으로 전문적인 프롬프트 설계해줘"
  12. 결과: 일반적인 추천 → 퍼스널 컬러/체형 기반 전문가 수준 추천
  13. V넥/스퀘어넥 등 구체적 넥라인, cm 단위 여유분 등 전문 용어 적용

고도화 옵션


11. 핵심 비즈니스 개념 (판교 사투리)

용어 의미 쉬운 설명
CAC (Customer Acquisition Cost) 고객 1명 획득 비용 한 명 데려오는 데 쓴 돈
LTV (Lifetime Value) 고객 1명의 평생 매출 한 명이 평생 벌어다 주는 돈
ARPU (Average Revenue Per User) 유저당 평균 매출 이번 달 매출 ÷ 유저 수
MRR (Monthly Recurring Revenue) 월간 반복 매출 매달 들어오는 구독 매출
코호트(Cohort) 동질 집단별 LTV 분석 10대 vs 50대 같은 그룹별 분석

핵심 공식

무료 체험 7일의 비용 분석 (AI와 함께 계산)


12. 보안 주의사항 ⚠️

노출되면 안 되는 키 (Secret)

노출돼도 괜찮은 키 (Publishable)

Supabase 키 체계 변경 (최근 업데이트)

실천 사항


13. Polar MoR 통과 요건

심사 프로세스

자금세탁 주의 ⚠️


14. 시스템 아키텍처 종합

[사용자 브라우저]
    │
    ├─ 회원가입/로그인 ──→ [Supabase Auth]
    │
    ├─ 프로필 등록 ──→ [Supabase DB] (키/몸무게/도시/타임존)
    │                 ├─→ [Cloudflare R2] (사진 저장)
    │                 └─→ polar_customer_id로 Polar와 연결
    │
    ├─ 구독 결제 ──→ [Polar] (구독 관리, Customer Portal)
    │
    ├─ 단건 결제 ──→ [Polar] (1회성)
    │
    └─ 이메일 수신 ←── [Cloudflare Pages Functions(워커)]
                              ↑ 매시 정각 트리거
                       [Cron Worker] (크론 시크릿으로 인증)
                              │
                       [OpenWeatherMap] (날씨 조회)
                       [OpenAI API] (스타일 추천 + 이미지 생성)
                       [Resend SMTP] (이메일 발송)

Cloudflare Pages vs Workers 차이


15. 개발 실전 팁

코드 롤백 (Git 활용)

AI 시대 개발 패턴

도구 선택

Supabase SQL 에디터

가격 전략


16. 레딧 마케팅 사례


✅ 액션 아이템

  1. Supabase 가입 및 프로젝트 생성
  2. Cloudflare R2 버킷 생성 (사진 저장용) + Pages 바인딩
  3. 이메일 로그인 구현 + 보안 설정 (비밀번호 8자+, 복합 요구사항)
  4. Resend SMTP 연결 (이메일 발송 한도 확장, 시간당 10,000건)
  5. Google Cloud OAuth 설정 → 소셜 로그인 구현 (권한 최소화)
  6. 마이페이지 구현 (내 정보, 비밀번호 변경, 회원 탈퇴, 비밀번호 찾기)
  7. Polar에 구독 상품 등록 ($9.99/월, 7일 무료 체험)
  8. Polar API 키 권한 업데이트 (customer:read, subscription:read, customer_session:write)
  9. DB 테이블 설계 (user_profiles: 키, 몸무게, 사진URL, 거주도시, 타임존, polar_customer_id)
  10. OpenWeatherMap API 가입 및 키 발급 (일 1,000콜 무료)
  11. 크론 워커 생성 + 크론 시크릿 설정 + 크론 트리거 (매시 정각)
  12. Cloudflare Pages 환경 변수 등록 (6개 키)
  13. Google Analytics 이벤트 추적 (8단계 퍼널) + Clarity 연동
  14. PageSpeed Insights로 성능 측정 및 최적화 (51점 → 92점)
  15. 딥리서치로 전문 자료 수집 → 프롬프트 전문화
  16. Polar MoR 심사 요건 충족 (고객 여정 영상 + 환불 처리 + SNS 등록)
  17. Polar Customer Portal 연결 (구독 관리 페이지)

📌 5주차 예고


🔗 주요 링크