-
TensorZero를 오픈소스 프록시로 활용해, Cursor와 LLM 제공자(OpenAI 등) 사이의 트래픽을 가로채 분석하고, 프롬프트·모델·추론 결과를 실시간으로 관찰 및 최적화 실험한 경험 공유
- Cursor는 LLM 호출 시 Base URL과 모델명을 오버라이드할 수 있어, 자체 프록시(TensorZero)를 손쉽게 연동 가능
- 내부적으로 Cursor는 자체 서버를 거쳐 LLM을 호출하므로, 완전한 프록시 구성을 위해 Ngrok + Nginx 리버스 프록시 및 CORS 헤더 세팅이 필요함
- 프록시를 통해 Cursor가 실제로 LLM에 보내는 system prompt, user prompt, 인라인 코드 편집 요청까지 모두 관찰 가능하며, 다양한 LLM(A/B 테스트)로 실시간 전환/실험이 가능
- Cursor의 system prompt 분석 결과, 불과 642 토큰 정도의 프롬프트만으로 대부분의 소프트웨어 엔지니어링 문맥을 LLM이 이해·처리함. 코드 편집은 별도의 "apply model"(덜 지능적인 보조 모델)이 담당
- TensorZero와 같은 프록시 구조로, 사용자별 맞춤형 LLM 실험 및 피드백 기반 최적화가 가능하며, 이 구조는 코드 보조 도구의 품질 평가(A/B 테스트), 프롬프트 최적화, 실사용 모니터링에 이상적임
소개
-
TensorZero 오픈소스 프레임워크를 Cursor와 각종 LLM(대형 언어 모델) 사이에 프록시 게이트웨이로 연결한 경험과 이로 인한 관찰, 실험, 최적화 지점을 다룸
- TensorZero는 피드백 신호(생산 지표, 사용자 행태 등)를 활용해 LLM 애플리케이션의 품질을 높일 수 있도록 도와주는 오픈소스임
- Cursor 사용자로서 가장 많이 쓰는 LLM 기반 IDE에 이 기술을 적용해, 실제로 어떤 API 요청이 오가는지, 그리고 어떻게 최적화를 직접 시도할 수 있는지 실험함
전체 개요 및 목적
-
Cursor는 사용자 전체를 기준으로 최적화된 코딩 어시스턴트이지만, 개인별 맞춤형 최적화 실험과 데이터 관찰이 거의 불가능함
- TensorZero를 프록시로 두면, Cursor의 요청과 LLM 응답, 프롬프트, 모델, 인퍼런스 과정 전체를 투명하게 관찰하고, 실험하며, 최적화까지 확장 가능함
- 대부분의 최적화 및 평가, 실험 방법에는 실제 추론 데이터가 필수이므로, 이를 수집하는 실전 방법과 자동화 방식을 구체적으로 소개함
연동 과정: LLM 게이트웨이 구축
- Cursor는 OpenAI base URL과 모델명을 사용자 정의로 변경할 수 있도록 지원함
- TensorZero는 OpenAI 호환 인퍼런스 엔드포인트를 제공하기 때문에, Cursor를 OpenAI 대신 TensorZero로 연결이 가능함
- TensorZero 내에 cursorzero 함수 등록을 통해, 다양한 모델/프롬프트 실험과 제공사에 종속되지 않는 인퍼런스 및 피드백 데이터 자동화 저장이 가능함
첫 번째 장애물: Cursor 자체 서버
- Cursor가 로컬 TensorZero에 직접 연결을 시도했으나 실패함
- Cursor는 항상 우선 자체 서버에 요청을 보내고, 내부적으로 추가 처리 후 LLM 호출을 이어감
- 이로 인해 자격 증명이 Cursor 서버로 전달되며, 해당 서버가 모든 요청 및 코드베이스에 대한 데이터 수집이 가능해짐
- 대안으로, OpenRouter로 연결하며 일부 Cursor 내 상호작용에서 외부 모델 이용 가능 여부를 점검함
- Cursor의 Tab 자동완성은 자체 비공개 모델로 동작, 다른 LLM과 조합 가능함
- 최종적으로 reverse proxy와 Ngrok을 활용, 외부 공개 엔드포인트를 통해 내부 TensorZero에 요청을 프록시하는 구조로 해결함
-
Nginx를 앞단에 두어 인증 추가 및 보안 강화, 커스텀 TensorZero 함수로 LLM 라우팅까지 완료함
- 최종 구조:
- Cursor → Ngrok → Nginx(인증) → TensorZero(로컬) → LLM Provider
두 번째 장애물: CORS
- 인증 시 CORS preflight(OPTIONS) 요청이 Nginx에 도달하며, 초기 인증 미수행 현상 발생
- Nginx에서 OpenAI API와 동일한 CORS 헤더를 반환하도록 설정하여, Electron 기반의 Cursor IDE 요구사항 충족함
- 인증 및 CORS 문제 해결 후, 모든 실제 요청은 Cursor 서버 경유로 이뤄짐
- (Nginx 설정 예시 코드 포함)
최종 결과: Cursor 들여다 보기 가능해짐
-
모든 LLM 요청/응답, system prompt, user prompt, 첨부 코드/파일 내용을 실시간 관찰 가능
- system prompt 예시에는, 코드 편집용 별도 "apply model"을 구동하는 명령까지 명시됨 (이중 모델 계층 구조)
- Cursor 프롬프트의 주요 구조:
- 사용자 세션 정보, 파일·커서 위치 등 맥락 제공
- 코멘트 블록 등으로 구역 표시
- 코드 수정 요청시에는 ‘변경 부분만 최소화’ 코드블록 생성 지침
- Cursor의 프롬프트 엔지니어링
- 642토큰의 대형 시스템 프롬프트 하나만으로도 대다수 소프트웨어 엔지니어링 업무가 자동화됨
- 코드 변경 작업에 특화된 덜 지능적인 apply model(보조 모델)이 별도로 존재하며, 메인 LLM에 명확하게 적용 대상과 규칙을 지정
- 다양한 LLM 계층 구조(지능, 기능 분리)가 실제 프롬프트 내부에 구현된 점을 확인함
결론 및 시사점
- Cursor는 최신 LLM의 기본 내장 지식과 간결한 프롬프트만으로 소프트웨어 엔지니어링 문맥 처리가 가능
- TensorZero 등 프록시로 사용자별 피드백, 실사용 데이터 기반의 최적화(A/B 테스트, 프롬프트/모델 튜닝) 구조를 쉽게 구축할 수 있음
- 코드 에디터 보조 AI, LLM 도입 기업은 이 방식을 통해 프롬프트 설계, 성능 개선, 사용자별 최적화를 신속하게 실험할 수 있음
- 차기 글에서는 실제 사용 데이터 수집 방식, 트리시터, git hook 활용법 등 후속 실험을 할 예정