콘텐츠로 이동

설정 가이드

이 가이드는 Continuum Router 설정 방법을 설명합니다. 라우터는 다양한 배포 시나리오에 맞춰 명확한 우선순위 시스템과 함께 여러 설정 방법을 지원합니다.

설정 섹션:

  • 서버 & 백엔드 — 서버 설정, 백엔드 프로바이더, 연결 옵션
  • 헬스 & 캐싱 — 헬스 체크, 요청 설정, 재시도, 캐싱, 로깅
  • 보안 & 관리 — API 키, 인증, WebUI, 관리 엔드포인트, ACP
  • 고급 설정 — 글로벌 프롬프트, 모델 메타데이터, 핫 리로드, 트레이싱, 로드 밸런싱, 속도 제한
  • 예제 & 마이그레이션 — 설정 예제, 마이그레이션 가이드, Rust Builder API

설정 방법

Continuum Router는 네 가지 설정 방법을 지원합니다:

  1. 설정 파일 (YAML) - 프로덕션 환경에 권장
  2. 환경 변수 - 컨테이너화된 배포에 적합
  3. 명령줄 인수 - 테스트 및 오버라이드에 유용
  4. Rust Builder API - 라이브러리 사용을 위한 타입 안전 프로그래밍 방식 설정

설정 파일 검색

라우터는 다음 위치에서 설정 파일을 순서대로 검색합니다. 각 위치에서 .yaml 확장자를 먼저, 그다음 .toml을 시도합니다:

  1. --config 플래그로 지정된 경로
  2. ./config.yaml 또는 ./config.toml (현재 디렉토리)
  3. ~/.config/continuum-router/config.yaml 또는 config.toml (사용자 설정 디렉토리)
  4. /etc/continuum-router/config.yaml 또는 config.toml (시스템 설정 디렉토리)

설정 우선순위

설정은 다음 우선순위로 적용됩니다 (높은 것부터 낮은 순):

  1. 명령줄 인수 (최고 우선순위)
  2. 환경 변수
  3. 설정 파일
  4. 기본값 (최저 우선순위)

이렇게 하면 파일에 기본 설정을 두고, 컨테이너에서는 환경 변수로 특정 설정을 오버라이드하며, 명령줄 인수로 임시 조정을 할 수 있습니다.

설정 파일 형식

전체 설정 예제

# Continuum Router 설정
# 전체 주석이 달린 샘플은 continuum-router --generate-config로 생성하세요

# 서버 설정
server:
  # bind_address는 단일 문자열 또는 주소 배열을 허용합니다
  # TCP 형식: "host:port", Unix 소켓 형식: "unix:/path/to/socket"
  bind_address: "0.0.0.0:8080"          # 단일 주소 (하위 호환)
  # bind_address:                        # 또는 다중 주소:
  #   - "0.0.0.0:8080"                   #   모든 인터페이스의 TCP
  #   - "unix:/var/run/router.sock"      #   Unix 소켓 (Linux/macOS, Windows 10 1809+)
  # socket_mode: 0o660                   # 선택 사항: Unix 소켓 파일 권한
  workers: 4                             # 워커 스레드 수 (0 = 자동 감지)
  connection_pool_size: 100              # 백엔드당 최대 유휴 연결 수

# 모델 메타데이터 설정 (선택 사항)
model_metadata_file: "model-metadata.yaml"  # 외부 모델 메타데이터 파일 경로

# 로드 밸런싱 전략: RoundRobin (기본값), WeightedRoundRobin,
# LeastLatency, Random, ConsistentHash, PrefixAwareHash
selection_strategy: RoundRobin

