TinyPilot: 10개월 차
원문은 Michael Lynch님이 에 게재했습니다. 이 블로그 구독하기
한 줄 요약
TinyPilot이 첫 제대로 된 사무실을 갖게 됐다.
하이라이트
- TinyPilot이 첫 공식 사무 공간을 마련했다.
- 마케팅 실험을 시도했지만 실패했다.
- 새 사무실을 위한 IT 인프라 설계가 재미있다.
목표 달성 평가
매달 초에 달성하고 싶은 목표를 정한다. 이번 달 목표 달성 결과는 다음과 같다.
TinyPilot 매출 3만 달러 달성
- 결과: 매출 46% 증가, 2만 9천 달러 달성
- 등급: A-
3만 달러 목표에는 조금 못 미쳤지만 거의 근접했다. 2월부터 이어진 매출 하락세가 멈춰 다행이다.
TinyPilot 전용 PoE HAT 시제품 제작
- 결과: 전 세계적인 칩 부족 사태로 시제품이 최소 한 달 지연됐다
- 등급: D
작업을 시작할 때 전기공학 파트너들은 집적 회로의 전 세계적 공급 부족을 고려했지만, 상황은 예상보다 더 심각했다.
보통은 시제품을 성공적으로 설계하고 제작한 뒤 부품을 대량으로 구매한다. 우리는 구매 시점을 시제품을 설계하는 단계로 앞당길 계획이었다. 세 번 시도했지만, 회로 기판을 설계하는 데 걸린 3~4일 사이에 매번 부품이 품절됐다. 새로운 전략은 호환 가능한 부품을 찾는 즉시 핵심 부품 6개월치를 미리 구매하고, 우리 설계에서 제대로 작동하기를 바라는 것이다.
저서 Refactoring English 목차 작성
- 결과: 목차 작성을 완료해 책 소개 페이지에 공개했다
- 등급: A
나름 만족스러운 목차를 썼지만 아직 독자들의 피드백을 모으지는 않았다. 다음 단계는 메일링 리스트 구독자들을 대상으로 목차가 그들이 배우고 싶어 하는 내용과 일치하는지 설문조사를 진행하는 것이다.
TinyPilot 통계
| 지표 | 2021년 3월 | 2021년 4월 | 변동 |
|---|---|---|---|
| 순 방문자 | 5,805 | 5,880 | +75 (+1%) |
| 총 페이지뷰 | 9,762 | 10,483 | +721 (+7%) |
| 판매 매출 | $19,782.96 | $28,880.65 | +$9,097.69 (+46%) |
| 후원금 | $19.92 | $0.00 | -$19.92 (-100%) |
| 총 매출 | $19,802.30 | $28,880.65 | +$9,078.35 (+46%) |
| 순이익 | -$352.77 | $843.56 | N/A |
TinyPilot의 새 사무실: 재미있는 부분
TinyPilot이 드디어 첫 공식 사무 공간을 갖게 됐다! 집에서 도보 15분 거리라 입지도 훌륭하다. 임대는 5월 1일부터 시작됐고, 현재 운영을 이전하는 중이다.

새 사무실 첫날 (지금은 훨씬 정리됐다)
여전히 주로 재택근무를 하지만, 제대로 된 사무실을 갖는 것이 생각보다 훨씬 즐겁다. 집이 점점 TinyPilot 창고가 되어가고 있었는데, 모든 것을 사무실로 옮기고 가득 찬 찬장 두 개와 큰 옷장을 되찾으니 속이 시원하다.
새 사무실에서 의외로 즐거웠던 또 다른 부분은 기술 인프라를 고르는 일이었다. 현재 사용 중인 장비들을 간단히 소개한다.
도어락: Yale Assure Lever

