TinyPilot: Month 10

Michael Lynch

TinyPilot: 10개월 차

한 줄 요약

TinyPilot이 첫 제대로 된 사무실을 갖게 되었습니다.

하이라이트

  • TinyPilot이 첫 공식 사무 공간을 마련했습니다.
  • 마케팅 실험을 하나 시도했는데 실패했습니다.
  • 새 사무실의 IT 인프라를 설계하는 일이 즐거웠습니다.

목표 달성 평가

매달 초에 이루고 싶은 목표를 정합니다. 이번 달 목표 달성 결과는 다음과 같습니다.

TinyPilot 매출 $30k 달성

  • 결과: 매출이 46% 증가해 $29k를 기록했습니다
  • 평가: A-

$30k 목표에는 살짝 못 미쳤지만 거의 근접했습니다. 2월부터 이어진 매출 하락세가 멈춰서 다행입니다.

TinyPilot 맞춤형 PoE HAT 프로토타입 제작

작업을 시작할 때 전기 공학 파트너들이 전 세계적인 집적 회로 부족 사태를 감안하긴 했지만, 상황은 예상보다 더 심각했습니다.

보통은 프로토타입을 설계하고 성공적으로 제작한 뒤에 부품을 대량으로 구매합니다. 저희는 구매 시점을 프로토타입을 단순히 설계하는 단계로 앞당길 계획이었습니다. 세 번 시도했는데, 회로 기판을 설계하는 데 걸린 3~4일 사이에 매번 부품이 품절되었습니다. 새로운 전략은 호환되는 부품을 찾는 즉시 핵심 부품 6개월 치를 먼저 확보하고, 설계에 잘 맞기를 바라는 것입니다.

저서 Refactoring English 목차 작성

제 마음에 드는 목차를 썼지만 아직 독자들의 피드백을 모으지는 않았습니다. 다음 단계는 책 메일링 리스트를 대상으로 목차가 독자들이 배우고 싶어 하는 내용과 일치하는지 설문하는 것입니다.

TinyPilot 통계

항목2021년 3월2021년 4월변화
순 방문자5,8055,880+75 (+1%)
총 페이지뷰9,76210,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.56N/A

TinyPilot 새 사무실: 재미있는 이야기

TinyPilot이 드디어 첫 공식 사무 공간을 갖게 되었습니다! 집에서 도보 15분 거리라 위치도 훌륭합니다. 임대는 5월 1일부터 시작되었고, 현재 운영을 옮기는 중입니다.

이사 첫날 TinyPilot 사무실 사진

새 사무실 첫날 (지금은 훨씬 더 정돈되어 있습니다)

여전히 주로 재택근무를 하지만, 제대로 된 사무실을 갖는 일이 생각보다 훨씬 즐겁습니다. 집이 점점 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

참고: 아직 사무실 서버 랙을 설치하지 않아서, 모든 네트워크 장비를 바닥에 그냥 두는 형편없는 상태로 쓰고 있습니다.

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 스위치

TP-Link 8포트 스위치 사진

집에서 쓰는 것과 같은 스위치이고 만족하며 쓰고 있습니다. 다만 PoE 포트가 금방 부족해져서 랙에 장착할 Netgear 16포트 GS116LP를 이미 주문했습니다.

무선 액세스 포인트: Ruckus R310

아직 설치하지 않은 Ruckus 무선 액세스 포인트

이것 역시 집에서 쓰는 것과 같은 모델입니다. 125제곱피트짜리 사무실 하나에는 좀 과한 감이 있습니다.

PoE라서 케이블 하나만 연결하면 되는 점이 마음에 듭니다. 집에 있는 Ruckus도 한 번 설정한 뒤로는 손댈 일이 전혀 없어서 유지보수가 거의 필요 없다는 점이 좋습니다.

프린트 서버: Pi 4B에서 구동 중인 CUPS

Raspberry Pi 프린트 서버 사진

프린트 서버는 놀랍게도 설정이 쉬웠습니다. Pi 4B에 PoE HAT를 장착하고(마침 여분이 많았습니다) cupsprinter-driver-brlaser를 설치했습니다.

프린터가 가끔 말썽을 부리긴 하는데, 제가 인쇄에 사용하는 Linux 클라이언트 문제인지, CUPS 서버 문제인지, 아니면 프린터 자체 문제인지 잘 모르겠습니다.

점프박스 / 배스천 서버: 오래된 Pi 3에서 구동 중인 Tailscale

오래된 Raspberry Pi 3 사진