# 백엔드 설정
backends:
  # 내장 설정이 있는 네이티브 OpenAI API
  - name: "openai"
    type: openai                         # 네이티브 OpenAI 백엔드 사용
    api_key: "${CONTINUUM_OPENAI_API_KEY}"  # 환경 변수에서 로드
    org_id: "${CONTINUUM_OPENAI_ORG_ID}"    # 선택적 조직 ID
    weight: 3
    models:                              # 사용할 모델 지정
      - gpt-4o
      - gpt-4o-mini
      - o3-mini
      - text-embedding-3-large
    retry_override:                      # 백엔드별 재시도 설정 (선택 사항)
      max_attempts: 5
      initial_delay: "200ms"
      max_delay: "30s"
      backoff_multiplier: 2.0
      jitter: true

  # 사용자 정의 메타데이터가 있는 일반 OpenAI 호환 백엔드
  - name: "openai-compatible"
    url: "https://custom-llm.example.com"
    weight: 1
    models:
      - "gpt-4"
      - "gpt-3.5-turbo"
    model_configs:                       # 메타데이터가 포함된 향상된 모델 설정
      - id: "gpt-4"
        aliases:                         # 이 메타데이터를 공유하는 대체 ID (선택 사항)
          - "gpt-4-0125-preview"
          - "gpt-4-turbo-preview"
        metadata:
          display_name: "GPT-4"
          summary: "복잡한 작업을 위한 가장 유능한 GPT-4 모델"
          capabilities: ["text", "image", "function_calling"]
          knowledge_cutoff: "2024-04"
          pricing:
            input_tokens: 0.03
            output_tokens: 0.06
          limits:
            context_window: 128000
            max_output: 4096

  # 자동 URL 감지가 있는 Ollama 로컬 서버
  - name: "local-ollama"
    type: ollama                         # 기본값 http://localhost:11434
    weight: 2
    models:
      - "llama2"
      - "mistral"
      - "codellama"

  # vLLM 서버
  - name: "vllm-server"
    type: vllm
    url: "http://localhost:8000"
    weight: 1
    # 지정하지 않으면 모델이 자동으로 검색됩니다
    # 네임스페이스 접두사가 있는 모델 (예: "custom/gpt-4")은
    # 자동으로 기본 이름의 메타데이터와 일치합니다 (예: "gpt-4")

  # Google Gemini API (네이티브 백엔드)
  - name: "gemini"
    type: gemini                           # 네이티브 Gemini 백엔드 사용
    api_key: "${CONTINUUM_GEMINI_API_KEY}" # 환경 변수에서 로드
    weight: 2
    models:
      - gemini-3.1-pro-preview
      - gemini-3-flash-preview
      - gemini-2.5-pro
      - gemini-2.5-flash

# 헬스 모니터링 설정
health_checks:
  interval: "30s"                        # 백엔드 상태 확인 주기
  timeout: "5s"                          # 헬스 체크 요청 타임아웃
  unhealthy_threshold: 3                 # 비정상으로 표시되기 전 실패 횟수
  healthy_threshold: 2                   # 정상으로 표시되기 전 성공 횟수
  endpoint: "/health"                    # 헬스 체크에 사용되는 엔드포인트
  warmup_check_interval: "1s"            # 백엔드 워밍업(HTTP 503) 중 가속 체크 간격
  max_warmup_duration: "300s"            # 가속 워밍업 모드 최대 지속 시간

# 요청 처리 및 타임아웃 설정
timeouts:
  connection: "10s"                      # TCP 연결 설정 타임아웃
  request:
    standard:                            # 비스트리밍 요청
      first_byte: "30s"                  # 첫 바이트 수신까지의 시간
      total: "180s"                      # 전체 요청 타임아웃 (3분)
    streaming:                           # 스트리밍 (SSE) 요청
      first_byte: "60s"                  # 첫 SSE 청크까지의 시간
      chunk_interval: "30s"              # 청크 간 최대 시간
      total: "600s"                      # 전체 스트리밍 타임아웃 (10분)
    image_generation:                    # 이미지 생성 요청 (DALL-E 등)
      first_byte: "60s"                  # 첫 바이트 수신까지의 시간
      total: "180s"                      # 전체 타임아웃 (기본 3분)
    model_overrides:                     # 모델별 타임아웃 오버라이드
      gpt-5-latest:
        streaming:
          total: "1200s"                 # GPT-5용 20분
      gpt-4o:
        streaming:
          total: "900s"                  # GPT-4o용 15분
  health_check:
    timeout: "5s"                        # 헬스 체크 타임아웃
    interval: "30s"                      # 헬스 체크 간격

# 전역 재시도 및 복원력 설정
retry:
  max_attempts: 3                        # 최대 재시도 횟수
  initial_delay: "100ms"                 # 재시도 간 초기 지연
  max_delay: "10s"                       # 재시도 간 최대 지연
  backoff_multiplier: 2.0                # 지수 백오프 배수
  jitter: true                           # 지연에 무작위 지터 추가
  retryable_status_codes: [429, 502, 503, 504]

# 로깅 설정
logging:
  level: "info"                         # 로그 레벨: trace, debug, info, warn, error
  format: "json"                        # 로그 형식: json, pretty

# Files API 설정
files:
  enabled: true                         # Files API 엔드포인트 활성화/비활성화
  max_file_size: 536870912              # 최대 파일 크기 (바이트, 기본: 512MB)
  storage_path: "./data/files"          # 업로드된 파일 저장 경로 (~지원)
  retention_days: 0                     # 파일 보존 기간 (일, 0 = 영구 보존)
  metadata_storage: persistent          # 메타데이터 백엔드: "memory" 또는 "persistent" (기본)
  cleanup_orphans_on_startup: false     # 시작 시 고아 파일 자동 정리

  # 인증 및 권한
  auth:
    method: api_key                     # "none" 또는 "api_key" (기본)
    required_scope: files               # 접근에 필요한 API 키 스코프
    enforce_ownership: true             # 사용자가 자신의 파일만 접근 가능
    admin_can_access_all: true          # admin 스코프는 모든 파일 접근 가능

