단단한 백엔드가
서비스를 살린다
여기가 단단해야 고도화된 서비스를 만들 수 있습니다. 이론과 각 프로그램의 역할을 제대로 이해하면 Claude Code가 만든 코드가 보입니다. 보이면 고칠 수 있고, 고칠 수 있으면 진짜 운영자가 됩니다.
전체 데이터 흐름 + API + JSON
한 번 그림이 머릿속에 박히면 "이 코드가 뭘 하는지"가 즉시 보입니다
웹 서비스의 모든 동작은 4개 노드 사이의 데이터 이동입니다. 사용자 화면에서 시작해서 DB에 저장되거나 그 반대로 나옵니다. 이 그림 하나가 백엔드의 80%를 설명합니다.
보는 화면
창구
처리
저장소
손님이 메뉴(요청)를 주문하면 웨이터(API)가 받아서 주방(Backend)에 전달. 주방은 창고(DB)에서 재료를 꺼내 요리해 다시 웨이터를 통해 손님에게 줍니다.
RESTful이란 "이 주문 양식이 표준화되어 있어서 어떤 식당이라도 같은 방식으로 주문 가능한 것"을 의미합니다.
구독자 목록 조회
새 구독자 가입
구독 주제 변경
구독 해지
API가 주고받는 표준 데이터 형식. 키-값 쌍의 묶음입니다. 한국어로 "{이름: 값, 이름: 값}" 메모지를 주고받는 셈.
"키": 값 쌍 — 이름 옆에 콜론(:)2.
[ ] 배열 — 여러 값 묶음3.
{ } 객체 — 키-값 묶음 (중첩 가능)4.
"문자"는 따옴표, 숫자/true/false는 따옴표 없음
API 키·비밀번호 같은 민감 정보는 코드에 박지 않고 .env.local 파일에 분리합니다. GitHub에 안 올라가게 .gitignore에 등록 필수.
NEXT_PUBLIC_TOSS_SECRET_KEY 같은 실수는 브라우저에 결제 비밀키가 노출됩니다. 결제·관리자 키는 절대 NEXT_PUBLIC_ 접두사 금지. CLAUDE.md의 CRITICAL 섹션에 박아두세요.
Supabase 4가지 역할
"백엔드 개발자 한 명을 채용하는 비용"을 무료~소액으로 대체하는 도구
Supabase는 단순 DB가 아닙니다. DB + Auth + 파일저장 + 서버리스 함수까지 한 플랫폼에서 제공. 1인 창업가가 백엔드 개발자 없이 서비스를 굴릴 수 있는 결정적 도구입니다.
CREATE POLICY ... USING (auth.uid() = user_id) 추가. 개발 중 임시로 끄려면 ALTER TABLE ... DISABLE ROW LEVEL SECURITY.https://my-app.vercel.app/auth/callback 추가. localhost도 함께.Auth + 카카오 OAuth + JWT
한국 사용자는 가입 폼이 길면 떠납니다 — 카카오 한 번 클릭이 전환률 3배
Supabase Auth는 이메일/비밀번호 + Magic Link + 소셜 OAuth를 모두 지원합니다. 한국 서비스라면 카카오 OAuth는 필수. 가입 전환률에서 압도적입니다.
"카카오 로그인" 클릭
로그인 + 동의
코드 전달
로그인 완료
https://xxx.supabase.co/auth/v1/callback (Supabase URL)supabase.auth.signInWithOAuth({ provider: 'kakao' }) 한 줄window.location.origin을 redirectTo에 박았다가 Vercel 배포 후 localhost로 돌려보냄.해결: 항상
process.env.NEXT_PUBLIC_API_URL 사용. Vercel과 로컬에서 다른 값으로 자동 분기.이메일 수집: 개인 개발자도 비즈니스 앱 등록 가능 (사업자 없이도). 등록 안 하면 이메일 비어 있음.
로그인 후 받는 토큰. "이 사람은 ○○○○이고 1시간 동안 유효함"이 암호화돼 들어있는 일종의 출입증입니다. 브라우저 쿠키나 localStorage에 저장. API 호출 때마다 자동으로 헤더에 붙어 "이 사람은 인증된 회원"임을 증명합니다.
관리자: users 테이블에
role 컬럼 추가 (예: 'admin') → RLS에서 auth.jwt() ->> 'role' = 'admin' 조건으로 전체 접근 허용Supabase는 JWT 안에 커스텀 claims도 넣을 수 있어 권한 분리가 깔끔합니다.
토스페이먼츠 vs Stripe
"PG 비교에 한 달 쓰지 마세요" — 한국 서비스면 토스, 글로벌이면 Stripe. 끝.
✓ 카드/계좌이체/토스/카카오 다 지원
✓ 테스트 모드 즉시 사용
✓ 한글 문서·CS 우수
✓ 빌링키로 자동 정기결제
✗ 해외 카드는 약함
✓ Subscription·Invoice 모델 표준
✓ Customer Portal 기본 제공
✓ Webhook·SDK 품질 최고
✗ 한국 사용자 UX는 토스가 우위
✗ 한국 카드 전환률 낮음
Phase 2 (해외 진출): Stripe 추가. 결제 옵션 분기.
두 개 동시 도입 금지 — 둘 다 어설프게 됩니다.
POST /v1/billing/{billingKey} 호출 → 9,900원 즉시 결제 → 응답에서 결제 결과 확인2. Webhook은 시그니처 검증 필수 (위조 방지). 토스는 X-Toss-Signature 헤더.
3. 결제 금액은 클라이언트에서 받지 말고 서버에서 다시 조회 (사용자가 임의로 9,900 → 100원으로 바꿀 수 있음).
4. 환불은 사용자 요청 → 사람이 확인 → 토스 API 호출. 자동화 금지.
3채널 알림 — 텔레그램·카카오·이메일
"모든 알림을 한 채널로" 안 됩니다. 상황별 맞춤이 신뢰도와 비용을 가릅니다
가장 빠른 알림 채널. 무료. 본인 운영용으로 거의 필수입니다. BotFather에게 한국어로 "/newbot" 한 줄이면 봇 생성 + API 키 발급 끝.
한국 사용자에게 가장 효과적이지만 설정 비용이 큽니다. 카카오 비즈니스 채널 개설 → 알림톡 사업자 등록 → 템플릿 심사(1~2주). MVP 단계에서는 텔레그램으로 시작하고, 첫 100명 넘으면 카카오 도입.
2026년 Next.js 사용자의 사실상 표준 이메일 서비스. SendGrid보다 매끄럽고, Mailgun보다 한국 도달률이 좋습니다. 무료 티어가 넉넉해서 첫 100명 구독자까진 한 푼도 안 듭니다.
| 상황 | 추천 채널 | 이유 |
|---|---|---|
| 새 구독자 가입 (운영자 알림) | 텔레그램 | 즉시·무료·내부용 |
| 발송 오류·결제 실패 (운영자 알림) | 텔레그램 | 긴급, 즉시 대응 |
| 가입 환영·결제 영수증 (사용자) | 카카오 알림톡 (없으면 이메일) | 신뢰도, 오픈율 |
| 구독 갱신·만료 안내 (사용자) | 카카오 알림톡 | 거래 알림 표준 |
| 매일 뉴스레터 본문 (사용자) | 이메일 (Resend) | 긴 콘텐츠, 비용 |
| 주간 요약 리포트 | 이메일 | 읽고 보관 가능 |
Vercel 배포 + Happy Path 검증
배포 자체는 5분, 환경변수 동기화가 95%
Vercel은 GitHub 저장소를 연결만 하면 자동 배포. 실제 어려움은 "로컬에서는 되는데 배포본에서는 안 되는" 환경변수 누락입니다. 이걸 막는 체크리스트가 핵심입니다.
Build Command 확인
1:1 동일하게
2~3분 빌드
커스텀 도메인 연결
https://xxx.supabase.cohttp://localhost:3000 / Vercel https://my-newsletter.vercel.app (값 다름!)2. NEXT_PUBLIC_ 접두사 안 달려서 클라이언트가 못 읽음
3. Supabase Redirect URL에 Vercel 도메인 미등록 → 카카오 로그인 후 404
4. Webhook URL이 localhost로 박힘 → 외부에서 못 부름
5. .env.local과 Vercel 값이 다름 (예: 토스 테스트 키 vs 실 키)
"모든 게 잘 됐을 때의 가장 단순한 경로"입니다. 이 흐름이 막힘없이 한 번 돌아가야 진짜로 배포된 것입니다. 엣지 케이스는 그 다음.
my-newsletter.vercel.app 방문 → "카카오로 시작" → 카카오 인증 → users 테이블에 row 생성배포는 시작입니다. 사용자가 들어오기 시작하면 "누가 어디서 막혔나"를 봐야 합니다. 무료 티어 두 개면 충분.
Sentry: 사용자가 마주친 에러를 자동 수집. 무료 5K 이벤트/월. 새 에러 발생 즉시 텔레그램으로 알림 연결 가능.
둘 다
npm install + 1줄 코드로 활성화. Stage 6 마무리 단계에서 반드시 셋업.
https://my-newsletter.vercel.appTELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_IDapp.posthog.com/...라이브 URL이 Stage 7에서 n8n 자동화의 연결 포인트가 됩니다. DB 스키마(users·subscriptions·newsletters·send_logs)는 Stage 7 자동화 워크플로우가 읽고 쓰는 데이터 소스. PostHog는 Stage 9 AARRR(획득·활성화·유지·추천·수익) 분석의 데이터 축적이 오늘부터 시작됩니다. 일주일 뒤 첫 진짜 사용자 데이터가 쌓이기 시작합니다.