원격으로 장비에 접속하기 위해 오래된 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 웹 인터페이스에 접속할 수 있습니다.

CUPS 인터페이스 스크린샷

Tailscale을 이용해 집 개발용 PC에서 사무실 프린트 서버를 관리하는 모습

앞으로 들여올 장비

  • 12U 서버 랙
  • HP DL380 G7 랙 마운트 서버
    • 주로 처음으로 서버 랙을 직접 써보고 싶어서입니다.
    • 엄청나게 크고 무게는 60 lbs나 나갑니다.
    • 끔찍한 아이디어였다는 결론이 날지도 모릅니다.
  • Dell Optiplex 3050 Micro(메인 워크스테이션)
    • 그전까지는 17" 테스트용 노트북이 메인 워크스테이션 역할을 하고 있습니다

TinyPilot 새 사무실: 귀찮은 이야기

사무실을 여는 과정에서 재미없는 부분은 온갖 법률과 보험 관련 일입니다.

지금까지는 사람을 ‘독립 계약자’로만 고용해 왔는데, 미국에서는 비교적 간편하고 관료적 절차가 적은 방식입니다. 하지만 원하는 사람 모두를 계약자로 지정할 수는 없습니다. IRS는 계약자와 직원의 구분에 대한 가이드라인을 제시합니다. 제가 필요로 하는 업무의 경우 IRS는 이를 직원 관계로 봅니다. 그래서 온갖 서류 작업을 해야 하고 산재보험에도 가입해야 합니다. 임대 계약상 책임보험과 재산보험 가입도 필수입니다.

TinyPilot은 보험사가 사용하는 업종 분류에 깔끔하게 들어맞지 않습니다. 보험사가 ‘제조업’이라고 하면 보통 사람을 다치게 할 수 있는 중장비를 갖춘 공장을 의미합니다. 저희도 회로 기판을 플라스틱 케이스에 나사로 고정한다는 점에서 ‘제조’를 하긴 하지만, 그 때문에 보험사는 저희 업무를 ‘제조업’으로 분류해 높은 요율을 부과합니다.

HR 관련 일은 더 귀찮았고 아직도 질질 끌고 있습니다. 다른 창업자들의 추천으로 JustWorks를 선택했는데, 제가 순수 소프트웨어 비즈니스가 아니다 보니 제게는 경험이 훨씬 더 나쁜 것 같습니다.

지금까지 JustWorks를 이용해 본 경험은 다음과 같습니다.

  • JustWorks 온보딩 과정에서는 서로 협업하는 기색도 없이 일곱 명의 서로 다른 담당자가 각각 연락해 와 같은 질문을 반복했습니다.
  • JustWorks는 산재보험을 반드시 자신들을 통해 가입해야 한다는 큰 숨은 비용을 교묘히 감추고 있으며, 가입 절차를 시작한 지 일주일이 지나서야 그 사실을 알게 됩니다.
  • JustWorks는 기본적으로 노동법 포스터를 보내고 $50를 청구합니다. 고객이 거부할 수는 있지만, 정말 푼돈까지 뜯어내는 느낌이 듭니다. 네 명짜리 팀에 한 달에 $200를 내고 있는데, 저렴한 포스터 정도는 서비스로 제공해도 될 것 같습니다.

JustWorks에서 가장 답답한 점은 산재보험과 관련해 제 직무를 도매 창고 작업자로 분류했다는 것입니다. 지게차로 거대한 팔레트를 옮기는 사람들과 같은 위험군에 묶인 셈입니다. 제 직무를 순수한 컴퓨터 작업이라고 정의했는데도, 제 급여에 적용되는 보험 요율이 실제로 기기를 조립하는 육체노동을 하는 직원보다 3배나 높습니다. 요율 수정을 요청했지만 JustWorks는 올바른 코드를 배정했다며 자세한 설명도 없이 주장만 되풀이했습니다.

결국 담당 어카운트 매니저와 통화에서 제 업무가 소프트웨어 작성과 인력 관리에 한정되어 있어 창고 작업자로 분류하는 것은 말이 안 된다고 설명했습니다. 그는 이해한다며 산재보험 팀과 이야기해 보겠다고 했습니다. 며칠 뒤 그는 이런 답변을 전해 왔습니다.

이 경우 관리자는 사무실에서 컴퓨터 작업을 수행하더라도 제품과 도매 사업 운영에 노출되어 있습니다. 그래서 고객에게 현재와 같은 분류가 적용된 것입니다. 이러한 노출 때문에 해당 직원은 단순 사무직으로 분류될 수 없습니다.

