GoModel – Go로 작성된 오픈소스 AI Gateway
Show HN: GoModel – an open-source AI gateway in Go
TL;DR Highlight
OpenAI, Anthropic, Gemini 등 여러 AI 프로바이더를 하나의 OpenAI 호환 API로 묶어주는 Go 기반 오픈소스 AI 게이트웨이로, LiteLLM의 컴파일 언어 대안이다.
Who Should Read
여러 LLM 프로바이더를 동시에 사용 중인 백엔드 개발자, 또는 LiteLLM을 쓰고 있지만 성능·공급망 보안·Go 생태계 통합에 관심 있는 개발자.
Core Mechanics
- GoModel은 Go로 작성된 AI 게이트웨이로, OpenAI, Anthropic, Gemini, xAI, Groq, OpenRouter, Z.ai, Azure OpenAI, Oracle, Ollama 등 다양한 프로바이더를 단일 OpenAI 호환 API로 통합한다.
- Docker 한 줄 명령으로 바로 띄울 수 있고, 환경변수로 원하는 프로바이더 API 키만 넘기면 된다. 최소한 하나의 프로바이더 키만 있으면 동작한다.
- LiteLLM의 대안으로 포지셔닝하며, observability(모니터링), guardrails(안전 필터), streaming(스트리밍 응답)을 내장 지원한다.
- Go 컴파일 언어 특성상 Python 기반 LiteLLM 대비 런타임 공급망 공격(supply chain attack)에 더 안전하다는 점이 강점으로 언급된다. 컴파일 타임에 의존성이 고정되기 때문이다.
- Prometheus 메트릭 연동을 지원하며, 별도 설정 파일(prometheus.yml)과 docker-compose.yaml이 포함되어 있어 모니터링 환경 구성이 쉽다.
- semantic caching(의미 기반 캐싱) 레이어가 있는 것으로 보이며, 게이트웨이 측에서 요청을 임베딩하고 벡터 유사도 검색으로 캐시 히트 여부를 판단하는 방식으로 추정된다.
- Helm 차트가 포함되어 있어 Kubernetes 환경 배포도 지원한다.
- 현재 GitHub 기준 Star 319개, Fork 20개이며 활발히 커밋 중인 초기 프로젝트다.
Evidence
- Go로 작성된 것이 왜 중요하냐는 질문에 대해, 다른 댓글에서 Go 컴파일 바이너리는 런타임 공급망 공격 표면이 Python 기반 도구보다 훨씬 작다는 반론이 제기됐다. 실제로 비슷한 Go 게이트웨이(sbproxy.dev)를 만든 개발자가 이를 직접 언급했다.
- AI 프록시를 직접 만들고 유지보수해본 경험자는 '모델·프로바이더 릴리즈 때마다 입출력 구조가 달라지는 것이 가장 힘든 점'이라며, 새 모델 출시 후 24시간 내 통합이 안 되면 제대로 관리되는 프로젝트가 아니라고 평가했다.
- Go SDK가 JavaScript·Python에 비해 부족해서 프로바이더 업데이트 때마다 직접 따라가야 한다는 유지보수 부담을 우려하는 의견이 있었고, 작성자도 이를 주요 도전과제로 인식하고 있는 것으로 보인다.
- vllm(성능 높은 로컬 모델 서빙 도구)을 쓰는 사용자가 Ollama 대신 vllm 연동 방법을 물었고, 비용 추적(cost tracking per model/route) 기능에 대한 요청도 있었다. 특히 무료·유료 모델을 혼합해 쓸 때 어디서 비용이 발생하는지 파악하는 게 중요하다는 실사용 경험이 공유됐다.
- 'LiteLLM처럼 오픈소스 rug pull(처음엔 오픈소스로 공개했다가 나중에 상용화하는 것)을 할 계획이냐'는 날카로운 질문도 있었다. 또한 진정한 unified API라면 temperature, reasoning effort, tool choice mode 같은 프로바이더별 파라미터 차이도 추상화해줘야 한다는 의견도 제기됐다.
How to Apply
- 여러 LLM 프로바이더를 쓰는 서비스에서 모델 교체 때마다 클라이언트 코드를 수정하고 싶지 않다면, GoModel을 중간 게이트웨이로 올리고 모든 요청을 `http://localhost:8080`의 OpenAI 호환 엔드포인트로 보내면 된다. 프로바이더 전환은 환경변수만 바꾸면 된다.
- LiteLLM을 운영 중인데 Python 런타임의 공급망 보안이 걱정되거나 메모리·성능 오버헤드가 문제라면, GoModel로 교체를 검토할 수 있다. 컴파일 바이너리라 런타임 의존성이 없고, Docker 이미지도 가볍다.
- Kubernetes 환경에서 AI 트래픽을 중앙 관리하고 싶다면, 포함된 Helm 차트를 활용해 GoModel을 클러스터에 배포하고 Prometheus와 연동해 모델별 응답 시간·에러율을 모니터링할 수 있다.
- 팀 내에서 여러 명이 각기 다른 AI 프로바이더 키를 직접 관리하는 상황이라면, GoModel을 내부 게이트웨이로 두고 팀원들은 GoModel 엔드포인트만 바라보게 하면 키 관리 포인트를 단일화할 수 있다.
Code Example
snippet
# 최소 실행 (OpenAI만 사용)
docker run --rm -p 8080:8080 \
-e OPENAI_API_KEY="your-openai-key" \
enterpilot/gomodel
# 여러 프로바이더 동시 사용
docker run --rm -p 8080:8080 \
-e OPENAI_API_KEY="your-openai-key" \
-e ANTHROPIC_API_KEY="your-anthropic-key" \
-e GEMINI_API_KEY="your-gemini-key" \
-e GROQ_API_KEY="your-groq-key" \
-e OPENROUTER_API_KEY="your-openrouter-key" \
-e XAI_API_KEY="your-xai-key" \
-e AZURE_API_KEY="your-azure-key" \
-e AZURE_BASE_URL="https://your-resource.openai.azure.com/openai/deployments/your-deployment" \
-e AZURE_API_VERSION="2024-10-21" \
enterpilot/gomodel
# 이후 클라이언트에서는 base_url만 변경
# openai.OpenAI(base_url="http://localhost:8080", api_key="any-value")Terminology
AI Gateway여러 AI 프로바이더(OpenAI, Anthropic 등)로 가는 요청을 중간에서 받아 라우팅·로깅·캐싱해주는 프록시 서버. 클라이언트는 게이트웨이 하나만 바라보면 된다.
OpenAI-compatible APIOpenAI의 REST API 명세와 동일한 형식으로 요청/응답을 처리하는 API. 기존 OpenAI SDK를 그대로 써서 다른 모델에도 연결할 수 있다.
guardrailsLLM 입출력에서 유해하거나 정책 위반 내용을 자동으로 감지·차단하는 안전 장치. 예: 욕설 필터, PII 마스킹.
supply chain attack사용하는 라이브러리나 패키지에 악성 코드를 심어 공격하는 방식. Python처럼 런타임에 패키지를 로드하는 언어는 취약하고, Go 컴파일 바이너리는 배포 후 의존성이 고정돼 상대적으로 안전하다.
semantic caching똑같은 텍스트가 아니더라도 의미가 비슷한 요청은 기존 캐시를 재사용하는 기법. 예: '오늘 날씨 어때?'와 '지금 날씨가 어떻습니까?'를 같은 질문으로 처리.
observability시스템이 내부적으로 어떻게 동작하는지 외부에서 측정·추적할 수 있는 능력. 로그, 메트릭, 트레이스가 핵심 요소다.