만드는 사람

AppOrbit은 10년 차 프론트엔드 개발자 JunGyu Kim이 혼자 운영하는 개인 개발 스튜디오입니다. 기획, 디자인, 개발, 스토어 심사, 출시 이후 운영까지 전 과정을 직접 합니다. 팀이 없으니 인수인계도 없고, 대신 내가 내린 결정의 결과를 전부 내가 다시 받아 보게 됩니다.

만드는 앱은 전부 직접 겪은 불편에서 출발했습니다. 새벽에 한 손으로 수유를 기록할 방법이 마땅치 않아서 육아 기록 앱을 만들었고, 지도 리뷰가 광고와 체험단으로 오염돼 믿기 어려워서 동네 사람에게 직접 묻는 맛집 앱을 만들었습니다. 남이 겪는 문제를 상상해서 만든 적은 아직 없습니다. 내가 매일 쓰지 않을 앱은 결국 유지가 안 된다는 걸 몇 번 겪었기 때문입니다.

어떻게 만드나

출시는 완성이 아니라 시작이라는 걸 데일리베이비에서 배웠습니다. 1.0을 올리고 반년이 지나는 동안 버전은 2.9가 됐는데, 그 사이 추가한 것보다 고친 것이 훨씬 많았습니다. 개발 중에는 보이지 않던 문제가 실제 기기와 실제 사용자에게서 나옵니다. 실시간 동기화가 백그라운드에서 조용히 끊기고, 전역 오버레이 하나가 앱 전체를 느리게 만들고, GPS가 실내에서 옆 동네를 가리킵니다.

그래서 기능을 늘리는 속도보다 이미 낸 기능이 실제로 동작하는지를 더 중요하게 봅니다. 새 기능 하나를 붙이기 전에 크래시 리포트와 문의 메일을 먼저 봅니다. 이 사이트의 블로그도 성공담이 아니라 대부분 그렇게 망가진 것을 쫓아가서 고친 기록입니다.

만든 것들

맛도리는 앱과 별도로 웹 버전을 함께 운영합니다. 앱을 설치하지 않아도 동네별 맛집 랭킹, 유명인이 다녀간 가게, 역세권 목록을 로그인 없이 볼 수 있습니다. 이 밖에 짧게 만들어 본 웹 실험들은 Lab에 모아 두었습니다.

주로 쓰는 것들

도구는 유행보다 혼자서 끝까지 유지할 수 있는지를 기준으로 고릅니다. 앱 세 개와 웹 여러 개를 동시에 굴려야 하니 스택이 갈라질수록 유지 비용이 그대로 늘어납니다.

React NativeExpoNext.jsTypeScriptSupabaseFlutterVercel
  • React Native모바일 앱 3종의 공통 기반
  • ExpoOTA 업데이트로 급한 수정을 스토어 심사 없이 배포
  • Next.js앱의 웹 버전과 이 사이트
  • TypeScript앱과 서버가 같은 타입을 공유
  • Supabase인증과 실시간 동기화
  • Flutter단발성 실험에서 사용
  • Vercel웹 전부를 여기서 배포

블로그에 남기는 것

블로그에는 앱을 만들며 실제로 막혔던 지점과 그걸 어떻게 뚫었는지를 씁니다. 무엇을 골랐는지보다 무엇을 고르지 않았는지, 그리고 왜 처음 시도가 실패했는지를 남기려고 합니다. 검색해서 들어온 사람이 같은 문제를 겪고 있을 때 바로 다음 줄부터 읽을 수 있는 글을 목표로 합니다.

혼자 만들면서 지키는 것

혼자 하면 빠르지만 검토해 줄 사람이 없습니다. 그래서 되돌릴 수 있는 형태로 만드는 걸 원칙으로 삼습니다. 스키마를 바꿀 때는 이전 버전 앱이 당분간 계속 동작하도록 두고, 급한 수정은 스토어 심사를 기다리지 않고 먼저 내보낼 수 있게 준비해 둡니다. 사용자에게 보이는 실수는 대부분 되돌리는 속도로 만회됩니다.

데이터는 필요한 것만 받습니다. 맛도리는 동네를 확인하는 데만 위치를 쓰고 좌표 자체는 저장하지 않으며, 사진에 붙어 오는 위치 정보는 업로드 시점에 지웁니다. 기능 하나를 위해 더 많은 정보를 받아 두는 편이 언제나 편하지만, 나중에 그 데이터를 지키는 것도 혼자 해야 하는 일이라 처음부터 안 받는 쪽을 택합니다.

협업, 제휴, 버그 제보 모두 환영합니다.문의하기 →

글쓴이 JunGyu Kim · 문의 rlawnsrb3@nate.com