TinyPilot: Month 17

Michael Lynch

TinyPilot: 17개월 차

한 줄 요약

링크 하나를 없애 62%의 매출 성장을 만들어낸 방법

하이라이트

  • TinyPilot 매출이 5만 7천 달러까지 급등했으며, 이 추세가 지속될 가능성도 있습니다.
  • TinyPilot의 신제품과 새로운 브랜딩 출시를 앞두고 있습니다.
  • 사이드 프로젝트의 Google Cloud Platform 비용을 90% 절감했습니다.

목표 평가

매달 초에 이루고 싶은 목표를 정합니다. 그 목표를 얼마나 달성했는지는 다음과 같습니다.

TinyPilot 웹사이트 리브랜딩 완료하기

  • 결과: 리브랜딩 작업은 95% 완료했지만 아직 공개하지는 않았습니다.
  • 성적: B

디자인 업체와 함께 로고 콘셉트와 컬러 시스템을 확정했습니다. 다만 공개하기 전 다듬어야 할 세부 사항이 아직 남아 있습니다.

하드웨어가 준비되는 대로 Voyager 2 출시 준비하기

  • 결과: 하드웨어를 수령한 지 일주일 이내에 출시할 수 있도록 모든 준비를 마쳤습니다.
  • 성적: A-

Voyager 2에 필요한 커스텀 하드웨어를 확보하느라 오랜 시간이 걸렸습니다. 하지만 제조를 완료하고 지난주에 첫 물량을 받았기에 이번 주 안으로 출시할 수 있을 것 같습니다. Voyager 1 수요를 따라가는 데 어려움을 겪으면서 당초 예상보다는 조금 늦어졌지만, 하루 이틀 정도 지연에 그칠 것입니다.

TinyPilot의 유료 마케팅 채널 탐색을 도울 마케팅 업체 또는 프리랜서 채용하기

  • 결과: 우선순위 변경으로 보류함
  • 성적: 해당 없음

몇몇 마케팅 업체와 이야기를 나눴지만 아직 채용할 준비가 되지 않았습니다. 지금도 늘어난 TinyPilot 판매량을 따라가기 벅찬 상황이라, 마케팅은 잠시 미루고 현재 수요를 감당할 수 있도록 생산 규모를 키우는 데 집중하고 있습니다.

TinyPilot 통계

지표2021년 10월2021년 11월변동
순 방문자6,8987,983+1,085 (+16%)
총 페이지뷰13,00814,596+1,588 (+12%)
판매 매출$34,927.55$56,626.33+$21,698.78 (+62%)
기업용 구독$48.00$47.75-$0.25 (-1%)
로열티$6,804.53$8,185.78+$1,381.25 (+20%)
총 매출$41,780.08$64,859.86+$23,079.78 (+55%)
수익$1,936.22$12,758.39+$10,822.17 (+559%)

단일 제품으로 축소해 매출이 거의 두 배로 늘다

공급 부족으로 10월에 TinyPilot의 저가 제품을 단종하고 프리미엄 제품인 TinyPilot Voyager에 집중했습니다. 그렇게 제품 카탈로그에는 Voyager와 매출이 거의 없는 일부 액세서리만 남게 되자, 카탈로그 페이지를 아예 없애기로 했습니다.

말 그대로 사이트 내비게이션 바에서 링크 하나를 삭제한 것이 전부였습니다.

기존 제품 카탈로그 페이지 스크린샷
기존 제품 카탈로그 페이지 스크린샷

TinyPilot 웹사이트에서 제가 만든 가장 큰 효과를 낸 변경은 내비게이션 바에서 제품 카탈로그 페이지로 연결되는 링크를 삭제한 것이었습니다.

지난달 회고에서 매출이 상승세를 보이기 시작했고 제품군 단순화와 관련이 있을지 궁금하다고 언급했습니다. 한 달치 데이터가 더 쌓인 지금, 그 조치가 엄청난 차이를 만들었다고 확신합니다.

단일 제품으로 통합한 이후 상승세를 보이는 TinyPilot 매출 추이 그래프

단일 제품으로 웹사이트를 통합하기 전후의 TinyPilot 주간 매출

