콘텐츠로 이동

설정 가이드

이 가이드는 Continuum Router 설정에 대한 종합적인 문서를 제공합니다. 라우터는 다양한 배포 시나리오에 최대한의 유연성을 제공하기 위해 명확한 우선순위 시스템과 함께 여러 설정 방법을 지원합니다.

설정 섹션:

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

설정 방법

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

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

설정 파일 검색

라우터는 다음 위치에서 설정 파일을 자동으로 검색합니다 (순서대로):

  1. --config 플래그로 지정된 경로
  2. ./config.yaml (현재 디렉토리)
  3. ./config.yml
  4. /etc/continuum-router/config.yaml
  5. /etc/continuum-router/config.yml
  6. ~/.config/continuum-router/config.yaml
  7. ~/.config/continuum-router/config.yml

설정 우선순위

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

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

이를 통해 다음이 가능합니다:

  • 파일에 기본 설정 지정
  • 컨테이너에서 환경 변수로 특정 설정 오버라이드
  • 명령줄 인수로 임시 조정

설정 파일 형식

전체 설정 예제

# Continuum Router 설정
# 이 예제는 모든 사용 가능한 설정 옵션과 기본값을 보여줍니다

# 서버 설정
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 소켓 (Unix/Linux/macOS만 해당)
  # socket_mode: 0o660                   # 선택 사항: Unix 소켓 파일 권한
  workers: 4                             # 워커 스레드 수 (0 = 자동 감지)
  connection_pool_size: 100              # 백엔드당 최대 유휴 연결 수

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

# 백엔드 설정
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
      base_delay: "200ms"
      max_delay: "30s"
      exponential_backoff: true
      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-2.5-pro
      - gemini-2.5-flash
      - gemini-2.0-flash

# 헬스 모니터링 설정
health_checks:
  enabled: true                          # 헬스 체크 활성화/비활성화
  interval: "30s"                        # 백엔드 상태 확인 주기
  timeout: "10s"                         # 헬스 체크 요청 타임아웃
  unhealthy_threshold: 3                 # 비정상으로 표시되기 전 실패 횟수
  healthy_threshold: 2                   # 정상으로 표시되기 전 성공 횟수
  endpoint: "/v1/models"                 # 헬스 체크에 사용되는 엔드포인트

# 요청 처리 및 타임아웃 설정
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"                      # 헬스 체크 간격

request:
  max_retries: 3                         # 요청 최대 재시도 횟수
  retry_delay: "1s"                      # 재시도 간 초기 지연

# 전역 재시도 및 복원력 설정
retry:
  max_attempts: 3                        # 최대 재시도 횟수
  base_delay: "100ms"                    # 재시도 간 기본 지연
  max_delay: "30s"                       # 재시도 간 최대 지연
  exponential_backoff: true              # 지수 백오프 사용
  jitter: true                           # 지연에 무작위 지터 추가

# 캐싱 및 최적화 설정
cache:
  model_cache_ttl: "300s"               # 모델 목록 캐시 5분
  deduplication_ttl: "60s"              # 요청 중복 제거 1분
  enable_deduplication: true            # 요청 중복 제거 활성화

# 로깅 설정
logging:
  level: "info"                         # 로그 레벨: trace, debug, info, warn, error
  format: "json"                        # 로그 형식: json, pretty
  enable_colors: false                  # 컬러 출력 활성화 (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 스코프는 모든 파일 접근 가능

# 로드 밸런싱 설정
load_balancer:
  strategy: "round_robin"               # 전략: round_robin, weighted, random
  health_aware: true                    # 정상 백엔드로만 라우팅

# 분산 추적 설정
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: false                        # 서킷 브레이커 활성화
  failure_threshold: 5                  # 회로 개방까지의 실패 횟수
  recovery_timeout: "60s"               # 복구 시도까지의 시간
  half_open_retries: 3                  # 반개방 상태에서의 재시도 횟수

# 속도 제한 설정
rate_limiting:
  enabled: false                        # 속도 제한 활성화
  requests_per_second: 100              # 전역 초당 요청 수
  burst_size: 200                       # 버스트 용량

# Admin API 설정
admin:
  auth:
    method: bearer_token                   # 인증 방법: none, bearer_token, basic, api_key
    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: false                        # 메트릭 수집 활성화
  endpoint: "/metrics"                  # 메트릭 엔드포인트 경로
  include_labels: true                  # 상세 레이블 포함

