변경 내역¶
Continuum Router의 모든 주요 변경 사항은 이 파일에 문서화되어 있습니다.
형식은 Keep a Changelog를 기반으로 하며, 이 프로젝트는 Semantic Versioning을 따릅니다.
[0.22.0] - 2025-12-19¶
추가됨¶
- 사전 빌드 바이너리 Docker 지원 - GitHub Releases에서 사전 빌드된 바이너리를 다운로드하는 Dockerfile 및 Dockerfile.alpine 추가 (#189)
- 일반 사용을 위한 Debian Bookworm 기반 이미지 (~50MB)
- 최소 배포를 위한 Alpine 3.20 기반 이미지 (~10MB)
- TARGETARCH를 사용한 멀티 아키텍처 지원 (linux/amd64, linux/arm64)
- 릴리스 버전 선택을 위한 VERSION 빌드 인자
- 보안을 위한 비루트 사용자 실행
- 이미지 메타데이터를 위한 OCI 라벨
- 컨테이너 헬스 체크 CLI - 컨테이너 오케스트레이션을 위한
--health-checkCLI 인자 구현 (#189)- 서버가 정상이면 종료 코드 0, 비정상이면 1 반환
- 사용자 정의 헬스 엔드포인트를 위한 선택적
--health-check-url - 적절한 IPv6 주소 처리
- 기본 5초 타임아웃
- Docker Compose 빠른 시작 - 간편한 배포를 위한 docker-compose.yml 추가 (#189)
- 설정을 위한 볼륨 마운트
- 환경 변수 지원 (RUST_LOG)
- 리소스 제한 및 헬스 체크
- 자동화된 Docker 이미지 퍼블리싱 - 릴리스 워크플로우에 Docker 빌드 및 ghcr.io 푸시 추가 (#189)
- 바이너리 릴리스 후 Debian 및 Alpine 이미지 빌드
- 멀티 플랫폼 지원 (linux/amd64, linux/arm64)
- semver로 자동 태깅 (VERSION, MAJOR.MINOR, latest)
- Alpine 이미지는 -alpine 접미사로 태그
- 더 빠른 빌드를 위한 GitHub Actions 캐시
- MkDocs 문서 웹사이트 - Material 테마로 종합적인 문서 사이트 구축 (#183)
- 시작하기, 기능, 운영, 개발 섹션이 있는 전체 네비게이션 구조
- GitHub Pages 자동 배포를 위한 GitHub Actions 워크플로우
- 사용자 정의 스타일시트 및 테마 구성
- 한국어 문서 번역 - 모든 문서의 완전한 한국어 현지화 (#190)
- 20개 문서 파일 모두 한국어로 번역
- 네비게이션에 언어 전환기 (영어/한국어)
- GitHub Actions 워크플로우에서 다국어 빌드
- 의존성 보안 감사 - 취약점 스캔을 위한 cargo-deny 추가 (#192)
- CI 워크플로우에서 보안 권고 확인
- 라이선스 준수 검증
- 의존성 소스 검증
- Dependabot 통합 - Cargo 및 GitHub Actions 자동 의존성 업데이트 (#192)
- 보안 정책 - 취약점 보고 프로세스를 포함한 종합적인 SECURITY.md 추가 (#191)
변경됨¶
- 고아 아키텍처 문서를 MkDocs 사이트에 통합 (#186)
- URL 친화적 파일명을 위해 문서 파일명을 소문자 케밥케이스로 변경 (#186)
- 다양한 GitHub Actions를 최신 버전으로 업데이트 (checkout@v6, setup-python@v6, upload-artifact@v6 등)
수정됨¶
- 헬스 체크 응답 검증 로직 버그 (연산자 우선순위 문제)
- 설정 오류를 조용히 숨기던 주소 파싱 폴백
- 헬스 체크에서 IPv6 주소 형식 지정 (이제 브라켓 표기법을 올바르게 사용)
보안¶
- reqwest 0.11→0.12, prometheus 0.13→0.14, validator 0.18→0.20 업데이트
- 더 나은 유지보수를 위해 dotenv를 dotenvy로 교체
- 빌드 컨텍스트에서 민감한 파일 제외를 위한 .dockerignore 추가
[0.21.0] - 2025-12-19¶
추가됨¶
- Gemini 3 Flash Preview 모델 - gemini-3-flash-preview 모델 지원 추가 (#168)
- 백엔드 오류 전달 - 4xx 응답에 대해 백엔드의 상세 오류 메시지 전달 (#177)
- OpenAI, Anthropic, Gemini 백엔드의 원본 오류 메시지 파싱 및 전달
- 가능한 경우
param필드 보존 (잘못된 파라미터 오류에 유용) - 백엔드 응답 파싱 불가 시 일반 오류 메시지로 폴백
- OpenAI 호환 오류 형식 유지
- 모든 백엔드 형식에 대한 오류 파싱 단위 테스트 포함
- API 엔드포인트 기본 인증 모드 - API 엔드포인트에 대한 설정 가능한 인증 적용 (#173)
api_keys설정에 새mode필드:permissive(기본값) 또는blockingpermissive모드: API 키 없는 요청 허용 (하위 호환성 유지)blocking모드: 인증된 요청만 처리, 미인증 요청은 401 수신- 보호 엔드포인트:
/v1/chat/completions,/v1/completions,/v1/responses,/v1/images/*,/v1/models - 헬스 엔드포인트 (
/health,/healthz)는 항상 인증 없이 접근 가능 - 인증 모드 변경에 대한 핫 리로드 지원
- 두 모드에 대한 포괄적인 통합 테스트
- API.md, configuration.md, manpage 문서 업데이트
수정됨¶
- UTF-8 멀티바이트 문자 손상 - 스트리밍 응답에서 UTF-8 멀티바이트 문자 손상 처리 (#179)
- GPT Image response_format - GPT Image 모델에서 response_format 파라미터 제거 (#176)
- 자동 검색 검증 - Anthropic을 제외한 모든 백엔드에 대해 자동 검색 허용 (#172)
변경됨¶
[0.20.0] - 2025-12-18¶
추가됨¶
- Gemini 이미지 변형 지원 - Gemini (nano-banana) 모델에 대한 이미지 변형 지원 추가 (#165)
- Gemini 이미지 편집 지원 - Gemini (nano-banana) 모델에 대한 제한적 이미지 편집 지원 구현 (#164)
- 향상된 이미지 생성 - 스트리밍 및 GPT Image 기능으로 /v1/images/generations 향상 (#161)
- GPT Image 1.5 모델 - gpt-image-1.5 모델 지원 추가 (#159)
- 이미지 변형 엔드포인트 - 이미지 변형을 위한 /v1/images/variations 엔드포인트 구현 (#155)
- 이미지 편집 엔드포인트 - 이미지 편집(인페인팅)을 위한 /v1/images/edits 엔드포인트 구현 (#156)
- 완전한 OpenAI Images Edit API 호환성
- GPT Image 모델 지원:
gpt-image-1,gpt-image-1-mini,gpt-image-1.5(권장) dall-e-2모델 레거시 지원- 공유 유틸리티를 사용한 multipart form-data 파싱
- PNG 이미지 검증 (형식, 크기, 정사각형 치수)
- 선택적 마스크 검증 (원본 이미지와 치수 일치)
- 공유 이미지 유틸리티 - 이미지 편집/변형 엔드포인트를 위한 공유 유틸리티 구현 (#154)
- 외부 프롬프트 파일 - 외부 Markdown 파일에서 시스템 프롬프트 로딩 지원 (#146)
BackendPromptConfig및ModelPromptConfig에 새prompt_file필드GlobalPromptConfig에 새default_file및prompts_dir필드- 경로 순회 공격 방지를 위한 안전한 경로 검증
- 프롬프트 파일 관리를 위한 REST API 엔드포인트
- 크기 제한이 있는 파일 캐싱 (최대 100개 항목, 총 50MB)
- 프롬프트 파일에 대한 핫 리로드 지원
- Solar Open 100B 모델 - Solar Open 100B 모델 메타데이터 추가
- 자동 모델 검색 - 모델이 명시적으로 설정되지 않은 경우 백엔드가
/v1/modelsAPI에서 자동으로 사용 가능한 모델 검색 (#142)- OpenAI, Gemini, vLLM 백엔드가 자동 검색 지원
- Ollama 백엔드는 vLLM의 검색 메커니즘 사용 (OpenAI 호환 API)
- 10초 타임아웃으로 시작 차단 방지
- 검색 실패 시 하드코딩된 기본값으로 폴백
변경됨¶
BackendFactory::create_backend_from_typed_config()가 비동기 모델 검색을 지원하기 위해 async로 변경- OpenAI, Gemini, vLLM의 백엔드
from_config()메서드가 async로 변경
보안¶
- API 키 수정 - 자격 증명 노출 방지를 위한 API 키 수정 구현 (#150)
성능¶
- 바이너리 크기 최적화 - 릴리스 바이너리 크기를 20MB에서 6MB로 최적화 (70% 감소) (#144)
리팩토링¶
- 이슈 #147의 우선순위 2를 위한 대용량 파일 분할
- 각 파일을 500줄 미만으로 유지하기 위한 대용량 파일 분할 (#148)
[0.19.0] - 2025-12-13¶
추가됨¶
- 런타임 설정 관리 API - 런타임에 설정을 보고 수정하기 위한 포괄적인 REST API (#139)
- 설정 쿼리 API:
GET /admin/config/full- 민감 정보가 마스킹된 전체 설정 조회GET /admin/config/sections- 15개 설정 섹션 전체 목록GET /admin/config/{section}- 특정 섹션 설정 조회GET /admin/config/schema- 클라이언트 측 검증을 위한 JSON Schema
- 설정 수정 API:
PUT /admin/config/{section}- 섹션 설정 교체PATCH /admin/config/{section}- 부분 업데이트 (JSON merge patch)POST /admin/config/validate- 적용 전 설정 검증POST /admin/config/apply- 핫 리로드로 설정 적용
- 설정 저장/복원 API:
POST /admin/config/export- 설정 내보내기 (YAML/JSON/TOML)POST /admin/config/import- 설정 가져오기 및 적용GET /admin/config/history- 설정 변경 이력 조회POST /admin/config/rollback/{version}- 이전 버전으로 롤백
- 백엔드 관리 API:
POST /admin/backends- 새 백엔드 추가GET /admin/backends/{name}- 백엔드 설정 조회PUT /admin/backends/{name}- 백엔드 설정 업데이트DELETE /admin/backends/{name}- 백엔드 제거PUT /admin/backends/{name}/weight- 백엔드 가중치 업데이트PUT /admin/backends/{name}/models- 백엔드 모델 목록 업데이트
- API 키, 비밀번호, 토큰에 대한 민감 정보 마스킹
- 모든 설정 섹션에 대한 JSON Schema 생성
- 설정 이력 추적 (최대 100개 항목, 설정 가능)
- 크기 기반 퇴거를 통한 메모리 효율적 이력 저장 (10MB 제한)
- 스레드 안전성을 위한 AtomicU64 사용 원자적 버전 카운터
- 오류 코드가 포함된 구조화된 오류 응답
- 설정 쿼리 API:
- Admin REST API 문서 - 포괄적인 개발자 가이드 (docs/admin-api.md)
- 요청/응답 예제가 포함된 완전한 API 레퍼런스
- Python, JavaScript/TypeScript, Go용 클라이언트 SDK 예제
- 모범 사례 및 보안 고려사항
- 통합 테스트 - 설정 관리 API 엔드포인트에 대한 33개 통합 테스트
수정됨¶
- 심각: 설정 변경이 이제 실행 중인 시스템에 실제로 적용됨
- 심각: JSON 문자열 저장 및 크기 기반 퇴거로 메모리 증가 제어
- 높음: 입력 검증 추가 (1MB 콘텐츠 제한, 32레벨 중첩 깊이)
- 높음: 민감 내보내기에 권한 상승 및 감사 로깅 필요
- 높음: 포괄적인 민감 필드 감지 (30개 이상 패턴)
- 중간: 검증 함수가 이제 실제 검증 수행
- 중간: 버전 카운터에 AtomicU64로 경쟁 조건 수정
- 중간: 허용된 백엔드 이름 문자에서 콜론 제거
- 중간: 오류 코드가 포함된 구조화된 오류 응답
- 중간: 초기화 플래그로 중복 이력 항목 방지
- 낮음: 더 나은 성능을 위해 불필요한 클론 제거
- 낮음: AdminConfig를 통해 제한 설정 가능
- 낮음: 중복 검증 로직 리팩토링
- 낮음: 엣지 케이스에 대한 테스트 커버리지 개선
변경됨¶
- 모든 가이드에서 설정 관리 API 문서 향상
- 새 관리 엔드포인트로 manpage 업데이트
- 포괄적인 설정 관리 API 섹션으로 API.md 업데이트
[0.18.0] - 2025-12-13¶
추가됨¶
- API 키별 속도 제한 - API 키별 속도 제한 구현 (#137)
- 각 API 키에 대한 개별 속도 제한
- 키당 분당 요청 수 설정 가능
- API 키 관리 시스템 - 포괄적인 API 키 관리 및 설정 시스템
- 다중 키 소스: 설정 파일, 외부 파일, 환경 변수
- 키 속성: 스코프, 속도 제한, 만료, 활성화 상태
- 키 설정 변경에 대한 핫 리로드 지원
- Files API 인증 - Files API에 대한 인증 및 권한 부여 구현 (#131)
- 파일 작업에 대한 API 키 인증
- 파일 소유권 적용
- 모든 파일에 대한 관리자 접근 제어
- 런타임 설정 핫 리로드 - 런타임 설정 업데이트를 위한 완전한 핫 리로드 기능 (#130)
- 자동 설정 파일 감시
- 분류된 업데이트: 즉시, 점진적, 재시작 필요
변경됨¶
- 모듈식 구조로 대규모 리팩토링
- 리팩토링된 모듈 구조를 반영하도록 architecture.md 업데이트
수정됨¶
- admin/metrics/files 엔드포인트에 ConnectInfo 확장 추가
- API 키 관리의 보안 취약점 해결
- API 키 관리의 코드 품질 문제 해결
문서¶
- API 키 관리 문서 추가
- 포괄적인 API 키 관리 테스트 추가
[0.17.0] - 2025-12-12¶
추가됨¶
- Anthropic 백엔드 파일 콘텐츠 변환 - 라우터에 업로드된 파일을 이제 Anthropic 백엔드와 함께 사용 가능 (#126)
- 파일 콘텐츠를 Anthropic 메시지 형식으로 자동 변환
- base64 인코딩을 사용한 텍스트 및 문서 파일 지원
- 파일 해결 미들웨어와 원활한 통합
- Gemini 백엔드 파일 콘텐츠 변환 - 라우터에 업로드된 파일을 이제 Gemini 백엔드와 함께 사용 가능 (#127)
- 파일 콘텐츠를 Gemini API 형식으로 자동 변환
- 적절한 MIME 타입 처리를 통한 인라인 데이터 지원
- 크로스 프로바이더 파일 지원으로 한 번 업로드한 파일을 모든 백엔드에서 사용 가능
수정됨¶
- 스트리밍 파일 업로드 - 메모리 소진 방지를 위한 스트리밍 파일 업로드 구현 (#128)
- 대용량 파일 업로드가 더 이상 전체 파일을 메모리에 로드하지 않음
- 효율적인 메모리 사용을 위한 스트리밍 처리
- 대용량 파일 업로드 시 OOM 오류 방지
변경됨¶
- 없음
[0.16.0] - 2025-12-12¶
추가됨¶
- OpenAI 호환 Files API - OpenAI Files API 엔드포인트 전체 구현 (#111)
- multipart/form-data 지원 파일 업로드
- 파일 목록, 조회, 삭제
- 파일 콘텐츠 다운로드
- 용도 지원: fine-tune, batch, assistants, user_data
- 파일 해결 미들웨어 - 채팅 완료를 위한 자동 파일 콘텐츠 주입 (#120)
- 파일 ID로 채팅 메시지에서 업로드된 파일 참조
- 채팅 컨텍스트에 자동 콘텐츠 주입
- 영속적 메타데이터 스토리지 - 서버 재시작 후에도 파일 메타데이터 유지 (#125)
- 데이터 파일과 함께 저장되는 사이드카 JSON 파일 (.meta.json)
- 파일에서 메타데이터 재빌드를 통한 시작 시 자동 복구
- 고아 파일 감지 및 선택적 정리
- OpenAI 백엔드 파일 처리 - 로컬에 업로드된 파일이 필요시 OpenAI로 전달됨 (#121, #122)
- GPT-5.2 모델 지원 - OpenAI 백엔드에 GPT-5.2 모델 메타데이터 추가 (#124)
- 서킷 브레이커 패턴 - 서킷 브레이커를 통한 자동 백엔드 장애 조치 (#93)
- 상태: Closed → Open → Half-Open → Closed 사이클
- 설정 가능한 실패 임계값 및 복구 타임아웃
- 백엔드별 서킷 브레이커 인스턴스
- 서킷 브레이커 상태 및 제어를 위한 관리자 엔드포인트
- 관리자 엔드포인트 인증 - 인증 및 감사 로깅으로 관리자 엔드포인트 보안
- 설정 가능한 폴백 모델 - 모델 사용 불가 시나리오에 대한 자동 모델 폴백 (#50)
- 기본 모델에 대한 폴백 체인 정의 (예: gpt-4o → gpt-4-turbo → gpt-3.5-turbo)
- 크로스 프로바이더 폴백 지원 (예: OpenAI → Anthropic)
- 프로바이더 간 자동 파라미터 변환
- 계층화된 장애 조치 보호를 위한 서킷 브레이커와 통합
- 설정 가능한 트리거 조건 (오류 코드, 타임아웃, 연결 오류, 서킷 브레이커 오픈)
- 폴백 사용 시 응답 헤더 표시 (X-Fallback-Used, X-Original-Model, X-Fallback-Model)
- 폴백 모니터링을 위한 Prometheus 메트릭
- Pre-commit Hook - 커밋 전 자동 코드 포맷팅 및 린팅
수정됨¶
- 폴백 체인 검증 - 체인 검증을 Validate derive에 통합
- 폴백 성능 - 폴백 체인 순회를 위한 인덱스 기반 조회 사용
- 락 경합 - 스냅샷 패턴으로 FallbackService의 락 경합 감소
- 보안 - 폴백 오류 헤더 및 메트릭 레이블 살균
- 서킷 브레이커 보안 - 관리자 엔드포인트에 백엔드 이름 검증 추가
- 스레드 안전성 - half-open 요청 제한을 위한 스레드 안전 CAS 루프 사용
변경됨¶
- 문서 업데이트 - 폴백 설정, 서킷 브레이커, Files API에 대한 포괄적인 문서
- 코드 품질 - clippy 경고 수정 및 코드 포맷팅
- Pre-commit Hook 위치 - pre-commit hook을 .githooks 디렉토리로 이동
[0.15.0] - 2025-12-05¶
추가됨¶
- Nano Banana API 지원 - OpenAI 호환 인터페이스로 Gemini 이미지 생성 API 지원 추가 (#102)
- nano-banana 및 nano-banana-pro 모델 지원
- OpenAI Images API와 Gemini Imagen API 간 자동 형식 변환
- /v1/models 엔드포인트 분리 - 표준 경량 응답 vs 확장 메타데이터 응답 (#101)
/v1/models는 더 나은 성능을 위해 경량 응답 반환/v1/models?extended=true는 상세 모델 정보를 위한 전체 메타데이터 반환
변경됨¶
- StreamService 추출 - 모듈식 아키텍처를 위해 스트리밍 핸들러 로직을 전용 StreamService로 추출 (#106)
- 재시도 로직 중복 제거 - proxy.rs에서 재시도 로직 코드 통합 (#103)
수정됨¶
- 적절한 오류 전파 - HttpClientFactory에서
.expect()패닉을 적절한 오류 전파로 교체 (#104)
성능¶
- LRU 캐시 최적화 - 캐시 조회에 쓰기 락 대신 읽기 락 사용 (#105)
[0.14.2] - 2025-12-05¶
추가됨¶
- 토큰 사용량 로깅 - 요청 완료 시 입력/출력 토큰 수 로깅 (#92)
- 리포트 제외 목록 - 리포트에 대한 제외 목록 설정 추가
변경됨¶
- 없음
수정됨¶
- 없음
[0.14.1] - 2025-12-05¶
추가됨¶
- TTFB 벤치마크 타겟 - Makefile에 TTFB 벤치마크 타겟 추가
- 연결 사전 준비 - Anthropic, Gemini, OpenAI 백엔드에 대한 연결 사전 준비 추가
수정됨¶
- Anthropic 백엔드 TTFT - 연결 풀링 및 HTTP/2로 Anthropic 백엔드 TTFT 최적화 (#90)
- Gemini 백엔드 TTFT - 연결 풀링 및 HTTP/2로 Gemini 백엔드 TTFT 최적화 (#88)
- 모델 메타데이터 별칭 매칭 - 모델 메타데이터 조회에서 별칭에 기본 이름 폴백 매칭 적용 (#84)
변경됨¶
- 공유 HTTP 클라이언트 - HealthChecker와 요청 핸들러 간 HTTP 클라이언트 공유
- 아키텍처 및 성능 문서 업데이트
[0.14.0] - 2025-12-04¶
추가됨¶
- 전역 시스템 프롬프트 주입 - 라우터 전역 시스템 프롬프트 주입 추가 (#82)
수정됨¶
- GitHub Actions - 더 이상 사용되지 않는 actions-rs/toolchain을 dtolnay/rust-toolchain으로 교체
- macOS ARM64 빌드 - macOS ARM64 ring 빌드를 위한 RUSTFLAGS 추가
- musl 빌드 - musl 크로스 컴파일 지원을 위해 rustls-tls로 전환
변경됨¶
- GitHub Action runner 업데이트
[0.13.0] - 2025-12-04¶
추가됨¶
- OpenAI Responses API (
/v1/responses) - OpenAI Responses API 전체 구현 (#49)- 자동 만료가 있는 세션 기반 응답 관리
- 만료된 세션에 대한 백그라운드 정리 작업
- Responses API와 Chat Completions 간 요청/응답 형식 변환기
- API 키용 SecretString - 모든 백엔드에서 SecretString을 사용한 안전한 API 키 저장 (#76)
- 모델 메타데이터 오버라이드 - model-metadata.yaml을 통한 /v1/models 응답 필드 오버라이드 허용 (#75)
수정됨¶
- 진정한 SSE 스트리밍 - /v1/responses API에 대한 적절한 Server-Sent Events 스트리밍 구현
변경됨¶
- SseParser 즉시 모드 - 즉시 파싱 모드로 첫 응답 지연 감소
- 문자열 할당 최적화 - 할당 감소로 성능 개선
- 오류 처리 표준화 - 코드베이스 전체에 일관된 오류 처리 패턴
보안¶
- 세션 접근 제어 - 세션 관리에 적절한 접근 제어 추가
- 입력 검증 - Responses API에 대한 포괄적인 입력 검증
[0.12.0] - 2025-12-04¶
추가됨¶
- SSRF 방지 모듈 - 포괄적인 SSRF 방지를 위한 새 UrlValidator 모듈 (#66)
- 중앙화된 HTTP 클라이언트 팩토리 - 백엔드 간 일관된 HTTP 클라이언트 생성을 위한 HttpClientFactory (#67)
수정됨¶
- 일관된 해시 알고리즘 - 적절한 라우팅을 위해 이진 검색에서 정확한 해시 일치 처리 (#72)
- 패닉을 Option 반환으로 교체 - 패닉을 Option 반환으로 교체하여 신뢰성 향상 (#71)
- 하드코딩된 인증 요구사항 제거 - /v1/models 엔드포인트에 더 이상 하드코딩된 인증 필요 없음
- GitHub Actions - Projects V2 API 접근을 위해 GitHub App 토큰 사용
변경됨¶
- OpenAI 모델 메타데이터 재구성 - 더 나은 유지보수성을 위해 모델 메타데이터를 패밀리별로 구성 (#74)
- AnthropicStreamTransformer 추출 - Anthropic 스트림 변환을 위한 전용 모듈 (#73)
- Backends 모듈 분할 - 더 깔끔한 아키텍처를 위해 backends mod.rs를 별도 모듈로 분할 (#69)
- 임베디드 테스트 추출 - 더 나은 구성을 위해 테스트를 별도 파일로 이동 (#68)
- RequestExecutor 추출 - 요청 실행을 위한 공유 공통 모듈 (#65)
- HeaderBuilder 추출 - 인증 전략을 전용 모듈로 이동 (#64)
- AtomicStatistics 추출 - 원자적 통계를 위한 공유 공통 모듈
기술 개선¶
- 모듈식 아키텍처로 코드 구성 개선
- 더 나은 관측성을 위한 통계 집계 구현
- SSRF 방지 기능으로 보안 강화
[0.11.0] - 2025-12-03¶
추가됨¶
- 네이티브 Anthropic Claude API 백엔드 (
type: anthropic) - OpenAI 호환 엔드포인트 (#33)CONTINUUM_ANTHROPIC_API_KEY환경 변수에서 자동 API 키 로드- Claude 사고 모델을 위한 확장 사고 블록 지원
- OpenAI에서 Claude로 reasoning 파라미터 변환 (
reasoning_effort) - 플랫
reasoning_effort파라미터 지원
- Claude 4, 4.1, 4.5 모델 메타데이터 문서
수정됨¶
- Anthropic/Gemini 백엔드에 대한 헬스 체크 및 모델 가져오기 개선
- 압축 문제 방지를 위해 스트리밍 요청에
Accept-Encoding: identity헤더 추가 - 적절한 Accept-Encoding 처리를 위해 proxy.rs의
make_backend_request수정
변경됨¶
- 리팩토링: 코드 포맷팅 적용 및 clippy 경고 수정
- 리팩토링: Accept-Encoding 헤더 대신 reqwest
no_gzip/no_brotli/no_deflate사용
[0.10.0] - 2025-12-03¶
추가됨¶
- 네이티브 Google Gemini API 백엔드 (
type: gemini) - OpenAI 호환 엔드포인트 (#32)CONTINUUM_GEMINI_API_KEY환경 변수에서 자동 API 키 로드- 사고 모델 (gemini-2.5-pro, gemini-3-pro)에 대한 300초 확장 스트리밍 타임아웃
- 응답 잘림 방지를 위한 사고 모델의 자동
max_tokens조정 reasoning_effort파라미터 지원
- 네이티브 OpenAI API 백엔드 (
type: openai) - 내장 설정CONTINUUM_OPENAI_API_KEY환경 변수에서 자동 API 키 로드- /v1/models 응답에 내장 OpenAI 모델 메타데이터
- OpenAI Images API 지원 (
/v1/images/generations) - DALL-E 및 gpt-image-1 모델 (#35)- 설정 가능한 이미지 생성 타임아웃 (
timeouts.request.image_generation) - 이미지 생성 파라미터에 대한 포괄적인 입력 검증
- 이미지 생성 API에 대한 응답 형식 검증
- 설정 가능한 이미지 생성 타임아웃 (
- OpenAI 및 API 키 백엔드에 대한 인증된 헬스 체크
- 스트리밍 요청에 API 키 인증
- 설정된 모델만 표시하도록 /v1/models 필터링
- -c/--config로 명시적으로 지정된 경우 모든 설정 파일 경로 허용
.env.example및 타입이 지정된 백엔드 설정 예제- GLM 4.6, Kimi K2, DeepSeek, GPT, Qwen3 시리즈에 대한 포괄적인 모델 메타데이터
수정됨¶
- 사고 모델 (gemini-2.5-pro, gemini-3-pro)의 스트리밍 응답 잘림
- Gemini 백엔드의 모델 ID 정규화 및 스트리밍 호환성
- 최신 OpenAI 모델에 대해
max_tokens를max_completion_tokens로 변환 - 모든 API 엔드포인트에 대한 올바른 URL 구성
- 보안: 디버그 로그에서 민감 데이터 제거
- 보안: DoS 공격 방지를 위한 요청 본문 크기 제한 추가
변경됨¶
- 리팩토링: RequestType enum으로 요청 재시도 로직 통합
- 리팩토링: 락 프리 통계 및 슬라이스 반환으로 Gemini 백엔드 성능 개선
- Gemini 백엔드 문서 및 max_tokens 동작 문서 추가
- 이미지 생성 API 문서 추가
- model-metadata.yaml의 기능 명명 표준화
[0.9.0] - 2025-12-02¶
추가됨¶
- 네이티브 Google Gemini API 백엔드 (
type: gemini) - OpenAI 호환 엔드포인트 (#32)CONTINUUM_GEMINI_API_KEY환경 변수에서 자동 API 키 로드- 사고 모델 (gemini-2.5-pro, gemini-3-pro)에 대한 300초 확장 스트리밍 타임아웃
- 응답 잘림 방지를 위한 사고 모델의 자동
max_tokens조정 reasoning_effort파라미터 지원
- DALL-E 및 gpt-image-1 모델을 위한 OpenAI Images API 지원 (
/v1/images/generations) (#35) - 설정 가능한 이미지 생성 타임아웃 (
timeouts.request.image_generation) - GPT-5 패밀리, o-시리즈, 오디오/음성, 비디오 (Sora), 임베딩 모델을 포함한 OpenAI 모델의 포괄적인 메타데이터
- 토큰 버킷 알고리즘을 사용한 향상된 속도 제한 (#11)
- 포괄적인 Prometheus 메트릭 및 모니터링 (#10)
- 설정 파일 마이그레이션 및 자동 수정 CLI 유틸리티 (#29)
- 메트릭 엔드포인트에 대한 포괄적인 인증
수정됨¶
- 심각: 토큰 리필에서 경쟁 조건 제거
- 심각: SHA-256 해싱으로 API 키 보호
- 심각: 무제한 버킷 증가를 통한 메모리 소진 방지
- 심각: 헤더 인젝션 취약점 방지
- 높음: X-Forwarded-For 조작을 통한 IP 스푸핑 방지
- 높음: 메모리 누수 방지를 위한 메트릭 싱글톤 패턴 구현
- 높음: 불필요한 문자열 할당 제거
- 높음: 속도 제한을 위한 모델 추출 구현
- 메트릭 폭발 DoS 공격 방지를 위한 포괄적인 카디널리티 제한 및 레이블 살균 추가
- 패닉 조건 방지를 위한 오류 처리 개선
- 설정 테스트에서 환경 변수 경쟁 조건 해결
- 메트릭 RequestTimer의 통합 테스트 실패 수정
- 메트릭 보안 모듈의 단위 테스트 실패 수정
변경됨¶
- 리팩토링: 속도 제한에서 과도한 Arc 래핑 제거
- 더 나은 유지보수성을 위한 문서 구조 재구성
- 포괄적인 메트릭 문서 추가
- 속도 제한 기능 문서 업데이트
- 개발용 mock 서버 및 샘플 설정 파일 제거
- 임시 테스트 파일 제거 및 gitignore 개선
- 중복 man 페이지 제거 및 gitignore 업데이트
- 올바른 레포지토리를 언급하도록 README.md 업데이트
- 릴리스 워크플로우 업데이트
[0.8.0] - 2025-09-09¶
추가됨¶
- 메타데이터 공유를 위한 모델 ID 별칭 지원 (#27)
- 포괄적인 속도 제한 문서
- 캐시 포이즈닝을 통한 DoS 방지를 위한 models 엔드포인트에 강력한 속도 제한
수정됨¶
- 모든 백엔드가 비정상일 때 503 대신 빈 목록 반환 (#28)
- 오류 처리 및 분류 개선
- await 지점에서 보유된 MutexGuard에 대한 clippy 경고 해결
변경됨¶
- 더 실용적인 /v1/models 엔드포인트 속도 제한 증가
- configuration.md에 별칭 기능 문서 추가
[0.7.1] - 2025-09-08¶
수정됨¶
- 홈 디렉토리 및 실행 파일 경로에 대한 설정 경로 검증 개선 (#26)
[0.7.0] - 2025-09-07¶
추가됨¶
- 풍부한 메타데이터 지원으로 /v1/models 엔드포인트 확장 (#23) (#25)
- 향상된 설정 관리 (#9) (#22)
- 향상된 오류 처리를 포함한 고급 로드 밸런싱 전략 (#21)
수정됨¶
- 하드코딩된 25초 제한 대신 config.yaml의 스트리밍 타임아웃 설정 사용
변경됨¶
- 제외 목록에 yaml 추가
[0.6.0] - 2025-09-03¶
추가됨¶
- GitHub Project 자동화 워크플로우
- 포괄적인 타임아웃 설정 및 모델 문서 업데이트
수정됨¶
- 하드코딩된 값 대신 config.yaml의 타임아웃 설정 사용 (#19)
- clippy 경고 및 벤치마크 컴파일 문제 수정
변경됨¶
- cargo fmt 적용
[0.5.0] - 2025-09-02¶
추가됨¶
- 계층화된 설계를 갖춘 확장 가능한 아키텍처 (#16)
- 포괄적인 통합 테스트 및 성능 최적화
- 완전한 서비스 레이어 구현
- 미들웨어 아키텍처 및 향상된 백엔드 추상화
- CLI 및 설정 파일 지원을 포함한 설정 가능한 연결 풀 크기
- YAML 지원을 포함한 포괄적인 설정 관리 (#7)
- continuum-router용 Debian 패키징 및 man 페이지
수정됨¶
- 테스트에서 Option
올바르게 처리 - 모델 필드 없는 스트리밍 요청을 우아하게 처리하도록 테스트 업데이트
- 테스트에서 부동 소수점 정밀도 및 타이밍 문제 해결
- 객체 풀 및 SSE 파서에서 테스트 실패 및 교착 상태 해결
- CI 테스트 실패 해결 및 테스트 성능 개선
- CI 환경에서 설정 감시자 테스트 실패 해결
- 초기 헬스 체크 경쟁 조건 해결
- 오류 처리 및 재시도 로직의 심각한 보안 취약점
- 타이밍 변동에 대한 타임아웃 테스트 허용 오차 조정
변경됨¶
- 더 나은 가독성을 위해 복잡한 타입을 타입 별칭으로 추출
- 모든 cargo fmt 및 clippy 경고 해결
- 합리적인 기본값으로 재시도 설정을 선택적으로 변경
- 설정 접근 최적화 및 포괄적인 타임아웃 관리 추가
- 타임아웃 설정의 모델 이름을 최신 버전으로 업데이트
- 완전한 문서 업데이트
- 과대 모듈을 계층화된 아키텍처로 분할
성능¶
- 설정 접근 최적화 및 포괄적인 타임아웃 관리 추가
[0.4.0] - 2025-08-25¶
추가됨¶
- 헬스 모니터링을 포함한 모델 기반 라우팅 (#6)
수정됨¶
- 더 나은 호환성을 위한 헬스 체크 통합 및 SSE 파싱 개선
변경됨¶
- README.md 업데이트
[0.3.0] - 2025-08-25¶
추가됨¶
- 실시간 채팅 완료를 위한 SSE 스트리밍 지원 (#5)
수정됨¶
- 스트리밍 응답에서 비성공 상태 코드 처리
- 백엔드가 404 또는 기타 오류 상태 코드를 반환해도 스트리밍 계속 허용
- 클라이언트에 백엔드 오류 상태를 알리기 위해 SSE 오류 이벤트를 먼저 전송
[0.2.0] - 2025-08-25¶
추가됨¶
- 여러 엔드포인트에서 모델 집계 (#4)
[0.1.0] - 2025-08-24¶
추가됨¶
- OpenAI 호환 엔드포인트 및 프록시 기능
- 사용 가능한 모델 목록을 위한
/v1/models엔드포인트 - 레거시 OpenAI completions API를 위한
/v1/completions엔드포인트 - 채팅 API를 위한
/v1/chat/completions엔드포인트 - 라운드 로빈 로드 밸런싱을 포함한 다중 백엔드 지원 (#1)
- 적절한 오류 메시지를 포함한 정의되지 않은 라우트용 폴백 핸들러
수정됨¶
- 모든 엔드포인트에서 오류 처리 일관성 개선
변경됨¶
- 변경 내역 및 버전 정보로 README 업데이트
마이그레이션 노트¶
v0.16.0으로 업그레이드¶
- 새 Files API:
/v1/files에서 OpenAI 호환 Files API 사용 가능- 파인 튜닝, 배치 처리, 어시스턴트를 위한 파일 업로드
- 파일은 영속적 메타데이터와 함께 로컬에 저장
- config.yaml의
files_api섹션을 통해 설정
- 파일 해결: 채팅 완료에서 업로드된 파일 참조
- 자동 콘텐츠 주입을 위해 채팅 메시지에서 파일 ID 사용
- 영속적 메타데이터: 파일 메타데이터가 서버 재시작 후에도 유지
- files_api 설정에서
metadata_storage: persistent(기본값) 설정 - 고아 파일 자동 정리를 위해
cleanup_orphans_on_startup: true설정
- files_api 설정에서
- 서킷 브레이커: 자동 백엔드 장애 조치를 위해 config.yaml에
circuit_breaker섹션 추가- 실패 임계값, 복구 타임아웃, half-open 요청 설정
- 새 폴백 기능: 자동 모델 폴백을 위해 config.yaml에
fallback섹션 추가- 폴백 체인 정의:
fallback_chains: { "gpt-4o": ["gpt-4-turbo", "gpt-3.5-turbo"] } fallback_policy에서 트리거 조건 설정- 크로스 프로바이더 폴백 지원 (예: OpenAI → Anthropic)
- 폴백 체인 정의:
- 서킷 브레이커 통합: 기존 서킷 브레이커와 통합하려면 trigger_conditions에서
circuit_breaker_open: true설정 - 응답 헤더: 폴백 사용 시
X-Fallback-Used헤더 확인 - GPT-5.2 지원: 새 GPT-5.2 모델 메타데이터 사용 가능
- v0.15.0에서 호환성 깨짐 없음
v0.15.0으로 업그레이드¶
- /v1/models 엔드포인트 분리:
/v1/models엔드포인트가 기본적으로 경량 응답 반환- 확장 메타데이터는
/v1/models?extended=true사용 - 기본 모델 정보만 필요한 클라이언트의 성능 향상
- 확장 메타데이터는
- Nano Banana API: OpenAI 호환 인터페이스를 통한 Gemini 이미지 생성 (Imagen) 새 지원
nano-banana또는nano-banana-pro모델 이름 사용
- 오류 처리: 패닉 대신 적절한 오류 전파로 신뢰성 향상
- 성능: LRU 캐시가 이제 더 나은 동시 성능을 위해 읽기 락 사용
- v0.14.x에서 호환성 깨짐 없음
v0.13.0으로 업그레이드¶
- 새 Responses API: OpenAI Responses API 호환성을 위해
/v1/responses엔드포인트 사용 가능- 만료된 세션에 대한 백그라운드 정리로 세션 자동 관리
- 진정한 SSE 스트리밍으로 실시간 응답 제공
- 보안: API 키가 이제 모든 백엔드에서 보안 향상을 위해 SecretString 사용 (#76)
- 모델 메타데이터: model-metadata.yaml을 통해 /v1/models 응답 필드 오버라이드 (#75)
- v0.12.0에서 호환성 깨짐 없음
v0.12.0으로 업그레이드¶
- 호환성 깨짐 없음: 이것은 코드 구성 개선을 위한 리팩토링 릴리스
- 버그 수정: 일관된 해시 라우팅이 이제 정확한 해시 일치를 올바르게 처리
- 보안: URL 검증을 위한 SSRF 방지 모듈 추가
- 신뢰성: 더 나은 오류 처리를 위해 패닉을 Option 반환으로 교체
- API 변경: /v1/models 엔드포인트에 더 이상 하드코딩된 인증 요구사항 없음
v0.11.0으로 업그레이드¶
- 새 Anthropic 백엔드: 네이티브 Anthropic Claude API 지원을 위해
type: anthropic백엔드 추가- 인증을 위해
CONTINUUM_ANTHROPIC_API_KEY환경 변수 설정 - 자동 파라미터 변환을 포함한 확장 사고 지원
- OpenAI
reasoning_effort파라미터가 Claude의 사고 형식으로 자동 변환
- 인증을 위해
- 스트리밍 개선: Accept-Encoding 수정으로 모든 백엔드에서 적절한 스트리밍 보장
- v0.10.0에서 호환성 깨짐 없음
v0.10.0으로 업그레이드¶
- 새 OpenAI 백엔드: 네이티브 OpenAI API 지원을 위해
type: openai백엔드 추가- 인증을 위해
CONTINUUM_OPENAI_API_KEY환경 변수 설정 - 내장 모델 메타데이터가 /v1/models 응답에 자동 포함
- 인증을 위해
- 이미지 생성 API: DALL-E 모델을 위한 새
/v1/images/generations엔드포인트timeouts.request.image_generation을 통해 타임아웃 설정 (기본값: 120초)- responseformat 검증 지원 (url 또는 b64json)
- Gemini 개선: 사고 모델의 스트리밍 응답 잘림 수정
- 모델 ID 정규화로 적절한 라우팅 보장
- API 키 인증: 스트리밍 요청이 이제 API 키 인증 지원
- 보안: 요청 본문 크기 제한으로 DoS 공격 방지
- 최신 OpenAI 모델은
max_tokens대신 자동으로max_completion_tokens사용
v0.9.0으로 업그레이드¶
- 새 Gemini 백엔드: 네이티브 Google Gemini API 지원을 위해
type: gemini백엔드 추가- 인증을 위해
CONTINUUM_GEMINI_API_KEY환경 변수 설정 - 사고 모델 (gemini-2.5-pro, gemini-3-pro)은 클라이언트가 4096 미만의 값을 보내면 자동으로
max_tokens: 16384적용
- 인증을 위해
- 토큰 버킷 알고리즘을 사용한 향상된 속도 제한 사용 가능
- config.yaml의
rate_limiting섹션을 통해 속도 제한 설정 - 인증을 포함한 Prometheus 메트릭이
/metrics엔드포인트에서 사용 가능 - 설정 파일 마이그레이션 및 수정을 위해
--migrate-config-fileCLI 옵션 사용 - 속도 제한에 여러 심각한 보안 수정 적용
v0.8.0으로 업그레이드¶
/v1/models엔드포인트에 대해 속도 제한 활성화- 모든 백엔드가 비정상일 때 503 오류 대신 빈 목록 반환
- 메타데이터 공유를 위한 모델 별칭 지원
v0.7.0으로 업그레이드¶
- 향상된 설정 관리를 위해 설정 파일 업데이트 필요
- 새로운 로드 밸런싱 전략 사용 가능
- 스트리밍 타임아웃이 이제 config.yaml을 통해 설정 가능
v0.6.0으로 업그레이드¶
- 타임아웃 설정이 이제 하드코딩된 값 대신 config.yaml에서 읽음
- 타임아웃 설정을 포함하도록 설정 파일 업데이트
v0.5.0으로 업그레이드¶
- 계층화된 설계를 포함한 대규모 아키텍처 리팩토링
- 설정 관리가 이제 YAML 파일 지원
- 보안 개선을 포함한 재시도 메커니즘 향상
- 연결 풀 크기가 이제 설정 가능
이 변경 내역은 Continuum Router의 초기 릴리스부터 현재 버전까지의 실제 개발 이력을 반영합니다.