사무실에는 원래 잠금 가능한 일반 문손잡이가 있었지만, 임시 출입을 더 잘 관리할 방법이 필요했다. 또 직원과의 관계가 틀어져 헤어지게 될 경우, 어딘가에 사무실 열쇠 사본이 남아 있을까 봐 걱정하고 싶지 않았다.
August 스마트락에 대한 좋은 평을 들었지만, 그 회사는 데드볼트만 만든다. Yale이 2017년에 August를 인수했고, August 소프트웨어가 탑재된 도어 래치를 만든다.
Yale 인수 때문인지는 모르겠지만 설치 과정은 놀라울 정도로 엉망이었다. 앱 안내가 불명확하고 하드웨어나 WiFi에 문제가 생기면 오류를 제대로 처리하지 못하고 그냥 실패해 버려서, 설정의 모든 단계마다 최소 세 번씩은 시도해야 했다.
이제 설치를 마치고 나니 주머니에서 열쇠를 꺼내지 않고도 문을 열 수 있어 편하고, 누가 사무실을 드나들었는지 기록이 남는 것도 마음에 든다.
프린터: Zebra LP2844(배송 라벨용)와 Brother HL-2300D(일반 문서용)

나는 네트워크 프린터, 특히 WiFi로 연결되는 프린터와는 유독 궁합이 안 맞는다. Brother 프린터는 그냥 단순한 USB 프린터라서 아래에 소개할 전용 프린트 서버를 통해 로컬 네트워크에 공유하고 있다. 집에서도 같은 모델을 쓰고 있는데 믿을 만해서 사무실용으로도 좋은 선택이라고 생각했다.
Zebra 프린터는 원래 집에서 쓰고 있던 것을 그대로 사무실로 옮겼다. 작동은 하지만 Windows PC에서처럼 잉크 농도 설정을 조절할 수 없어서 라벨이 전보다 조금 읽기 어렵게 나온다.
라우터: Qotom Q355G4 미니 PC에서 구동 중인 OPNsense
참고: 아직 사무실 서버 랙을 설치하지 않아서 모든 네트워크 장비를 바닥에 그냥 두고 있다. 마치 짐승처럼.


집에서는 Ubiquiti EdgeRouter 4를 쓰고 있지만, Ubiquiti는 올해 들어 급격히 내리막길을 걷고 있다. pfSense가 인기 있는 대안이지만 오픈소스라고 거짓말을 하는 것 같다. 여러 경로로 들은 바로는 OPNsense가 pfSense의 ‘착한’ 포크라고 한다.
Qotom Q355G4 미니 PC는 OPNsense를 돌리기에 인기 있는 선택이라 Amazon에서 하나 구입했다. 물론 새로운 가상 스토리지 마운트 기능 덕분에 TinyPilot만으로 OS를 설치했다.
지금까지 OPNsense는 만족스럽다. Ubiquiti보다는 복잡하지만 MikroTik보다는 훨씬 직관적이다. 메뉴를 찾아다니는 정도는 할 수 있지만 아직 설정을 이것저것 만져볼 만큼 익숙하지는 않다.
스위치: TP-Link 8포트 PoE 스위치

집에서 쓰는 것과 같은 스위치이고 마음에 든다. 다만 PoE 포트가 빠르게 부족해지고 있어서 랙에 장착할 Netgear 16포트 GS116LP를 이미 주문했다.
무선 액세스 포인트: Ruckus R310

이것 역시 집에서 쓰는 것과 같은 모델이다. 125제곱피트(약 11.6㎡)짜리 사무실 하나에는 좀 과분할지도 모른다.
PoE라 케이블 하나만 있으면 되는 점이 마음에 든다. 집에 있는 Ruckus는 한 번 설정한 뒤로 다시 만질 일이 전혀 없었는데, 이렇게 손이 거의 안 가는 점이 좋다.
프린트 서버: Pi 4B에서 구동 중인 CUPS

