TinyPilot: Month 17

Michael Lynch

TinyPilot: 17개월 차

원문은 Michael Lynch님이 에 게재했습니다. 이 블로그 구독하기

한 줄 요약

링크 하나를 없애 매출 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 Voyager에 집중했다. 제품 라인업이 Voyager와 판매량이 많지 않은 액세서리만 남게 되자 카탈로그 페이지를 없애기로 했다.

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

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

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

지난달 회고에서 판매량이 상승 추세를 보이기 시작했다고 언급하며 제품 구성을 단순화한 것과 관련이 있을지 궁금하다고 한 적이 있다. 한 달 치 데이터가 더 쌓인 지금, 그 조치가 큰 차이를 만들었다고 확신한다.

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

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

이전에도 판매량이 급증한 적은 있었지만, 항상 YouTube 언급이나 인기 웹사이트의 리뷰 같은 뚜렷한 계기가 뒤따랐다. 판매량은 급등한 뒤 서서히 가라앉곤 했다.

단일 제품으로 통합한 이후 판매량은 과거 급증했을 때만큼 높은 수준을 유지하고 있지만, 일회성 이벤트 때처럼 점차 줄어드는 모습은 보이지 않는다.

판매 증가가 카탈로그 페이지를 없앤 덕분이라면, TinyPilot에서 내가 한 일 중 투자 대비 효과가 가장 높은 일이다. 링크 하나를 없애 매출이 62%나 뛰었다!

다시 찾아온 성장통

TinyPilot 초기 6개월 동안은 성장 속도를 따라가느라 늘 허둥댔다. 매출이 4~8주마다 두 배로 늘었기 때문에 계속해서 새로운 공급처를 찾고 사업을 확장하기 위해 프로세스를 새로 만들어야 했다. 그런 성장은 짜릿했지만 동시에 녹초가 되게 했다. 2021년 대부분은 좀 더 안정적이고 예측 가능한 속도로 자리 잡아 다행이었다.

최근 매출 증가로 성장통이 다시 찾아왔다. 판매 급증을 대비한 비상 계획은 올해 잘 작동했지만, 이번처럼 지속되는 성장은 예상하지 못했다.

전원 커넥터가 바닥나다

먼저 전원 커넥터 소모 속도가 너무 빨라 다음 회로 기판 배송이 도착하기 전에 바닥날 수 있다는 걸 알게 됐다. 그렇게 되면 Voyager 판매 자체가 불가능해진다.

TinyPilot Power Connector 사진

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

개별 판매는 품절로 표시했고, 덕분에 소모 속도가 새 물량이 도착할 때까지 버틸 만큼만 늦춰졌다.

[덧붙임: Voyager 외에는 아무것도 팔지 않는다고 그렇게 강조해놓고 왜 아직도 전원 커넥터를 팔았는지 궁금하다면 설명할 수 있다. DIY TinyPilot 가이드에는 TinyPilot 보조 제품들로 연결되는 링크가 여전히 있지만, TinyPilot 웹사이트를 방문해서는 그런 페이지를 쉽게 찾을 수 없다.]

리본 케이블이 바닥나다

다음으로는 리본 케이블이 부족해지기 시작했다. 보통 대량으로 구매하고 재고가 워낙 많아 재고 시스템에서 따로 관리할 필요조차 없다고 여겼다. 하지만 추적하지 않다 보니 마지막 주문이 늦어지고 있다는 사실도 알아차리지 못했다. 남은 케이블은 30개뿐이었고, 며칠 치 Voyager 생산분밖에 되지 않았다.

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

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

우리는 비표준 크기의 리본 케이블을 써서 특별 주문으로 들여온다. 이렇게 사소한 리본 케이블 때문에 몇 주 동안 판매를 중단해야 할 판이었다.

다행히 공급업체가 주문을 앞당겨 며칠 안에 새 케이블을 보내줬다. 불안한 마음에 1,500개를 추가로 사두었으니 당분간은 괜찮을 것이다.

게다가 이제부터는 이 케이블도 정상적인 재고 시스템에서 관리하기로 했다. 비공식적인 관리 방식으로는 “여유 있게 새로 주문할 때”와 “비상 상황”을 구분하기가 너무 어렵다는 걸 깨달았다.

3D 프린팅 규모 확대

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

문제는 3D 프린팅이 느리다는 점이며, 특히 우리가 쓰는 소재는 더 그렇다. Voyager 1 케이스 하나를 출력하는 데 8시간이 걸리고, Voyager 2는 12시간이 걸린다. 3D 프린팅 업체에서 우리를 위해 프린터를 한 대 더 들였지만, Voyager 2로 전환하면 늘어난 생산량으로도 감당하기 어려울 것 같다. 안타깝게도 판매량이 늘 때마다 업체가 프린터를 계속 추가할 수는 없다.

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

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

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

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

오늘날 GCP는 소규모 프로젝트에 대체로 좋지 않은 선택이다. 서비스가 너무 비대하고 복잡해서 기본적인 웹 앱 하나를 만들고 배포하는 데도 설정과 권한을 만지작거리는 데만 한 시간쯤 걸린다. 다행히 GCP보다 비용이 저렴하고 개발 경험이 좋으며 고객 지원(그나마 ‘지원’이라 부를 만한 무언가가 있다는 의미에서)이 훨씬 나은 훌륭한 대안들이 있다.

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

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

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

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

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

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

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

HTTP 로드 밸런싱 - 월 37달러

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

What Got Done과 WanderJest에서는 사용자가 이미지를 업로드하면 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 도메인을 통해 서비스되고 있었다. Bunny에 GCS 버킷 URL과 원하는 서브도메인을 알려주고 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의 “수동 빌드” 모드를 알게 됐는데, 이를 이용하면 그들의 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 리브랜딩 출시하기.
    • 이번엔 진짜로.
  • 수요를 따라가느라 허둥대지 않을 만큼 충분한 재고를 확보하기.

참고: 이 글에서 몇몇 서비스를 언급했지만, 고객으로서 이용하는 것 외에는 그 어떤 업체와도 사업적 관계가 없다. 블로그에서 진심 어린 추천처럼 보이는 글을 읽다가 알고 보니 작성자가 추천 수수료로 이익을 얻고 있었다는 사실을 알게 되는 걸 정말 싫어하기 때문에, 추천 보너스나 제휴 수수료가 발생하는 링크는 의도적으로 사용하지 않았다.

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

댓글