# 분산 추적 설정
tracing:
  enabled: true                         # 분산 추적 활성화/비활성화
  w3c_trace_context: true               # W3C Trace Context 지원 (traceparent 헤더)
  headers:
    trace_id: "X-Trace-ID"              # 추적 ID 헤더 이름
    request_id: "X-Request-ID"          # 요청 ID 헤더 이름
    correlation_id: "X-Correlation-ID"  # 상관 ID 헤더 이름

# 서킷 브레이커 설정
circuit_breaker:
  enabled: true                         # 서킷 브레이커 활성화
  failure_threshold: 5                  # 회로 개방까지의 연속 실패 횟수
  failure_rate_threshold: 0.5           # 회로 개방 실패율 (0.0-1.0)
  minimum_requests: 10                  # 실패율 평가 전 최소 요청 수
  timeout: "60s"                        # 복구 시도(반개방)까지의 시간
  half_open_max_requests: 3             # 반개방 상태에서 허용되는 시험 요청 수
  half_open_success_threshold: 2        # 회로를 닫는 데 필요한 성공 횟수

# 속도 제한 설정
rate_limiting:
  enabled: true                         # 속도 제한 활성화
  storage: memory                       # "memory" 또는 "redis"
  limits:
    per_client:
      requests_per_second: 10
      burst_capacity: 20
    global:
      requests_per_second: 1000
      burst_capacity: 2000

# Admin API 설정
admin:
  auth:
    method: bearer                         # 인증 방법: none, bearer, basic, ip_whitelist, api_key
    bearer_token: "${ADMIN_TOKEN}"         # Admin 인증 토큰
  stats:
    enabled: true                          # 통계 수집 활성화/비활성화
    retention_window: 24h                  # 윈도우 쿼리용 링 버퍼 보존 기간
    token_tracking: true                   # 응답 본문에서 토큰 사용량 파싱
    persistence:
      enabled: true                        # 재시작 시 통계 영속 활성화
      path: ./data/stats.json              # 스냅샷 파일 경로
      snapshot_interval: 5m                # 주기적 스냅샷 간격
      max_age: 7d                          # 시작 시 이보다 오래된 스냅샷은 폐기

# 메트릭 및 모니터링 설정
metrics:
  enabled: true                         # Prometheus 메트릭 수집 활성화
  path: "/metrics"                      # 메트릭 엔드포인트 경로

최소 설정

# 최소 설정 - 나머지 설정은 기본값 사용
server:
  bind_address: "0.0.0.0:8080"

backends:
  - name: "ollama"
    url: "http://localhost:11434"
  - name: "lm-studio"
    url: "http://localhost:1234"

환경 변수

환경 변수는 두 가지 방식으로 설정에 반영됩니다:

  1. 직접 오버라이드: 시작 시 설정 파일의 해당 값을 덮어쓰는 소수의 CONTINUUM_* 변수.
  2. ${VAR} 치환: YAML/TOML 파일의 어떤 문자열 값이든 환경 변수를 참조할 수 있고 (예: api_key: "${MY_PROVIDER_KEY}"), 로드 시점에 해석됩니다.

직접 오버라이드

변수 타입 설명
CONTINUUM_BIND_ADDRESS string server.bind_address 오버라이드
CONTINUUM_BACKEND_URLS string 쉼표로 구분된 백엔드 URL. backends 목록을 오버라이드
CONTINUUM_LOG_LEVEL string logging.level 오버라이드 (trace, debug, info, warn, error)
RUST_LOG string Rust 전용 로깅 필터 설정

네이티브 백엔드 API 키

네이티브 백엔드는 설정에 api_key가 없을 때 다음 변수로 폴백합니다:

변수 사용처
CONTINUUM_OPENAI_API_KEY type: openai 백엔드
CONTINUUM_OPENAI_ORG_ID type: openai 백엔드 (선택적 조직 ID)
CONTINUUM_ANTHROPIC_API_KEY type: anthropic 백엔드
CONTINUUM_GEMINI_API_KEY type: gemini 백엔드

API 키 관리

변수 타입 기본값 설명
CONTINUUM_API_KEY string - 간단한 배포용 단일 API 키
CONTINUUM_API_KEY_SCOPES string "read,write" API 키의 쉼표로 구분된 스코프
CONTINUUM_API_KEY_USER_ID string "admin" API 키와 연결된 사용자 ID
CONTINUUM_API_KEY_ORG_ID string "default" API 키와 연결된 조직 ID
CONTINUUM_DEV_MODE boolean false 개발용 API 키 활성화 (프로덕션에서 사용 금지)