최소 설정

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

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

환경 변수

모든 설정 옵션은 CONTINUUM_ 접두사가 붙은 환경 변수로 오버라이드할 수 있습니다:

서버 설정

변수 타입 기본값 설명
CONTINUUM_BIND_ADDRESS string "0.0.0.0:8080" 서버 바인드 주소
CONTINUUM_WORKERS integer 4 워커 스레드 수
CONTINUUM_CONNECTION_POOL_SIZE integer 100 HTTP 연결 풀 크기

백엔드 설정

변수 타입 기본값 설명
CONTINUUM_BACKEND_URLS string 쉼표로 구분된 백엔드 URL
CONTINUUM_BACKEND_WEIGHTS string 쉼표로 구분된 가중치 (URL과 일치해야 함)

헬스 체크 설정

변수 타입 기본값 설명
CONTINUUM_HEALTH_CHECKS_ENABLED boolean true 헬스 체크 활성화
CONTINUUM_HEALTH_CHECK_INTERVAL string "30s" 헬스 체크 간격
CONTINUUM_HEALTH_CHECK_TIMEOUT string "10s" 헬스 체크 타임아웃
CONTINUUM_UNHEALTHY_THRESHOLD integer 3 비정상 판정까지의 실패 횟수
CONTINUUM_HEALTHY_THRESHOLD integer 2 정상 판정까지의 성공 횟수

요청 설정

변수 타입 기본값 설명
CONTINUUM_REQUEST_TIMEOUT string "300s" 최대 요청 타임아웃
CONTINUUM_MAX_RETRIES integer 3 최대 재시도 횟수
CONTINUUM_RETRY_DELAY string "1s" 초기 재시도 지연

로깅 설정

변수 타입 기본값 설명
CONTINUUM_LOG_LEVEL string "info" 로그 레벨
CONTINUUM_LOG_FORMAT string "json" 로그 형식
CONTINUUM_LOG_COLORS boolean false 컬러 출력 활성화
RUST_LOG string Rust 전용 로깅 설정

캐시 설정

변수 타입 기본값 설명
CONTINUUM_MODEL_CACHE_TTL string "300s" 모델 캐시 TTL
CONTINUUM_DEDUPLICATION_TTL string "60s" 중복 제거 TTL
CONTINUUM_ENABLE_DEDUPLICATION boolean true 중복 제거 활성화

Files API 설정

변수 타입 기본값 설명
CONTINUUM_FILES_ENABLED boolean true Files API 활성화/비활성화
CONTINUUM_FILES_MAX_SIZE integer 536870912 최대 파일 크기 (바이트, 512MB)
CONTINUUM_FILES_STORAGE_PATH string "./data/files" 업로드 파일 저장 경로
CONTINUUM_FILES_RETENTION_DAYS integer 0 파일 보존 기간 (일, 0 = 영구)
CONTINUUM_FILES_METADATA_STORAGE string "persistent" 메타데이터 백엔드: "memory" 또는 "persistent"
CONTINUUM_FILES_CLEANUP_ORPHANS boolean false 시작 시 고아 파일 자동 정리
CONTINUUM_FILES_AUTH_METHOD string "api_key" 인증 방법: "none" 또는 "api_key"
CONTINUUM_FILES_AUTH_SCOPE string "files" Files API 접근에 필요한 API 키 스코프
CONTINUUM_FILES_ENFORCE_OWNERSHIP boolean true 사용자가 자신의 파일만 접근 가능
CONTINUUM_FILES_ADMIN_ACCESS_ALL boolean true admin 스코프는 모든 파일 접근 가능
CONTINUUM_DEV_MODE boolean false 개발용 API 키 활성화 (프로덕션에서 사용 금지)

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"

# 고급 설정
export CONTINUUM_CONNECTION_POOL_SIZE="200"
export CONTINUUM_HEALTH_CHECK_INTERVAL="60s"
export CONTINUUM_MODEL_CACHE_TTL="600s"
export CONTINUUM_ENABLE_DEDUPLICATION="true"

# 라우터 시작
continuum-router

명령줄 인수

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

핵심 옵션

continuum-router --help
인수 타입 설명
-c, --config <FILE> path 설정 파일 경로
--generate-config flag 샘플 설정을 생성하고 종료

백엔드 설정

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

서버 설정

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

헬스 체크 설정

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

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 --health-check-interval 10

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