이전에도 매출 급등이 있었지만, 항상 YouTube 언급이나 유명 사이트 리뷰 같은 뚜렷한 계기가 있었습니다. 매출은 급등한 뒤 서서히 가라앉곤 했습니다.

단일 제품으로 통합한 이후 매출은 과거 급등 시점만큼 높은 수준을 유지하고 있지만, 일회성 이벤트 때처럼 하락세로 돌아서지 않고 있습니다.

매출 증가가 카탈로그 페이지를 없앤 덕분이라면, 이는 제가 TinyPilot에서 해온 그 어떤 일보다 투자 대비 효과가 가장 높은 성과입니다. 링크 하나를 삭제해 매출이 62% 뛰었습니다!

성장통의 귀환

TinyPilot 초기 6개월 동안 저는 성장 속도를 따라가느라 늘 허둥댔습니다. 매출이 4~8주마다 두 배로 늘었기 때문에 새로운 공급업체를 찾고 비즈니스를 확장할 프로세스를 끊임없이 다시 만들어야 했습니다. 그 성장은 흥미진진했지만 동시에 녹초가 되게 했습니다. 2021년 대부분은 더 안정적이고 예측 가능한 속도로 자리 잡아 다행이라 생각했습니다.

최근 매출 증가로 성장통이 다시 찾아왔습니다. 매출 급등에 대비한 비상 계획은 있었고 올해 들어 잘 작동했지만, 이렇게 지속되는 성장은 예상하지 못했습니다.

전원 커넥터 품절 위기

먼저, 전원 커넥터 소진 속도가 너무 빨라 다음 회로 기판 배송이 오기 전에 재고가 바닥나 Voyager 판매 자체가 불가능해질 수 있다는 사실을 알게 되었습니다.

TinyPilot Power Connector 사진

TinyPilot Power Connector 재고가 며칠 안에 바닥날 뻔했습니다.

개별 판매 제품으로는 품절로 표시했고, 덕분에 소진 속도가 새로 주문한 물량이 도착할 때까지 버틸 만큼 충분히 늦춰졌습니다.

[참고: 제가 Voyager만 판매한다고 그토록 강조해 놓고 왜 아직도 전원 커넥터를 판매하냐고 궁금하시다면 설명드리겠습니다. DIY TinyPilot 가이드를 통해 일부 보조 제품 페이지로 연결되는 링크는 여전히 남아 있지만, TinyPilot 웹사이트만 둘러봐서는 그 페이지를 쉽게 찾을 수 없습니다.]

리본 케이블 품절 위기

다음으로 리본 케이블 재고가 부족해지기 시작했습니다. 원래 대량으로 구매하고 재고도 많아 재고 관리 시스템에서 굳이 추적할 필요가 없을 정도였습니다. 하지만 추적하지 않다 보니 마지막 주문이 지연되고 있다는 사실도 알아차리지 못했습니다. 남은 케이블은 고작 30개, Voyager를 며칠 만들 분량밖에 없었습니다.

TinyPilot에 사용하는 리본 케이블 사진

70mm 리본 케이블이 떨어져 TinyPilot 판매가 거의 중단될 뻔했습니다.

저희는 비규격 크기의 리본 케이블을 사용하기 때문에 특별 주문으로 들여옵니다. 이렇게 하찮은 리본 케이블 때문에 몇 주 동안 판매를 중단해야 하는 걸까요?

다행히 공급업체가 주문을 앞당겨 며칠 안에 새 케이블을 보내주었습니다. 저는 추가로 1,500개를 황급히 더 주문했으니 당분간은 괜찮을 것입니다.

앞으로는 이 케이블도 정규 재고 관리 시스템에서 추적하기로 했습니다. 기존의 느슨한 관리 방식으로는 “여유 있게 새로 주문해도 될 때”와 “비상 상황”을 구분하기 너무 어렵다는 걸 깨달았습니다.

3D 프린팅 규모 확대

마지막으로 아직 해결하지 못한 부족 현상은 케이스입니다. 저희는 빠른 개선을 위해 항상 케이스를 3D 프린팅으로 제작해 왔습니다. 고급스러운 촉감을 주는 3D 프린팅 소재를 사용하고 있으며, 케이스 품질에 대한 고객과 리뷰어들의 호평도 자주 듣습니다.