현시점에서 JustWorks를 갈아타기는 너무 번거로워서, 연말에 GustoOnPay를 비교해 볼 계획입니다.

변호사에게 검토를 부탁했습니다

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과 몇 차례 반복 작업을 해야 했습니다.

총 여섯 시간 정도 개발에 썼습니다. 적게 들린다고 생각할 수도 있지만, 요즘은 일주일에 몇 시간이라도 코딩할 시간을 내면 다행인 상황입니다. 이 프로젝트가 일주일 넘게 쓸 수 있는 코딩 시간을 모조리 삼켜버렸습니다.

Will이 멋진 영상을 만들어 주었지만, 반응은 둘 다 기대에 못 미쳤습니다. 글을 쓰는 현재 기준 통계는 다음과 같습니다.

항목
YouTube 조회수812
메일링 리스트 가입17
전환율2%

영상이 나온 뒤에야 제가 잘못된 질문을 던졌다는 걸 깨달았습니다. Raspberry Pi로 이런 솔루션을 만든 사람은 없었던 게 사실이지만, 이미 휴대폰이나 웹 브라우저로 DSLR을 제어하는 제품들은 존재했습니다. 한 회사는 컴퓨터 네트워크로 카메라를 제어한다는 아이디어를 자신들이 발명했다고 주장하는 특허까지 보유하고 있어, 제가 경쟁 제품을 만들면 소송을 당할 가능성도 있었습니다.

모든 DSLR 관련 코드를 코드베이스의 별도 실험 브랜치에 보관한 건 다행한 선견지명이었습니다. 처음에는 변경이 작아서 일반 TinyPilot 소프트웨어에 기능으로 추가해도 되겠다고 생각했습니다. 그렇게 하지 않은 게 천만다행입니다. 그랬다면 코드에 엄청난 복잡성이 생기고 99%의 사용자가 원하지 않는 기능으로 UI만 어지러워졌을 것입니다.

기존 프로젝트

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

Is It Keto

항목2021년 3월2021년 4월변화
순 방문자63,49356,094-7,399 (-12%)
총 페이지뷰141,199123,723-17,476 (-12%)
도메인 점수(Ahrefs)11.011.00
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월변화
순 방문자185114-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월변화
순 방문자480892+412 (+86%)
총 페이지뷰1,3672,132+765 (+56%)
RapidAPI 수익$21.97$40.82+$18.85 (+86%)
총 수익$21.97$40.82+$18.85 (+86%)

Zestful은 계속 유지보수 모드로 운영되고 있습니다. 엔터프라이즈 플랜에 대한 문의가 늘었지만, 가격을 듣고 나면 논의가 금방 시들해집니다. TinyPilot에서 관심을 돌리는 데 따르는 기회비용을 반영해 더 높은 가격을 제시하고 있습니다.

다만 엔터프라이즈 문의 중 상당수는 진지하게 받아들이기 어렵습니다. 문의가 종종 “종량제 플랜이 너무 비싼데요. 엔터프라이즈 플랜은 얼마인가요?”로 시작하기 때문입니다.

마무리

무엇을 해냈나요?

  • TinyPilot 사상 첫 사무실 임대 계약을 체결했습니다.
  • 사무실에서 파트타임으로 근무할 직원 두 명을 채용했습니다.
  • 신입 직원을 위해 TinyPilot 내부 프로세스의 약 50%를 문서화했습니다.
  • 가상 스토리지와 비디오 스트림 튜닝 지원을 추가한 TinyPilot 1.5.0의 코드 작성을 완료했습니다.
  • 블로그 글 “How Litestream Eliminated My Database Server for $0.03/month”를 발행했습니다.

배운 점

  • 실시간 대화 중에 새 프로젝트를 덜컥 수락하지 않기.
    • 작아 보여도 생각보다 훨씬 복잡할 가능성이 높습니다.
    • 그 작업이 들일 노력만큼 가치가 있는지 숙고할 시간이 더 필요합니다.
  • 변화에 더 많은 시간을 배정하기.
    • TinyPilot은 현재 두 가지 큰 변화를 동시에 겪고 있습니다. 첫 사무실로의 이전과 신입 직원의 제로부터의 교육입니다.
    • 두 가지 모두 시간이 걸릴 거라 예상은 했지만, 예상치 못한 업무를 처리할 여유를 더 두었어야 했습니다.

다음 달 목표

  • TinyPilot 매출을 $33k로 늘리기.
  • TinyPilot의 운영을 새 사무실로 완전히 이전하기.
  • Refactoring English 목차에 대한 피드백을 모아 개선하기.

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

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