VS Code나 JetBrains에서 Continue 확장 프로그램을 사용하는 개발자는 아키텍처 측면에서 중요한 문제에 직면하곤 합니다. 키 입력 단위의 Tab 코드 자동 완성은 극도로 낮은 응답 지연 시간(첫 번째 토큰 생성 시간인 TTFT 300ms 미만)을 요구하는 반면, 사이드바 채팅 및 프로젝트 리팩터링은 방대한 컨텍스트와 깊은 추론 능력을 갖춘 프론티어 모델이 필요합니다. Claude 3.5 Sonnet이나 GPT-4o 같은 고중량 모델을 Tab 자동 완성에 연결하면 타이핑 시 치명적인 지연이 발생하고 과도한 API 비용이 청구됩니다. 반대로 경량 완성 모델을 채팅에 활용하면 복잡한 아키텍처 설계와 디버깅을 제대로 수행할 수 없습니다.
이 문제를 해결하는 핵심 메커니즘은 '역할 기반 모델 라우팅(Role-based Model Routing)'입니다. Continue는 인라인 실시간 자동 완성과 탐색적 대화 추론을 아키텍처 수준에서 분리하도록 설계되었습니다. 본 가이드에서는 최신 config.yaml 표준 및 레거시 config.json 환경에서 Tab 자동 완성과 채팅 모델을 각각 분리하여 지정하고, 로컬 및 클라우드 엔드포인트를 튜닝하여 지연 시간을 최소화하는 방법을 설명합니다.
아키텍처 분리: Tab 자동 완성 vs 채팅
Tab 자동 완성과 채팅 인터랙션은 추구하는 성능 제약 조건과 모델 구조가 근본적으로 다릅니다.
| 평가 기준 | Tab 자동 완성 | 사이드바 채팅 및 코드 편집 (Chat & Edit) |
|---|---|---|
| 핵심 지표 | 첫 토큰 생성 지연(TTFT < 300ms), 타이핑 연속성 | 논리적 추론 깊이, 다중 파일 장문 컨텍스트 이해력 |
| 호출 빈도 | 초고빈도(타이핑 일시 중지 시마다 발생, 시간당 수백 회) | 중/저빈도(개발자가 명시적으로 프롬프트 전송, 일일 수십 회) |
| 모델 아키텍처 | Fill-In-The-Middle(FIM) 특화 소형 모델(1B–7B) | 대규모 Dense 모델 또는 MoE 기반 프론티어 추론 모델(14B–70B+ / 클라우드 API) |
| 권장 배포 형태 | 로컬 실행 엔진(Ollama, vLLM, llama.cpp) 또는 초저지연 클라우드 엔드포인트 | 프론티어 클라우드 API(Anthropic, OpenAI, Mistral) 또는 고성능 로컬 서버 |
| 컨텍스트 구성 | 커서 전후 코드 라인 및 AST/LSP 문법 정의 | 대화 기록 전체, 프로젝트 파일 첨부, 에이전트 시스템 프롬프트 |
역할 분리를 통해 개발자는 로컬 모델을 활용해 API 비용 없는 비공개 밀리초 단위 입력을 지원받는 동시에 사이드바에서는 최고 성능 모델의 지능을 온전히 누릴 수 있습니다.
방법 1: 최신 표준 규격 (config.yaml)
최신 Continue 버전에서는 ~/.continue/config.yaml 경로의 설정 파일을 사용합니다. 모델의 작업 할당은 각 모델 정의에 포함된 roles 배열에 의해 제어됩니다.
모델 분리 단계:
- FIM을 지원하는 경량 로컬 모델을 정의하고
roles: [autocomplete]를 지정합니다. - 코드 분석 및 다중 턴 대화에 최적화된 클라우드 모델을 정의하고
roles: [chat, edit]를 지정합니다.
프로덕션 설정 예시
name: Continue Hybrid Routing
version: 0.0.1
schema: v1
models:
# 1. Tab 자동 완성 전용 모델 (로컬 Ollama 구동)
- name: Qwen2.5 Coder 1.5B (Autocomplete)
provider: ollama
model: qwen2.5-coder:1.5b
roles:
- autocomplete
autocompleteOptions:
debounceDelay: 250
maxPromptTokens: 1024
# 2. 채팅 및 리팩터링용 고성능 추론 모델 (Anthropic API)
- name: Claude 3.5 Sonnet (Chat & Edit)
provider: anthropic
model: claude-3-5-sonnet-latest
apiKey: YOUR_ANTHROPIC_API_KEY
roles:
- chat
- edit
# 3. 대체 클라우드 채팅 모델 (OpenAI)
- name: GPT-4o (Chat)
provider: openai
model: gpt-4o
apiKey: YOUR_OPENAI_API_KEY
roles:
- chat
핵심 매개변수 설명
roles: 모델이 활성화되는 영역을 결정합니다.autocomplete가 지정된 모델은 에디터 내 인라인 고스트 텍스트 전용으로 동작하며 사이드바 드롭다운 목록에서 숨겨집니다.chat이 포함된 모델은 사이드바 모델 선택기에 나타납니다.autocompleteOptions.debounceDelay: 키 입력을 멈춘 후 추론 요청을 보내기까지의 대기 시간(밀리초)입니다. 200ms에서 350ms 사이로 설정하는 것이 권장되며 빠른 타이핑 중에 로컬 GPU로 불필요한 요청이 누적되는 것을 방지합니다.autocompleteOptions.maxPromptTokens: 자동 완성 모델에 전달할 코드 컨텍스트 토큰 상한선입니다. 1024에서 2048 사이로 유지해야 경량 모델이 최대 처리 속도를 유지할 수 있습니다.- 사고 모드(Thinking Mode) 비활성화: 추론 과정(Chain-of-thought)을 내장한 모델(qwen3 등)을 자동 완성에 사용할 경우, 반드시
extraBodyProperties: { think: false }를 추가해야 합니다. 인라인 완성 도중 중간 생각 과정이 텍스트로 출력되면 코드 포맷이 손상되고 극심한 지연이 발생합니다.
방법 2: 레거시 호환 규격 (config.json)
구버전 Continue를 유지 관리하는 환경에서는 ~/.continue/config.json 파일을 사용합니다. 이 구조에서는 models 배열과 분리된 최상위 tabAutocompleteModel 객체를 통해 자동 완성 모델을 지정합니다.
[!NOTE]
config.json및 최상위tabAutocompleteModel속성은 공식적으로 지원 중단 예정(Deprecated)으로 분류되어 있습니다. 하위 호환성은 보장되지만 점진적으로config.yaml로 전환하는 것을 권장합니다.
레거시 설정 예시
{
"models": [
{
"title": "Claude 3.5 Sonnet",
"provider": "anthropic",
"model": "claude-3-5-sonnet-latest",
"apiKey": "YOUR_ANTHROPIC_API_KEY"
},
{
"title": "GPT-4o",
"provider": "openai",
"model": "gpt-4o",
"apiKey": "YOUR_OPENAI_API_KEY"
}
],
"tabAutocompleteModel": {
"title": "Qwen2.5-Coder 1.5B",
"provider": "ollama",
"model": "qwen2.5-coder:1.5b"
},
"tabAutocompleteOptions": {
"debounceDelay": 250,
"maxPromptTokens": 1024
}
}
이 구조의 특징:
"models"내부의 모델은 채팅 UI 선택 메뉴에 표시됩니다.- 독립된
"tabAutocompleteModel"객체가 인라인 코드 제안을 독점 처리합니다. - 지연 시간 제어 옵션은
"tabAutocompleteOptions"내에 지정됩니다.
시나리오별 권장 모델 조합
하드웨어 사양, 보안 규정 및 비용 예산에 맞춰 다음과 같은 조합을 권장합니다.
시나리오 A: 로컬 및 클라우드 하이브리드 구성 (일반적인 최적 선택)
- Tab 자동 완성: 로컬 Ollama 기반
qwen2.5-coder:1.5b또는qwen2.5-coder:7b. 150ms 미만의 반응 속도를 제공하며 API 비용이 전혀 들지 않습니다. - 채팅: Anthropic
claude-3-5-sonnet또는 OpenAIgpt-4o. 뛰어난 코드 이해도와 리팩터링 품질을 보장합니다.
시나리오 B: 오프라인 폐쇄망 및 엄격한 보안 구성
- Tab 자동 완성: 로컬 Ollama / vLLM 기반
qwen2.5-coder:1.5b(Q4 또는 Q8 양자화). - 채팅: 로컬에 배포된
qwen2.5-coder:32b또는deepseek-coder-v2:16b. 최소 16GB–32GB 이상의 통합 메모리 또는 GPU VRAM이 필요합니다.
시나리오 C: 고정밀 클라우드 전용 자동 완성 구성
- Tab 자동 완성: Mistral API의
codestral-latest. 80개 이상의 언어를 지원하며 네이티브 FIM 아키텍처와 넉넉한 컨텍스트 창을 지원합니다. - 채팅: OpenAI
gpt-4o또는 Claude 3.5 Sonnet.
엔드포인트 튜닝 및 문제 해결
모델 라우팅 설정 외에도 백엔드 추론 엔진의 병목 현상을 해결해야 원활한 개발 환경이 유지됩니다.
1. Ollama 동시 실행 및 메모리 상주 설정
로컬에서 자동 완성 모델과 대화형 모델을 동시에 운영할 경우, Ollama의 기본 설정으로 인해 요청이 직렬 대기열에 걸릴 수 있습니다.
- 시스템 환경 변수에
OLLAMA_NUM_PARALLEL=2(또는 그 이상)을 지정하여 채팅 생성 중에도 자동 완성 요청이 병렬로 처리되도록 설정합니다. - 환경 변수에
OLLAMA_KEEP_ALIVE=24h를 추가합니다. 5분 유휴 상태 후 모델이 GPU 메모리에서 언로드되는 것을 방지하여, 재입력 시 발생하는 5~10초의 콜드 스타트 지연을 제거합니다.
2. 디바운스 및 컨텍스트 길이 최적화
- 빠른 타이핑 스타일(분당 80단어 이상):
debounceDelay를 300ms~350ms로 설정하여 연속 타이핑 시 폐기되는 중간 추론을 억제합니다. - 일반적인 타이핑 스타일: 200ms~250ms로 지정합니다.
maxPromptTokens를 1024~2048 사이로 제한합니다. 과도한 코드 프리픽스는 소형 모델의 초기 응답 속도를 저하시킵니다.
3. IDE 확장 프로그램 간 충돌 방지
설정 후 회색 제안 텍스트가 나타나지 않을 때:
- Continue 설정에서 Enable Tab Autocomplete 옵션이 켜져 있는지 확인합니다.
- GitHub Copilot, Supermaven 등 다른 인라인 자동 완성 확장을 비활성화합니다. 동일한 에디터 버퍼에서 여러 완성 엔진이 경합하면 Continue의 렌더링이 억제될 수 있습니다.
설정 검증
설정을 저장한 후 IDE에서 정상 동작 여부를 확인합니다.
- Continue 패널(
Ctrl+L/Cmd+L)을 열고 하단 모델 드롭다운에 Chat으로 지정된 모델(예: Claude 3.5 Sonnet)만 나타나는지 확인합니다. - 코드 파일에서 함수 선언부를 작성한 후 300밀리초 동안 대기합니다. 옅은 회색의 고스트 텍스트가 지연 없이 나타나고 로컬 Ollama 엔진에서 요청을 처리했다면 분리 설정이 성공적으로 완료된 것입니다.
참고 자료
- Autocomplete Role in Continue Models | Continue Docs
- Chat Role | Continue Docs
- Continue Autocomplete Setup and Configuration Guide | Continue Docs
- How to Understand Configuration | Continue Docs
- Migrating Config to YAML | Continue Docs
- config.json Reference (Deprecated) | Continue Docs
- Using Ollama with Continue: A Developer's Guide | Continue Docs