문제는 3D 프린팅이 느리다는 점이며, 특히 저희가 쓰는 소재는 더 그렇습니다. Voyager 1 케이스 하나를 출력하는 데 8시간이 걸리고, Voyager 2는 12시간이 걸립니다. 3D 프린팅 업체에서 저희를 위해 프린터를 한 대 더 들였지만, Voyager 2로 전환하면 새 용량마저 초과할 것으로 예상합니다. 안타깝게도 업체가 매출이 늘 때마다 프린터를 계속 추가할 수는 없습니다.

단기적으로는 TinyPilot의 유럽 유통사가 저희에게서 케이스를 수입하는 대신 현지에서 직접 출력하고 있어, 프린터 부하가 약 30% 줄어들었습니다. 장기적으로는 3D 프린팅 업체와 함께 더 빠르게 출력하면서도 고급스러운 느낌을 유지하는 다른 소재를 모색 중입니다. 초기 비용이 2만~4만 달러 들지만 주당 수천 개를 생산할 수 있는 사출 성형을 다시 검토할 시점일지도 모릅니다.

사이드 프로젝트를 Google Cloud Platform에서 이전하기

이 회고에서는 주로 본업에 집중해 이야기하지만, 이번 달에는 사이드 프로젝트들을 Google Cloud Platform(GCP)에서 이전하는 재미있는 작업을 했습니다.

저는 약 8년 전부터 GCP를 사용하기 시작했습니다. 당시 대부분의 클라우드 제공업체는 웹 앱 호스팅에 월 10~20달러를 받았습니다. Google의 App Engine이나 Firebase 같은 서비스는 작은 프로젝트의 경우 월 0달러까지 규모를 축소할 수 있어 실험하기에 매력적이었습니다. 월 20달러를 무기한으로 내야 한다는 부담이 없으니 새로운 프로젝트를 더 쉽게 공개할 수 있었습니다.

오늘날 GCP는 작은 프로젝트에는 대개 좋지 않은 선택입니다. 서비스가 너무 비대하고 복잡해서 기본적인 웹 앱 하나를 만들고 배포하는 데도 설정과 권한을 만지는 데만 한 시간쯤 걸립니다. 다행히 비용도 더 저렴하고 개발 경험과 고객 지원도 더 나은 훌륭한 대안들이 있습니다. (고객 지원이 있다는 것 자체가 더 낫다는 뜻입니다.)

GCP를 오래 사용해 온 탓에 여전히 많은 사이드 프로젝트가 Google Cloud Platform에서 돌아가고 있었고, 서비스 요금도 점점 불어났습니다. 지난달 저녁과 주말을 이용해 가장 비용이 많이 드는 서비스들을 GCP에서 이전했습니다.

대대적인 이전 전 GCP 비용은 다음과 같았습니다.

8월부터 10월까지 총 252.71달러의 GCP 비용 그래프

2021년 8월부터 10월까지 GCP에서 사이드 프로젝트를 호스팅하는 데 든 비용

그리고 이전을 마친 뒤 비용은 이렇게 바뀌었습니다.

0을 향해 감소하는 GCP 서비스 요금 그래프

11월에 Google Cloud 대안으로 이전한 뒤의 Google Cloud 서비스 요금

HTTP 로드 밸런싱 - 월 37달러

HTTP 로드 밸런싱은 큰 함정이었습니다.

WanderJest와 What Got Done에서는 사용자가 이미지를 업로드하면 Google Cloud Storage(GCS) 버킷에 저장합니다. 기본적으로 GCS URL은 https://storage.googleapis.com/whatgotdone-public/... 같은 길고 지저분한 형태입니다. 저는 https://media.whatgotdone.com 같은 깔끔한 URL을 원했습니다.

이 간단한 80단계 과정이 GCS 파일을 서브도메인으로 서비스하는 Google식 방법을 설명합니다. 고정 IPv4 주소를 할당하고, HTTP 로드 밸런서를 설정한 뒤, TLS 인증서를 생성해야 합니다. 저는 로드 밸런서 때문에 사이트당 월 약 18달러의 비용이 추가된다는 사실을 모른 채 그 모든 단계를 따라 했습니다.

