본문으로 건너뛰기

resumate 개발일지 01. 어쩌다 이걸 만들게 됐나

·7 min read·1 / 3

어쩌다 이걸 만들게 됐나

Claude Code Pro를 쓰다가 문득 이상한 생각이 들었다.

"나는 API 비용 따로 내고 Claude를 쓰는데, 이미 Pro 구독료를 냈잖아?"

claude CLI는 결국 Pro 인증을 그대로 쓴다. 그럼 이걸 서브프로세스로 띄우면? 추가 API 비용 없이 Claude 전체 성능을 쓸 수 있다. 이 인사이트 하나에서 이 프로젝트가 시작됐다.

처음엔 코딩 에이전트를 만들려 했다. Architect, Builder, Reviewer — 코딩 워크플로우를 분담하는 3인조. 근데 만들다 보니 이런 생각이 들었다.

"범용 코딩 도구는 이미 널렸다. 진짜 삶의 문제를 해결하는 게 더 낫지 않을까?"

그래서 피벗했다. 취업 준비생을 위한 AI 코치 3인조로.


핵심 아이디어: Claude Code Pro 인증 재사용

이 프로젝트의 가장 독특한 점은 기술 스택보다 이 아이디어에 있다.

사용자가 내는 비용: Claude Code Pro 구독 $20/
추가 API 비용: $0

방법은 단순하다. claude -p "프롬프트" 를 서브프로세스로 실행하고, stdout으로 나오는 JSON stream을 파싱해서 SSE로 프론트엔드에 전달한다. Sidecar 서버(Bun + Hono)가 이 역할을 한다.

SSE(Server-Sent Events)는 서버에서 클라이언트로 단방향 실시간 데이터를 푸시하는 HTTP 기반 프로토콜이다. 스트리밍 응답에 딱 맞는다.

사용자 입력 → React → HTTP POST → Sidecar
spawn(claude -p ...) → JSON stream
SSE 변환 → 프론트엔드 실시간 렌더링

3명의 캐릭터

캐릭터 설계가 가장 재밌었다. 단순한 기능 분리가 아니라, 사용자가 감정적으로 연결될 수 있는 페르소나를 만들고 싶었다.

🐈‍⬛ Nyx — 이력서 분석가

냉철하고 날카롭다. 칭찬보다 개선점을 먼저 찾는 고양이. 하지만 차갑지 않다. 이력서를 올리면 구조, 표현, 강점/약점을 조목조목 짚어준다.

🐾 Paws — 기업 맞춤 테일러

실용적이고 전략적이다. 채용공고 URL 하나 던지면 기업이 원하는 게 뭔지 뽑아내고, 사용자 이력서를 그 언어로 재구성해준다.

🐱 Echo — 면접 코치

응원하지만 냉정하다. 예상 질문 뽑아주고, 답변하면 면접관처럼 피드백한다. 100번 물어보면 100번 다 다르게 대답할 수 있게 될 때까지.


기술 선택: 왜 Tauri인가

Electron을 안 쓴 이유는 단순하다. 번들 크기.

ElectronTauri
최소 번들 크기~80MB~8MB
메모리 사용높음낮음
시스템 APINode.jsRust

macOS 네이티브 앱처럼 동작해야 했고, 파일 시스템 접근도 필요했다. Tauri v2 + Rust 레이어가 딱 맞았다.

Sidecar를 Node.js 대신 Bun으로 짠 것도 이유가 있다. 단일 바이너리 컴파일이 되기 때문에 Tauri sidecar로 패키징하기 훨씬 편하다. 앱 배포 시 Node.js 런타임을 따로 설치할 필요가 없다.

Tauri sidecar는 메인 앱 프로세스가 외부 바이너리를 함께 번들링해서 실행하는 기능이다. Bun 서버를 이 방식으로 패키징하면 사용자는 아무것도 따로 설치하지 않아도 된다.


현재 상태

생각보다 많이 됐다. 체크리스트 보면:

완료:

  • Tauri v2 앱 기반 구조 (sidecar 자동 실행)
  • Sidecar HTTP 서버 (채팅, 스킬, 파일 목록 엔드포인트)
  • claude CLI 서브프로세스 + SSE 스트리밍
  • React 채팅 UI (스트리밍, 도구 호출 표시, 중단 버튼)
  • CharacterDock 플로팅 위젯 + 드래그
  • Lottie 캐릭터 애니메이션 (Nyx, Paws, Echo)
  • 캐릭터별 독립 대화 세션 (Zustand)
  • SQLite 대화 영속화
  • NyxView / PawsView / EchoView 레이아웃

남은 것:

  • CharacterBlob 3D 컴포넌트
  • 캐릭터별 시스템 프롬프트 취업 특화 업데이트
  • 이력서 PDF 파싱
  • 채용공고 URL 스크래핑

느낀 점

UI보다 UX 결정이 더 어려웠다. "작업창을 어떻게 열고 닫을 것인가", "드래그와 클릭을 어떻게 구분할 것인가" 같은 작은 결정들이 실제로는 엄청나게 많은 코드와 연결돼 있었다.

그리고 캐릭터에 감정을 넣는 게 생각보다 중요하다는 걸 깨달았다. 기능만 있는 도구는 쓰기 싫어진다. 고양이 캐릭터가 Lottie 애니메이션으로 살아움직이는 걸 보면 더 쓰고 싶어진다. 그 차이가 결국 사용 지속성을 만든다.

다음 일지는 CharacterBlob 3D 컴포넌트 작업하면서 쓸 예정.