프린트 서버는 의외로 설정이 쉬웠다. Pi 4B에 PoE HAT을 꽂고(마침 여분이 많다) cups와 printer-driver-brlaser를 설치했다.
프린터가 가끔 말썽을 부리긴 하는데, 원인이 내가 인쇄에 쓰는 Linux 클라이언트인지, CUPS 서버인지, 프린터 자체인지 잘 모르겠다.
점프박스 / 배스천 서버: 오래된 Pi 3에서 구동 중인 Tailscale

원격으로 장비에 접속하기 위해 오래된 Raspberry Pi 3에 Tailscale을 설치했다. 그리고 집 데스크톱에도 Tailscale을 설치해 두 기기 모두 인터넷에 연결되어 있으면 Tailscale 가상 네트워크로 연결되도록 했다.
라우터에 접속해야 할 때는 집 데스크톱에서 다음 명령을 실행한다.
ssh bastion -L 443:192.168.1.1:443짜잔! 이제 라우터 관리 대시보드에 접속할 수 있다.
사무실 프린트 서버(franklin)를 관리하고 싶을 때는 다음 명령을 실행한다.
ssh -J bastion franklin -L 631:localhost:631그러면 franklin의 CUPS 웹 인터페이스에 접속할 수 있다.

Tailscale을 이용해 집 개발 머신에서 사무실 프린트 서버를 관리하는 모습
앞으로 들일 것들
- 12U 서버 랙
- HP DL380 G7 랙 마운트 서버
- 주로 처음으로 서버 랙을 써보고 싶어서.
- 엄청나게 크고 무게는 60파운드(약 27kg)나 된다.
- 끔찍한 아이디어였음이 드러날 수도 있다.
- Dell Optiplex 3050 Micro(메인 워크스테이션)
- 당분간은 17인치 테스트용 노트북이 메인 워크스테이션 역할을 하고 있다
TinyPilot의 새 사무실: 귀찮은 부분
사무실을 여는 과정에서 재미없는 부분은 온갖 법률과 보험 업무다.
지금까지는 사람을 ‘독립 계약자’로만 고용했는데, 미국에서는 비교적 가볍고 관료적이지 않은 절차다. 하지만 아무나 계약자라고 선언할 수 있는 건 아니다. IRS는 계약자와 직원의 구분에 대한 가이드라인을 제시한다. 내가 필요로 하는 업무는 IRS 기준으로 직원 관계에 해당한다. 그래서 온갖 서류 작업을 하고 산재보험에 가입해야 한다. 임대 계약상 배상책임보험과 재산보험에도 가입해야 한다.
TinyPilot은 보험사들이 사용하는 업종 분류에 깔끔하게 들어맞지 않는다. 보험사가 말하는 ‘제조업체’란 보통 사람을 다치게 할 수 있는 중장비가 있는 공장을 의미한다. 우리는 회로 기판을 플라스틱 케이스에 나사로 고정한다는 점에서 ‘제조’를 하지만, 보험사는 이를 ‘제조업’으로 보고 높은 요율을 부과한다.
HR 업무는 더 귀찮았고 지금도 계속 질질 끌리고 있다. 다른 창업자들의 추천을 받아 JustWorks를 선택했는데, 내가 순수 소프트웨어 비즈니스가 아니다 보니 경험이 훨씬 더 나쁜 것 같다.
지금까지 JustWorks를 이용한 경험은 다음과 같다.
- JustWorks 온보딩 과정에서는 서로 협업하는 것 같지도 않은 일곱 명의 다른 담당자가 각각 연락해 같은 질문을 반복했다.
- JustWorks는 산재보험을 자신들을 통해 의무적으로 구매해야 한다는 큰 숨은 비용을 숨겨두고 있는데, 가입 절차를 시작한 지 일주일이 지나서야 알게 된다.
- JustWorks는 기본적으로 노동법 포스터를 보내고 50달러를 청구한다. 고객은 선택 해제가 가능하지만, 정말 치사하게 푼돈까지 뜯는 느낌이다. 네 명짜리 팀에 한 달에 200달러를 내고 있는데 저렴한 포스터 정도는 그냥 서비스로 줄 법도 하다.
JustWorks에서 가장 답답한 부분은 산재보험상 내 직무를 도매 창고 작업자로 분류한 것이다. 나는 지게차로 거대한 팔레트를 옮기는 사람들과 같은 위험군에 속해 있다. 내 직무를 순수 컴퓨터 업무라고 명시했는데도 내 급여에 적용되는 보험 요율은 실제로 기기를 조립하는 등 육체노동을 하는 직원들보다 3배나 높다. 요율을 바로잡으려 하자 JustWorks는 올바른 코드를 배정했다고만 주장하며 자세한 설명을 거부했다.
결국 담당 매니저와 통화를 해서 내 업무는 소프트웨어를 작성하고 사람을 관리하는 것에 국한되므로 창고 작업자로 분류하는 것은 말이 안 된다고 설명했다. 그는 이해한다며 산재보험 팀과 이야기해보겠다고 했다. 며칠 뒤 그가 전달한 메시지는 다음과 같았다.
이 경우 관리자는 사무실에서 컴퓨터 업무를 수행하더라도 제품과 도매 사업 운영에 노출되어 있습니다. 그래서 고객에게 현재와 같은 분류가 적용된 것입니다. 이러한 노출 때문에 해당 직원을 단순 사무직으로 분류할 수 없습니다.
지금 당장 JustWorks에서 갈아타기는 너무 어렵지만, 연말에는 Gusto와 OnPay를 비교해 볼 계획이다.
변호사에게 확인해 보겠습니다
Mike Monteiro의 유명한 강연 “F— You, Pay Me”를 다시 보고 영감을 받아, 생애 처음으로 사업 계약서 검토를 위해 변호사를 고용했다.
Monteiro의 조언은 주로 컨설턴트와 계약자를 위한 것이지만, 대부분은 창업자에게도 적용된다. 그는 변호사 없이 상대방이 계약 조건을 모두 정하도록 내버려 두면 엄청난 힘을 잃게 된다고 주장한다. 좋은 변호사는 나쁜 계약으로부터 보호해 주는 것만으로 충분히 제값을 한다. 사업 규모가 변호사를 쓰기에는 너무 작아 보여도 마찬가지다.
상업용 임대 계약을 맺어본 적이 없어서 무엇이 정상인지 몰랐기에 변호사와 상담하기 좋은 기회라고 생각했다. 그 때문에 임대 과정에 스트레스가 많은 일주일이 추가됐다. 지연된 이유는 두 가지를 동시에 진행했기 때문이다. 처음으로 변호사를 고용하는 일과 그에게 임대 계약서를 검토시키는 일이었다.
결과는 그래도 재미있었다. “이건 변호사와 검토해 봐야겠습니다”라고 말할 수 있게 되니 진짜 사업가가 된 기분이 들었다. 그리고 변호사는 임대 계약서에서 모순을 찾아냈고, 인터넷 사용 가능 여부나 임대 공간에 대한 집주인의 출입 권한 제한 등 나에게 중요한 조항에 대해 더 명확한 문구를 제안해 줬다.
잘못된 방향의 홍보 실험
Will Yarborough는 TinyPilot을 가장 먼저 리뷰한 유튜버 중 한 명으로, 나는 그와 함께 TinyPilot의 더 흥미로운 활용 사례를 함께 만들어보고 싶었다.
화상 통화로 아이디어를 브레인스토밍하던 중 Will이 TinyPilot으로 DSLR 카메라를 제어하는 아이디어를 제안했다. 거의 모든 DSLR은 HDMI 출력을 제공하고 카메라 셔터를 작동시키기 위한 단순한 전자 인터페이스를 제공한다.
TinyPilot은 소프트웨어로 켜고 끌 수 있는 전자 핀이 있는 Raspberry Pi에서 구동된다. TinyPilot 웹 인터페이스에 Pi의 핀 하나를 제어하는 버튼을 추가하면, Will이 그것을 카메라 셔터에 연결하는 회로를 만들 수 있을 것이다.
정말 훌륭한 아이디어처럼 보였다! TinyPilot에 완전히 새로운 시장을 열어줄 수도 있었다. 다른 사람들이 Raspberry Pi로 DSLR 셔터를 제어하는 방법을 블로그에 올린 적은 있지만, 영상 캡처와 결합해 세련된 웹 인터페이스에 모두 담은 사람은 아무도 없었다.
Will이 회로를 만들고 영상을 촬영하는 등 힘든 일을 맡아주니 이건 완전히 성공이 보장된 것처럼 느껴졌다. 내가 할 일은 웹 UI에 버튼 하나 추가하는 것뿐이었다. 길어야 한 시간이면 될 일이었다.
막상 소프트웨어 부분을 구현하려고 앉아보니 버튼 하나 추가하는 것보다 할 일이 훨씬 많다는 걸 금방 깨달았다. Raspberry Pi의 전자 인터페이스를 제어하는 데 필요한 라이브러리를 포함하도록 TinyPilot 인스톨러를 업데이트해야 했다. 또 버튼을 아무 데나 둘 수는 없어서 말이 되는 위치에 배치하려고 UI를 재배치해야 했다. 작동하는 솔루션을 만든 뒤에도 다양한 카메라에서 무엇이 통하는지 알아내면서 Will과 몇 차례 반복 작업을 해야 했다.
다 합치면 이 작업에 약 6시간의 개발 시간을 썼다. 적게 들린 수도 있지만, 요즘은 일주일에 몇 시간이라도 코딩할 시간을 내면 다행인 상황이다. 이 프로젝트가 일주일 넘게 내 모든 코딩 시간을 흡수했다.
Will이 멋진 영상을 만들어 줬지만, 반응은 우리 둘 다 기대 이하였다. 글을 쓰는 현재 기준 통계는 다음과 같다.
| 지표 | 값 |
|---|---|
| YouTube 조회수 | 812 |
| 메일링 리스트 가입 | 17 |
| 전환율 | 2% |
영상이 나온 뒤에야 나는 잘못된 질문을 하고 있었다는 걸 깨달았다. Raspberry Pi로 이런 솔루션을 만든 사람은 없었던 게 사실이지만, 이미 휴대폰이나 웹 브라우저로 DSLR을 제어하는 제품들은 존재했다. 한 회사는 컴퓨터 네트워크를 통해 카메라를 제어한다는 아이디어를 발명했다고 주장하는 특허까지 보유하고 있어서, 내가 경쟁 제품을 만들면 소송을 당할 수도 있다.
모든 DSLR 코드를 코드베이스의 별도 실험 브랜치에 보관한 것은 다행이었다. 처음에는 변경 규모가 작아서 일반 TinyPilot 소프트웨어에 기능으로 추가해도 되겠다고 생각했다. 그렇게 하지 않은 것이 천만다행이었다. 그랬다면 코드에 엄청난 복잡성을 더하고 99%의 사용자가 원하지 않는 기능으로 UI를 어지럽혔을 것이다.
기존 프로젝트
여전히 유지보수하고 있지만 현재 주력 개발 대상은 아닌 프로젝트들에 대한 간단한 업데이트다.
Is It Keto
| 지표 | 2021년 3월 | 2021년 4월 | 변동 |
|---|---|---|---|
| 순 방문자 | 63,493 | 56,094 | -7,399 (-12%) |
| 총 페이지뷰 | 141,199 | 123,723 | -17,476 (-12%) |
| 도메인 등급(Ahrefs) | 11.0 | 11.0 | 0 |
| AdSense 수익 | $611.99 | $560.20 | -$51.79 (-8%) |
| Amazon 제휴 수익 | $337.29 | $116.78 | -$220.51 (-65%) |
| 총 수익 | $949.28 | $676.98 | -$272.30 (-29%) |
Is It Keto는 여전히 조용히 백그라운드에서 돌아가고 있다. 작년과 같은 패턴을 따르고 있다. 새해를 맞아 시작한 다이어트에 대한 관심이 식으면서 서서히 인기가 하락하고 있다.
Amazon 제휴 수익이 불균형적으로 떨어졌지만, 지난달이 예외적으로 높았기 때문이다.
Hit the Front Page of Hacker News
| 지표 | 2021년 3월 | 2021년 4월 | 변동 |
|---|---|---|---|
| 순 방문자 | 185 | 114 | -71 (-38%) |
| Gumroad 수익 | $313.63 | $341.61 | +$27.98 (+9%) |
| Blogging for Devs 수익 | $655.20 | $109.20 | -$546.00 (-83%) |
| 총 수익 | $968.83 | $450.81 | -$518.02 (-53%) |
내 강의는 여전히 소량으로 꾸준히 팔리고 있다. 지난달에는 Monica Lent의 Blogging for Devs 커뮤니티 덕분에 큰 폭으로 증가했다. 3월에 Monica가 자신의 회원들에게 내 강의를 무료 혜택으로 제공하기 시작했고, 고유 다운로드 건마다 나에게 로열티를 지급했다. 그 초반 러시는 이제 가라앉았다.
사람들이 계속해서 강의를 찾아주고 배운 점을 공유해 주어 기쁘다. CourseMaker의 Chris Samiullah가 자신의 노트를 공개하며 내 강의 덕분에 /r/programming 서브레딧 1위를 차지할 수 있었다고 언급했다.
Zestful
| 지표 | 2021년 3월 | 2021년 4월 | 변동 |
|---|---|---|---|
| 순 방문자 | 480 | 892 | +412 (+86%) |
| 총 페이지뷰 | 1,367 | 2,132 | +765 (+56%) |
| RapidAPI 수익 | $21.97 | $40.82 | +$18.85 (+86%) |
| 총 수익 | $21.97 | $40.82 | +$18.85 (+86%) |
Zestful은 계속 유지보수 모드로 운영 중이다. Enterprise 플랜에 대해 문의하는 사람이 늘었지만, 가격을 듣고 나면 대화가 금방 시들해진다. TinyPilot에서 관심을 돌릴 때의 기회비용을 반영해 더 높은 가격을 제시하고 있다.
다만 Enterprise 문의 중 상당수는 진지하게 받아들이기 어렵다. 문의는 종종 “종량제 플랜이 너무 비싸서요. Enterprise 플랜은 얼마인가요?”로 시작한다.
마무리
무엇을 해냈나?
- TinyPilot 사상 첫 사무 공간 임대 계약을 체결했다.
- 사무실에서 파트타임으로 근무할 신규 직원 두 명을 채용했다.
- 신규 직원을 위해 TinyPilot 내부 프로세스의 약 50%를 문서화했다.
- TinyPilot 1.5.0 코드 작성을 완료해 가상 스토리지와 비디오 스트림 튜닝 지원을 추가했다.
- 블로그 글 “How Litestream Eliminated My Database Server for $0.03/month”를 발행했다.
배운 점
- 라이브 토론 중에 새 프로젝트를 덜컥 수락하지 말 것.
- 작아 보여도 생각보다 복잡할 가능성이 높다.
- 그 일을 할 가치가 있는지 숙고할 시간이 더 필요하다.
- 변화에 더 많은 시간을 할애할 것.
- TinyPilot은 두 가지 큰 변화를 동시에 겪고 있다. 첫 사무실로의 이전과 신규 직원의 제로베이스 교육이다.
- 두 가지 모두 시간이 걸릴 것이라고 예상했지만, 예상치 못한 업무를 처리할 여유를 더 두었어야 했다.
다음 달 목표
- TinyPilot 매출을 3만 3천 달러로 늘리기.
- TinyPilot 운영을 새 사무실로 완전히 이전하기.
- Refactoring English 목차에 대한 피드백을 모아 개선하기.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기