환경 설정 예제

# 직접 오버라이드
export CONTINUUM_BIND_ADDRESS="0.0.0.0:9000"
export CONTINUUM_BACKEND_URLS="http://localhost:11434,http://localhost:1234"
export CONTINUUM_LOG_LEVEL="debug"

# config.yaml의 ${...} 치환에서 참조
export CONTINUUM_OPENAI_API_KEY="sk-..."
export ADMIN_TOKEN="my-admin-token"

# 라우터 시작
continuum-router

그 밖의 설정(헬스 체크, 타임아웃, 재시도, 캐싱, Files API 등)은 모두 설정 파일로 지정합니다.

명령줄 인수

명령줄 인수는 최고 우선순위의 설정 방법으로 테스트와 임시 오버라이드에 유용합니다.

핵심 옵션

continuum-router --help
인수 타입 설명
--mode <MODE> enum 서버 모드: http (기본값) 또는 stdio (ACP JSON-RPC 2.0 전송)
-c, --config <FILE> path 설정 파일 경로
--generate-config flag YAML 샘플 설정을 생성하고 종료
--generate-example-config flag 예제 설정 문서(환경 변수, 라우팅, 검증 규칙, 우선순위)를 생성하고 종료
--generate-toml-config flag TOML 형식 샘플 설정을 생성하고 종료
--model-metadata <FILE> path 모델 메타데이터 YAML 파일 경로 (설정 파일보다 우선)

백엔드 설정

인수 타입 설명
--backends <URLs> string 쉼표로 구분된 백엔드 URL
--backend-url <URL> string 단일 백엔드 URL (지원 중단)

서버 설정

인수 타입 설명
--bind <ADDRESS> string 서버 바인드 주소
--connection-pool-size <SIZE> integer HTTP 연결 풀 크기

로드 밸런싱

인수 타입 설명
--selection-strategy <STRATEGY> string 로드 밸런싱 전략: RoundRobin (기본값), WeightedRoundRobin, LeastLatency, Random, ConsistentHash

헬스 체크 설정

인수 타입 설명
--disable-health-checks flag 헬스 모니터링 비활성화
--health-check-interval <SECONDS> integer 헬스 체크 간격
--health-check-timeout <SECONDS> integer 헬스 체크 타임아웃
--unhealthy-threshold <COUNT> integer 비정상 판정까지의 실패 횟수
--healthy-threshold <COUNT> integer 정상 판정까지의 성공 횟수

설정 유틸리티

인수 타입 설명
--migrate-config-file <FILE> path 라우터를 시작하지 않고 설정 파일 문제를 마이그레이션/수정. 백업을 만들고 모든 변경 사항을 보고 (YAML, TOML 지원)
--dry-run flag --migrate-config-file과 함께 사용해 변경 사항을 적용 없이 미리보기

컨테이너 헬스 체크

인수 타입 설명
--health-check flag 실행 중인 서버의 상태를 확인하고 종료 (0 = 정상, 1 = 비정상). Docker HEALTHCHECK 용도
--health-check-url <URL> string 확인할 헬스 엔드포인트 (기본값: http://localhost:8080/health)

서브커맨드

명령 설명
auth login --backend <NAME> 지정한 백엔드(auth.typeoauth여야 함)에 대해 OAuth 디바이스 인가 플로를 실행하고 토큰을 auth.oauth.token_store에 저장. OAuth 백엔드 설정은 서버 & 백엔드를 참조하세요.

CLI 사용 예제

# 설정 파일과 오버라이드 사용
continuum-router --config config.yaml --bind "0.0.0.0:9000"

# 백엔드 임시 오버라이드
continuum-router --config config.yaml --backends "http://localhost:11434"

# 사용자 정의 모델 메타데이터 파일 사용
continuum-router --config config.yaml --model-metadata /path/to/custom-metadata.yaml

# 틸드 확장과 함께 모델 메타데이터 사용
continuum-router --model-metadata ~/configs/model-metadata.yaml

# 테스트용 헬스 체크 설정 조정
continuum-router --config config.yaml --health-check-interval 10

# 샘플 설정 생성
continuum-router --generate-config > my-config.yaml

# 구버전 설정 파일 마이그레이션 (미리보기 후 적용)
continuum-router --migrate-config-file config.yaml --dry-run
continuum-router --migrate-config-file config.yaml

# Docker HEALTHCHECK 프로브
continuum-router --health-check --health-check-url http://localhost:8080/health

# ChatGPT/Codex 백엔드용 OAuth 디바이스 플로 로그인
continuum-router --config config.yaml auth login --backend chatgpt