3-4. MCP 서버와 인터셉트 규칙 2026-03-05 ~ 03-06
03-05 하루 작업 시간: 03:33
05:27 (1.9h), 28커밋 — 시간당 14.8커밋, 프로젝트 최고 속도! 03-06 하루 작업 시간: 03:5023:59 (20.2h), 81커밋
03-05: 프록시 코어 강화
이 세션에서 TLS 디버깅이 시작됐다. 실패 로그를 대량으로 붙여넣으며 원인을 추적:
"멈춰 지금 원격에서라서 실행 컴퓨터 프록시 설정은 확인 안해도 될 것 같아 원인이 뭘까" — SSH 원격 환경에서 디버깅 "좋아요 잘되는데 이제 잘되는 로그 말고 실패되는 로그만 노출되게 해줄 수 있나요" — 노이즈 제거 "그리고 MITM이랑 비교했을 때 구현 안된 점은?" — 이 질문이 기능 폭발의 시작점
이후 MITM/찰스 비교표를 보고:
"투명 프록시 — 앱에 프록시 설정 없이도 OS 레벨에서 자동 트래픽 캡처. 그리고 이거 뭐야?" "어느게 더 안정적이야? 순수 러스트로 구현인데 왜 난이도가 높은지?" "좋아 그럼 백로그에 WireGuard 적어 줘"
그리고 워크플로우 규칙 확립:
"라벨이랑 어사인 나로 해 그리고 룰에 적어두고 항상 지켜야 할" — PR 라벨/assignee 규칙
Tower Layer 리팩토링도 이때:
"더 좋은 패턴은 없어?" "4번대신 3번을 추천하는 이유는?" "좋아 그럼 타워 레이어로 리팩토링해주고 메인에 바로하지 말고 브랜치 파서 최대한 잘게 커밋하고 리팩토링 후 PR 올려"
TLS 자동 학습 바이패스
TLS 핸드셰이크가 실패하는 도메인을 자동으로 학습해서 다음부터는 터널 모드로 처리하는 기능. 수동으로 도메인 리스트를 관리할 필요가 없어졌다.
기존에 Apple 도메인 등을 하드코딩으로 터널 처리하던 코드를 전부 제거하고, 학습 기반으로 전환.
WebSocket 메시지 주입
양방향으로 가짜 WebSocket 메시지를 주입할 수 있게 됐다.
트러블슈팅 연발 삽질
이 날 수정한 버그들:
- OpenSSL SECLEVEL — OpenSSL 3.0+에서는 기본적으로 TLS 1.0/1.1이 비활성화.
SECLEVEL=0을 명시해야 함 - tokio 패닉 — 비동기 컨텍스트에서
blocking_read호출하면 런타임이 죽음.try_read로 교체 - 데몬 종료 — SIGTERM 처리 없이 데몬이 죽으면 시스템 프록시 설정이 복원 안 됨
스트리밍 응답 리팩토링
프록시 내부 구조를 Tower 미들웨어 패턴으로 정리. 코드가 훨씬 깔끔해졌다.
03-06: 기능 대폭발 이 날 커밋 81개, 20.2시간
이 날 하루에 들어간 기능이 엄청나다. 03:50부터 23:59까지 20시간 넘게 작업.
MCP 서버 크레이트
"mcp 서버를 제공하면 어떨까? 앱에서" — 아이디어 제안 "mcp 서버 러스트 라이브러리는 없어?" "https://github.com/modelcontextprotocol/rust-sdk 이게 공식인거 같은데 그지? 공식으로 가자"
rmcp 크레이트로 MCP 프로토콜을 구현하고, Tauri에서는 MCP 바이너리를 sidecar로 번들. 처음에 build.rs에서 빌드했다가 beforeDevCommand로 변경하는 삽질도 있었다.
인터셉트 규칙 시스템
이 기능의 커밋 흐름이 재미있다. 처음에 mitmproxy 스타일 Flow Filter를 만들었다가, 같은 날 와일드카드 패턴으로 전면 변경:
이 전환의 실제 대화:
"민트 형태의 플로우필터가 일반적이야??" — mitmproxy 방식에 의문 "찰스 프록시나 이런건 어떤지?" — 다른 도구 비교 "와일드카드가 더 직관적이지 않아?" — 핵심 판단 "와일드카드 형태로 갔으면 좋겠어요 기존 패턴은 별로고 와일드카드로 리팩토링 해주세요 플로우 필터는 제거" — 같은 날 방향 전환 결정
5가지 작업: Block, Modify Request, Modify Response, Map Local, Map Remote.
WebSocket 전용 뷰
Chrome DevTools 스타일 메시지 뷰어 + 메시지 주입 다이얼로그.
프로토콜 자동 감지
WebSocket 메시지를 보고 Socket.IO, MQTT, GraphQL을 자동 감지. MQTT v5.0의 SUBSCRIBE 패킷 Properties 섹션 파싱 누락 버그도 발견해서 수정.
트래픽 리플레이
리플레이 다이얼로그의 UI를 여러 번 수정했다:
- 기본 다이얼로그 → 풀페이지 모달
- 탭 스타일: shadcn → border-bottom → shadcn으로 복원
- 바디 편집기를 Monaco Editor로 변경
- 응답 뷰 레이아웃 수정 (헤더가 바디 영역 침범하는 문제)
E2E 테스트 인프라
MCP bridge 플러그인으로 Tauri 앱의 E2E 테스트를 자동화할 수 있게 됐다.
Map Local / Map Remote
로컬 파일로 응답을 대체하거나, 다른 URL로 리다이렉트하는 기능. Charles Proxy의 핵심 기능 중 하나.
HTTP/2 활성화
한 줄 커밋이지만, 이걸로 HTTP/2 트래픽도 인터셉트할 수 있게 됐다.
03-05에 TLS 자동 바이패스와 코어 안정화를 하고, 03-06 하루에 MCP 서버, 인터셉트 규칙(Flow Filter→와일드카드 갈아엎기), WebSocket 뷰, 프로토콜 감지, 트래픽 리플레이, Map Local/Remote, HTTP/2까지 구현했다.