Base URL 한 줄로 사내 LLM부터 유료 CLI까지 통합하고, 병렬 코드리뷰까지 구현한 LLM Gateway 구축기
로컬 PC에서 잠자고 있던 Codex와 Claude CLI 구독 자원을 고성능 API 서버로 탈바꿈시킨 엔지니어링 과정을 소개합니다. 서로 다른 프로바이더를 단일 어댑터로 규격화하고 백엔드 제어 기술을 통해 안정적인 시스템으로 고도화했습니다. LLM 자원의 낭비를 줄이고 업무 자동화 효율을 극대화할 수 있는 실무 힌트를 가득 담았습니다.
사내 AI 인프라가 분산되어 있어 통합이 필요하거나, 사내 LLM 자원의 비용 대 효율을 높이고 싶은 플랫폼/백엔드 엔지니어에게 이 아키텍처를 강력히 추천합니다.
사내에서 사용 가능한 다양한 LLM 자원(사내 LLM, Codex CLI, Claude CLI 등)이 웹이나 CLI 등 서로 다른 인터페이스에 갇혀 있어 시스템 통합 및 자동화가 어려웠습니다. 개별 연동을 할 때마다 인증, 스트리밍, 에러 핸들링을 반복 구현해야 했고, 유료 자원의 활용 효율도 낮았습니다.
CLI 기반의 Codex와 Claude를 어댑터 패턴으로 래핑하여 하나의 OpenAI 호환 API 규격으로 단일화하는 로컬 중계 서버 'LLM Gateway'를 구축했습니다. 중앙 조율자를 통한 동시성 제한(Admission Control), 모든 비동기 단계에 중단 신호를 관통시키는 구조, 그리고 모델별 특성을 반환하는 '/v1/model-traits' 엔드포인트를 도입했습니다.
개발자들은 base URL 변경만으로 16종의 LLM을 즉각 활용할 수 있게 되었으며, 새로운 LLM 연동 시간을 3분 내외로 단축했습니다. 또한, 유휴 LLM 자원을 병렬로 엮어 교차 검증을 수행하는 멀티 LLM 코드리뷰 시스템을 구축하여 검출력을 높였습니다.
Trade-off
CLI를 서버로 매핑함에 따라 프로세스 기동 비용을 제어하기 위한 세션 풀링 및 스레드 관리가 추가로 요구되는 오버헤드가 발생했습니다. 또한, 추론형 모델의 생각(Thinking) 단계에서 토큰 예산이 조기 소진되는 문제를 해결하기 위해 런타임 학습 및 강제 재시도 로직을 게이트웨이에 수동으로 더해야 했습니다.
인터페이스가 서로 호환되지 않는 클래스들을 중간에서 변환하여 일관된 방식으로 동작하도록 만드는 구조적 디자인 패턴입니다.
시스템 부하를 관리하기 위해 진입하는 요청의 개수를 한계 용량에 맞춰 제한하고 대기시키는 관리 기법입니다.
비동기 체인에서 클라이언트가 연결을 중단했을 때, 이에 대응하여 하위 연동 작업들도 즉각 취소되도록 신호를 전달하는 흐름입니다.


