title: 3-3. 부활: 환경 교체와 데몬 date: 2026-02-28

3-3. 부활: 환경 교체와 데몬 2026-02-28 ~ 03-04

02-28: 의욕이 돌아왔다

4개월 만에 갑자기 의욕이 불타올랐다. 혼자지만 상관없다.

첫 번째로 한 일: 개발 환경 전면 교체

chore: pnpm→bun, prettier→oxfmt/oxlint, mise.toml·AGENTS.md

한 커밋에 다 때려넣었다.

BeforeAfter
pnpmBun
Prettieroxfmt
ESLintoxlint
.cursor/.claude/

Bun으로 바꾸면서 패키지 설치 속도가 체감될 정도로 빨라졌다. oxfmt/oxlint는 Rust 기반이라 포맷팅/린팅이 순식간이다. .cursor/.claude/로 바꾼 건 작업 환경이 Claude Code로 넘어왔다는 신호.

같은 날 docs 배포 워크플로우도 정리했다. rspress 설정을 @rspress/core로 업데이트하고 SSG 빌드를 수정.

03-01: 대청소

refactor: v1 크레이트 제거 및 코드 모듈 분할

proxelar 원본의 코드 구조를 유지하고 있던 v1 크레이트를 완전히 삭제했다. .claude/ 디렉토리에 에이전트 커맨드도 정리. 새 출발.

03-02: 데몬 아키텍처 핵심 설계

프록시의 근본 구조를 바꿨다. 이 날의 커밋:

feat(cli): tauri.conf.json에 --daemon (-D) 인자 등록
feat(daemon): proxy_daemon.rs 모듈 생성
feat(client): proxy_client.rs 모듈 생성
feat(main): --daemon 플래그로 Tauri 없이 daemon 모드 실행
refactor(proxy): GUI/CLI 모두 daemon 클라이언트로 전환
test(daemon): UDS 서버-클라이언트 통합 테스트 추가

기존에는 Tauri 앱 안에 프록시가 직접 들어 있었다. 문제:

  1. Tauri 앱을 끄면 프록시도 꺼진다
  2. TUI나 MCP 같은 다른 인터페이스에서 프록시를 쓸 수 없다
  3. 프록시 코어 테스트가 Tauri 의존성에 묶인다

해결: 프록시 데몬 분리

[Tauri 앱] ─┐
[TUI]       ├── Unix Domain Socket ──→ [proxy_daemon] ──→ [proxyapi_v2]
[MCP 서버]  ─┘

proxy_daemon 크레이트를 만들어서 프록시를 독립 프로세스로 돌리고, 클라이언트(GUI/TUI/MCP)는 UDS(Unix Domain Socket)로 통신. --daemon 플래그로 Tauri 없이 실행 가능.

트러블슈팅: UDS race condition 버그

fix: 데몬 UDS 소켓 준비 전 연결 시도하는 race condition 수정

데몬이 소켓 파일을 만들기 전에 클라이언트가 연결을 시도. 데몬 시작 → 소켓 바인드 사이 시간차가 원인.

03-04: UI 프레임워크 전면 교체

하루에 엄청난 양의 커밋이 들어갔다.

proxy_daemon 크레이트 독립

feat(proxy_daemon): 프록시/데몬 핵심 로직을 독립 crate로 분리
refactor(tauri): proxy_daemon crate 사용으로 Tauri 래퍼 축소
test: 통합 테스트 import를 proxy_daemon crate로 업데이트

Tauri 앱의 거대한 코드를 proxy_daemon 크레이트로 빼내고, Tauri는 얇은 래퍼만 남겼다.

Radix UI → Base UI 마이그레이션

커밋 10개 이상이 이 작업에 들어갔다. 하나하나 컴포넌트를 교체:

refactor(ui): tooltip을 Base UI로 마이그레이션
refactor(ui): separator를 Base UI로 마이그레이션
refactor(ui): popover를 Base UI로 마이그레이션
refactor(ui): tabs를 Base UI로 마이그레이션
refactor(ui): dialog를 Base UI로 마이그레이션
refactor(ui): scroll-area를 Base UI로 마이그레이션
refactor(ui): select를 Base UI로 마이그레이션
refactor(ui): context-menu를 Base UI로 마이그레이션
refactor(ui): command Dialog 래퍼 타입 수정 및 asChild → render prop

Radix UI의 @radix-ui/* 패키지 9개를 제거하고 @base-ui/react 하나로 통합. headless 컴포넌트라 스타일링 자유도가 높고 번들 크기도 작다.

Rspack → Vite 전환

refactor: rspack → Vite 7 (Rolldown) 번들러 전환

번들러도 교체. Vite 7은 내부적으로 Rolldown(Rust 기반)을 사용해서 빌드가 빠르다.

트러블슈팅: resizable-panels v4 삽질

react-resizable-panels를 v4로 업그레이드했더니 API가 완전히 바뀌어 있었다:

fix: resizable 컴포넌트 v4 CSS 호환성 수정
fix: resizable 패널 레이아웃을 v4 defaultLayout으로 수정
fix: resizable panels v4 size 값을 퍼센트 문자열로 변경
fix: react-resizable-panels v4 API 호환성 수정

size 값이 숫자에서 퍼센트 문자열로 변경, defaultLayout API 변경, CSS 호환성 문제. 같은 날 4커밋.

프론트엔드 의존성 최신화

React 19, react-resizable-panels v4, 기타 패키지 전면 업데이트. react-scan도 제거.

1줄 요약

4개월 공백 후 혼자 부활. 개발 환경을 Bun+oxfmt으로 교체하고, 데몬 아키텍처로 프록시를 독립 프로세스로 분리하고, UI 프레임워크를 Base UI+Vite로 전면 교체했다.