드디어 오늘, 계속 dogfooding 하던 서비스를 배포했다. 이름은 줄곧 (Julgot). 잘한 것만 기록하는 성취 전용 일기 앱이다.
Table of contents
Open Table of contents
왜 만들었나 — 완벽주의라는 출발점
처음에 이걸 만든 이유는 단순했다. 완벽주의 때문에 포트폴리오에 적을 게 없었다. “이건 아직 부족해서”, “저건 완성 안 됐어서” 로 계속 제외하다 보면 남는 게 없다.
그래서 반대로 접근해봤다. 평소에 내가 무엇을 이루는지 먼저 살펴보고 싶었다. 잘한 것만 기록하는 앱. 완벽주의의 “1등 아니면 0점” 필터를 거꾸로 뒤집는 도구.
지금은 이 앱에 작은 거라도 성취를 기록하는 습관이 생겼다. 그리고 스스로 자존감이 낮아지려고 할 때 분석 탭에 들어가 내가 어떤 걸 할 수 있는 사람인지 다시 인식 한다. Dogfooding 하면서 제일 확실하게 느낀 효과다.
배포까지 오면서 처음 경험한 것들
배포 자체가 처음이다 보니 지금까지는 접해보지 못한 것들을 하나씩 만나야 했다.
다른 환경에서도 잘 되는지 검증 — 수치화
내 로컬에서만 잘 도는 게 서비스가 아니라는 걸 이번에 몸으로 배웠다. 다른 기기 · 다른 네트워크에서 실제로 어떤지 확인하려면 눈으로만 보면 안 되고 수치로 잡아야 한다. 그래서 Lighthouse CI (랩) + Vercel Speed Insights (실사용자 지표) 를 붙였다.
숫자가 있으니 어디부터 손봐야 하는지 명확해졌다. 이게 실제로 어떻게 도움됐는지는 지난 성능 튜닝 글 에 자세히 남겼다.
로컬과 배포 환경 분리
Live 상태에서 DB 를 직접 건드리면 안 된다. 실사용자 데이터가 들어가는 순간부터 아무리 작은 잘못된 쿼리 하나가 사고가 될 수 있다. 그래서 로컬 개발 환경과 배포 환경을 나눴다.
Staging 까지 나누는 건 아직 필요 없다고 판단했다. 사용자도 적고 팀도 나 혼자라 pre-prod 단계에서 사람이 검증할 층을 별도로 두는 것보다, PR 프리뷰 URL 로 확인하고 바로 prod 로 보내는 흐름 이 낫다.
DB 백업 — Cloudflare + cron + 암호화
이 앱은 사용자의 기록을 토대로 분석하는 것이 핵심 이다. 기록이 날아가면 앱 자체의 가치가 없다.
그래서 Cloudflare Workers 로 매일 cron job 을 돌려 DB 를 백업하고, 백업본은 암호화해서 저장하도록 만들었다. 데이터가 앱의 근간인 서비스라면 이 부분을 배포 전에 반드시 잡고 넘어가는 게 맞다.
사업자 등록 — 결제를 위한 준비
토스 페이먼츠를 붙이려고 사업자 등록을 해뒀다. 국내 PG 사 대부분은 개인이 아닌 사업자 계정을 요구하기 때문이다.
그런데 지금은 결제를 붙일 단계가 아니다. 결제해줄 사용자가 없다. 결제가 문제가 아니라 사용자를 만드는 게 지금 온전히 신경 써야 할 지점이다. 사업자 등록은 미리 해뒀지만 결제 인테그레이션은 뒤로 미뤘다.
가장 큰 문제 — 홍보를 어떻게 하는가
솔직히 지금 제일 감을 못 잡은 부분이다.
다 만들어놓고도 어떻게 알리는지를 모르겠다. 현재 X (트위터) · 디스콰이엇 · 예전에 활동했던 MBTI 카페에 올렸다. 그런데 이 정도로 끝내기엔 아직 노출조차 안 됐고, 이 서비스가 있다는 걸 모르는 사람이 대다수일 것이다.
단발성 홍보 하나로 끝내고 접기엔 너무 이르다. 그래서 지속적으로 홍보할 방법과 주기를 정해야 하는데, 이게 처음이라 감이 안 잡힌다.
앞으로 해봐야 할 것 같은 것들:
- 인스타그램 · X 정기 포스팅 (진행 상황 · 소소한 인사이트 공유)
- 디스콰이엇 · 인디해커즈 등 인디 개발자 커뮤니티 활동
- Reddit · ProductHunt 등 해외 채널 시도
- 각종 관련 커뮤니티 (MBTI · 자기계발 · 습관 관리) 에 자연스럽게 노출
말 그대로 인터넷 영업을 해야 되지 않을까 싶다.
Vercel · Supabase 비용 걱정 — 어제와 오늘의 온도차
한 가지 미리 걱정했던 게 있다. Vercel · Supabase 로 개발했는데 나중 되면 비용이 골치 아프다는 얘기를 들어서.
어제까지는 이걸 다른 곳으로 migration 해야 하나 심각하게 고민했다. 그런데 오늘 배포하고 보니 그럴 필요는 없어 보인다. 🥲 이유는:
- Vercel Hobby · Supabase Free tier 는 초기 트래픽 규모 대비 압도적 여유 (bandwidth · request 수 등)
- 정말 문제 되는 시나리오 (상업 사용 판정 · 바이럴 트래픽 오버런) 는 아직 해당 사항 없음
- 옮기는 데 드는 시간과 리스크가 지금 시점에는 훨씬 큼
트래픽 · 사용자가 실제로 붙기 전까지는 스택 걱정을 미리 하지 않기로 했다. 걱정할 문제가 실제로 문제가 될 시점이 오면 그때 다시 판단한다.
앞으로 — 완벽주의 함정 인식하기
솔직한 마음을 하나 남겨둔다.
지금 이 앱을 배포하고 나서 이런 생각이 든다. “차라리 다시 처음부터 시작하는 마음으로, 1주일 만에 서비스 만들어서 매주 배포하고, 개발 과정을 하나하나 캡쳐해서 의견 물으며 수요 있는지 확인하는 게 낫지 않을까.”
그럴듯한 생각이지만 이것도 완벽주의가 나에게 주는 함정 이라고 생각한다. “지금 만든 건 어차피 잘 안 될 테니까 접고 다음 걸 시작하자” 는 도피. 지금 만든 걸 마케팅 없이 접으면 정말로 이 서비스가 묻힐 만한 것인지 알 수가 없다.
그래서 그걸 피하지 않기로 했다. 마케팅에 신경 쓰고 노출도를 올려서 이 서비스가 정말로 묻힐 만한 서비스인지 확인 해보려고 한다. 그 확인 없이 다음 걸로 넘어가는 게 진짜 완벽주의의 도피니까.
더 공부해볼 것
이 글이 얕게 지나간 것들:
- 1인 인디 프로덕트 마케팅 — Twitter/X 활용 전략 · ProductHunt · Reddit 서브레딧 노출 · SEO 유입. Indie Hackers — Marketing
- 디스콰이엇 활용법 — 국내 인디 개발자 커뮤니티. 메이커로그 · 프로덕트 등록 · 이웃 만들기. disquiet.io
- Growth 지표 — DAU · MAU · Retention — 서비스가 실제로 사용되고 있는지 재는 최소 지표들. Amplitude — Product Analytics
- Cloudflare Workers Cron Triggers — 이번에 DB 백업에 썼는데 아직 표면만 만짐. Scheduled Handler · KV Storage · R2 조합. Cloudflare — Cron Triggers
- DB 백업 암호화 전략 — 대칭키 (AES) 관리 · 키 로테이션 · 백업 복구 테스트 (백업만 하고 복구는 안 해본 상태). OWASP — Cryptographic Storage
- 국내 PG 사 비교 — 토스 페이먼츠 vs KG이니시스 vs 아임포트 (통합 SDK). 각 수수료 · API 편의성. 토스 페이먼츠 개발자센터
- 인디 프로덕트 launch playbook — ProductHunt launch day 준비, 카피라이팅, 초기 유저 확보 패턴. Product Hunt — Ship
- Vercel · Supabase 실제 청구 사례 — 비용 걱정을 감이 아니라 실측 사례로 재기. Vercel — Pricing · Supabase — Pricing
- 완벽주의를 도구로 다루는 법 — 이 글의 결이랑 이어지는 이전 회고 다시 읽기
— 배포 1일차. 이제부터가 진짜 시작이다.