BunnyCDN으로 갈아타면서 그 비용을 대폭 줄였습니다. CDN 전체를 설정하는 게 번거로울까 걱정했지만, 놀라울 정도로 간단했습니다. BunnyCDN이라는 서비스를 알게 된 지 30분도 안 되어 제 Google Cloud Storage 버킷이 media.whatgotdone.com 도메인으로 서비스되고 있었습니다. GCS 버킷 URL과 원하는 서브도메인을 Bunny에 알려주고 DNS 항목 하나만 추가하면 됐습니다.

BunnyCDN 풀 존 설정 페이지 스크린샷

BunnyCDN 덕분에 단 세 단계 만에 GCS 버킷의 도메인 이름을 원하는 대로 바꿀 수 있었습니다.

BunnyCDN의 최소 요금은 총 월 1달러인 반면, Google은 사이트당 월 약 18달러입니다. 저는 최소 요금에도 한참 못 미칩니다. 지금까지 사용한 대역폭은 78.55MB로, 요금으로 치면 약 0.0008달러 수준입니다. 설령 BunnyCDN의 최소 요금을 초과하더라도 대역폭 단가는 Google의 10분의 1도 안 됩니다.

대역폭 - 월 21달러

아웃바운드 대역폭 요금은 대부분 이 블로그와 Is It Keto에서 나옵니다. 두 사이트 모두 Google Firebase에서 호스팅하고 있었는데, 대역폭 요금이 GB당 0.15달러였습니다. 제 웹사이트들은 합쳐서 월 약 150GB의 대역폭을 제공하지만, 블로그 방문자가 급증하면 그 세 배까지 치솟기도 합니다.

다른 정적 파일 호스팅을 찾아봤지만, 이상하게도 거의 모든 정적 호스팅 제공업체가 전체 CI(지속적 통합) 워크플로를 장악하려 합니다. 저는 그걸 원하지 않습니다. CI는 CI 업체를 쓰고, 호스팅은 호스팅 업체를 쓰고 싶을 뿐입니다.

예전에 Netlify를 알아본 적이 있지만 “저희가 CI까지 맡아야 합니다”라는 식의 호스트라 여겨 제외했습니다. 그러다 Siddhant Goel이 알려준 Netlify의 “manual build” 모드 덕분에 그 모든 CI 관련 번거로움을 건너뛸 수 있다는 걸 알게 되었습니다. 월 19달러 요금제에 대역폭 400GB가 포함되고 초과 시 GB당 0.20달러이니, 방문자가 급증하는 드문 달에도 월 약 20달러만 내면 됩니다.

App Engine - 월 13달러

마지막으로 비중이 컸던 비용은 What Got Done의 App Engine 호스팅이었습니다. 수년간 월 약 2달러였던 비용이 7월에 갑자기 월 10~15달러로 치솟았는데, 이유는 모르겠습니다.

다행히 What Got Done은 일반적인 Go 웹 앱이라 App Engine에서 돌릴 필요가 없습니다. 더 까다로운 의존성은 데이터 저장에 쓰던 Google Firestore였습니다. App Engine과 Firestore를 따로 이전할 수도 있었지만, Google 서비스 계정과 권한을 다루는 일이 너무 번거로워 두 서비스를 한 번에 완전히 떠나기로 했습니다.

Firestore를 대체하기 위해 SQLiteLitestream을 사용했습니다. SQLite는 모든 데이터를 단일 파일에 보관하는 단순한 SQL 데이터베이스입니다. Litestream은 SQLite 데이터베이스를 클라우드에 동기화하는 도구입니다. LogPaste를 만들 때도 같은 기술을 사용했고 잘 작동했기 때문에 더 적극적으로 투자해 보고 싶었습니다.

App Engine을 대체하기 위해서는 fly.io를 사용했습니다. 지난 1년간 fly.io를 시험해 왔는데 일관되게 만족스러웠습니다. 문서가 명확하고 도구가 예상대로 동작하며, 창업자와 핵심 엔지니어들이 지원 포럼에서 활발히 소통합니다.

