목록으로
제품2026년 5월 9일 PM 07:32

Ben's Bites '#3 빌드' 공개… Codex·Factory로 Mac 전용 Gmail 이메일 앱 자체 제작, Superhuman 대체·20초 언두 전송·에이전트 네이티브

Ben's Bites가 'Ben's Builds #3 — an email app' 뉴스레터에서 한 주간 직접 만든 개인용 이메일 앱 제작기를 공개했다. 저자는 Gmail을 사용하면서 수년간 Superhuman을 함께 써왔으나, '필요 없는 기능이 계속 추가되고 무엇보다 이메일에 비용을 내고 싶지 않다'는 이유로 자체 클라이언트 제작에 나섰다고 밝혔다. 분할 인박스(split inbox)와 이메일 정리용 룰이 있는 환경을 만들고 싶었다는 게 출발점이다.

프로젝트는 Codex에 '이메일 클라이언트를 내가 원하는 방식대로 만들어 달라'는 요청으로 시작됐다. 조건은 MacBook 전용, 로컬 실행, Gmail을 단일 진실 소스(source of truth)로 유지였다. 구현 결과물은 분할 인박스, 단축키, 커맨드 팔레트, 답장/작성, 20초 언두 전송, 1클릭 구독해제, 검색, 룰, 필터 동기화, 이메일 렌더링, 그리고 에이전트가 네이티브로 사용할 수 있는 설계를 갖췄다. 저자는 코드에 'slop'이 있을 수 있다며 본래 공유 계획은 없었으나 요청에 따라 공개하기로 했다고 덧붙였다.

라벨은 이미 사용 중이던 5종을 그대로 가져갔다. 포트폴리오 기업·LP용 'investing', 영수증·업데이트 등 읽을 필요 없는 정보용 'fyi', 캘린더 초대용 'cal', 뉴스레터용 'news', 읽지 않을 PR 메일용 'pitch'다. 저자는 'AI가 모든 메일을 읽고 분류해줄 필요는 없다'며 도메인이나 주소 기준 필터링이 잘 작동한다고 강조했다. 첫 패스는 Codex가 맡았으나 UX/UI에서 막히자 마감과 다수의 수정·테스트는 Factory로 옮겨 진행했고, Factory에서는 Opus와 GPT 5.5 사이를 자유롭게 오갈 수 있었다고 한다.

첫 실질적 문제는 지연(lag)이었다. 앱은 인증·메일 가져오기·라벨 갱신을 처리하는 Google Workspace CLI 위에 얹혀 있었는데, 에이전트가 원인을 분석한 결과 앱이 Gmail을 너무 자주 호출하고 있었다. 해결책으로 즉시 캐시 데이터를 표시하고 백그라운드에서 갱신, 스레드 상세를 프리페치, 아카이브·라벨링 시 UI를 낙관적(optimistic)으로 갱신하도록 바꿨다. 추가로 데이터베이스도 도입했다.

라벨과 룰에서는 동기화 문제가 있었다. 처음에는 'L'을 누르고 라벨을 고르는 단순한 흐름이었지만, 'investing' 라벨을 붙이면 Investing 폴더로 이동하고 인박스를 건너뛰는 룰이 있으면 Gmail 인박스에서도 빠져야 했다. 그러나 에이전트가 Gmail이 아닌 로컬 룰 파일에 동기화하고 있었고, 이 부분은 Factory가 해결했다. 이후 룰을 더 풍부하게 다듬어, 라벨 룰을 추가할 때 모든 도메인에 적용할지 특정 주소에만 적용할지 선택할 수 있도록 했다. 처음에는 라벨링 후 알림으로 선택받게 했다가 라벨 모달 안으로 옮겼다.

에이전트 친화성도 명시적으로 설계했다. 저자는 '대화 도중에도 에이전트가 이 앱을 직접 쓸 수 있어야 한다'며 사용자 눈에는 보이지 않는 숨김 셀렉터·상태·디버그 엔드포인트를 추가하도록 지시했다. 답장 기능은 기본 reply-all에 to/cc/bcc·첨부 편집이 가능하고, Cmd+Enter로 전송과 동시에 아카이브하되 실제 발송은 20초를 대기해 그 사이 Cmd+Z로 취소할 수 있게 만들었다. 저자는 답장이 생각보다 큰 작업이었지만 Factory의 UX 반복 작업 끝에 만족스럽게 동작한다고 적었다.