fly.io로의 이전은 주로 비용 절감과 벤더 종속성 탈피가 목적이었지만, 결과적으로 성능이 엄청나게 개선되었습니다. SQLite와 fly.io로 이전한 뒤 What Got Done의 대부분 API 요청 속도가 2배에서 20배까지 빨라졌습니다.

App Engine과 fly.io 성능 비교 그래프
요청App Engine 지연 시간(ms)fly.io 지연 시간(ms)지연 시간 감소율
최근 게시물 불러오기745.327.396.3%
사용자 프로필 불러오기300.029.390.2%
맞춤 피드 불러오기572.068.788.0%
사용자의 전체 게시물 기록 불러오기215.762.071.3%
조회수 불러오기349.720.094.3%
게시물 발행183.372.760.4%

기존 프로젝트

아직 유지하고 있지만 주력 개발 대상은 아닌 프로젝트들의 간단한 업데이트입니다.

Is It Keto

지표2021년 10월2021년 11월변동
순 방문자20,32117,790-2,531 (-12%)
총 페이지뷰47,48740,722-6,765 (-14%)
도메인 등급(Ahrefs)11.015.0+4.0 (+36%)
AdSense 수익$230.64$235.36+$4.72 (+2%)
Amazon 제휴 수익$27.76$26.25-$1.51 (-5%)
총 수익$258.40$261.61+$3.21 (+1%)

Is It Keto는 여전히 뒤에서 소소한 수익을 내며 유지되고 있습니다. 이번 달에 한 일은 Firebase에서 Netlify로 이전한 것뿐이며, 덕분에 호스팅 비용이 줄었습니다.

Hit the Front Page of Hacker News

지표2021년 10월2021년 11월변동
순 방문자100159+59 (+59%)
Gumroad 수익$75.27$94.57+$19.30 (+26%)
Blogging for Devs 수익$0.00$0.000
총 수익$75.27$94.57+$19.30 (+26%)

제 블로깅 강좌는 지난 한 달 동안 몇 건 판매되었습니다. 블랙 프라이데이 세일을 할까 고민했지만, 사업을 잊고 긴 주말을 즐기고 싶은 마음에 그만두었습니다. 대신 What Got Done을 만지작거리며 즐거운 시간을 보냈으니 잘한 선택이었다고 생각합니다.

Zestful

지표2021년 10월2021년 11월변동
순 방문자613576-37 (-6%)
총 페이지뷰1,4261,489+63 (+4%)
RapidAPI 수익$99.74$727.17+$627.43 (+629%)
총 수익$99.74$727.17+$627.43 (+629%)

Zestful은 이번 달에 약 700달러어치 요청을 한 신규 고객 덕분에 큰 폭으로 상승했습니다. 고객 이름이 낯익어 이메일을 확인해 보니 3년 전에 제가 먼저 연락을 드렸고 당시에는 정중히 거절하셨던 분이었습니다. 아마 몇 년의 고민이 필요했던 모양입니다.

마무리

무엇을 해냈나?

  • TinyPilot 2.3.1 릴리스 배포
  • Voyager 2 출시 준비
  • What Got Done을 GCP와 Firestore에서 fly.io, SQLite, Litestream으로 이전
  • 이 블로그와 Is It Keto 등 몇몇 정적 사이트를 Google Firebase에서 Netlify로 이전

교훈

  • 매출이 상승세를 보이기 시작하면 일찍부터 확장을 고민하라.
  • 작은 프로젝트에는 대개 Google Cloud Platform이 잘못된 선택이다.

다음 달 목표

  • Voyager 2 출시하기.
  • TinyPilot 리브랜딩 공개하기.
    • 이번에는 진짜로.
  • 수요를 감당하기에 충분한 재고를 확보해 허둥대지 않도록 하기.

참고: 이 글에서 일부 서비스를 언급했지만, 고객으로서 이용하는 것 외에는 그 어떤 업체와도 사업적 관계가 없습니다. 블로그에서 진심 어린 추천처럼 보이는 글이 알고 보니 추천 보너스나 제휴 수수료로 수익을 얻는 경우를 저는 싫어하기 때문에, 추천 보너스나 제휴 수수료가 발생하는 링크는 의도적으로 사용하지 않았습니다.

원문은 Michael Lynch님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.