이메일 렌더링은 가장 까다로운 영역이었다. 일반 텍스트, Gmail HTML, 뉴스레터, 영수증, 캘린더 초대, 인라인 이미지, 서명, 인용 답장, 트래킹 픽셀, 기이한 MIME 등 처리해야 할 형식이 많았다. Codex는 'if-this-do-that' 식 특정 룰만 늘리는 방식으로 접근했고, 저자는 한 발 물러서 다른 도구의 접근을 살피기로 했다. 그래서 Obsidian 웹 클리퍼 크롬 확장이 웹 페이지 미리보기를 어떻게 만드는지 Codex에 역공학(reverse engineer)을 시킨 뒤, 그 접근을 이메일 렌더링에 적용했다. 결과는 일반 메일은 충분히 잘 보이고 뉴스레터·아마존 같은 HTML 무거운 메일은 그대로 보여주는 형태로 정리됐다. 또한 일부 메일에 들어 있는 디자인된 HTML 같은 서명을 사용자에게 숨기도록 Factory가 처리했고, 이 과정에서 로고·표 형태 서명이 메일 전체를 디자인된 뉴스레터로 분류시키던 버그도 잡혔다.

검색과 'All Mail' 페이지도 추가됐다. 'All Mail'은 동작이 이상해 브라우저로 테스트하라는 지시로 원인을 잡았고, 결국 'All Mail'을 지연 로딩(lazy-load)해 Gmail 호출 폭주를 막는 방식으로 수정했다.

교훈으로 저자는 '이메일 클라이언트는 굳이 만들지 마시라'는 농담과 함께 '코드는 싸니까 일단 만들어 보고 어색하면 바꾸라', '도구(harness)와 모델을 자주 바꿔 써라', '비슷한 일을 하는 다른 앱을 에이전트에 역공학시켜 보라', '프로젝트 외부의 새 세션을 열어 편향 없는 의견을 받으라', '에이전트에게 이 동작이 맞는지·왜 그런지·더 나은 방법은 무엇인지·트레이드오프는 무엇인지 같은 질문을 자주 던지라', '에이전트가 브라우저로 직접 테스트하게 하라', '재미로라도 그냥 만들어 보면 많이 배운다'고 정리했다.

스택도 함께 공개했다. 비코딩 작업(브레인스토밍·아이디어 논의 등)에는 여전히 Pi를 쓰지만 'Anthropic이 단속에 나선' 영향으로 GPT 5.5를 쓰고 있고, GPT 모델은 지시를 더 직접적으로 따르는 편이라 AGENTS.md와 컨텍스트 구성이 중요하다고 했다. 지난 2주는 Codex 앱을 주로 썼는데 EU/UK에서는 VPN을 써야 크롬·컴퓨터 사용 도구가 풀린다는 점을 적었고, 그래도 에이전트의 행동을 직접 보고 끼어들어 교정할 수 있다는 이유로 터미널(Pi)을 더 선호한다고 했다. Cowork은 제한적이고 곧 Claude Code에 통합될 거라며 권하지 않았다. '진짜' 코딩에는 Factory를 쓰며, 코드를 모르는 사람에게도 가장 완성도 높은 하니스이고 Claude·Opus 모델을 쉽게 오갈 수 있는 데다 최근 한도가 더 큰 100달러 요금제도 출시됐다고 평가했다. 풀스택 앱은 Vercel, Stripe, Supabase를 그대로 쓰고, 최근부터 이 셋(과 다른 여러 서비스)을 한 번에 셋업·관리·연결해 주는 Stripe의 projects.dev를 사용하기 시작했다고 밝혔다.

AI인사이트 편집팀

이 기사는 AI 기술을 활용해 작성되었으며, 편집팀이 검수했습니다.

관련 기사