메인 콘텐츠로 건너뛰기

직접 구축한 스택의 실제 모습

실제 운영 환경에서 사용 가능한 로컬 LLM API는 7개의 레이어로 구성됩니다. 각 레이어의 역할과 일반적으로 사용되는 도구들을 소개합니다. 각 레이어마다 별도의 도구가 존재하며 이를 설치하고 설정하며 업데이트하고 디버깅해야 합니다. 이들 간의 상호작용 방식은 직관적이지 않은데, 예컨대 nginx 버퍼링이 SSE 스트리밍에 영향을 주고 터널 타임아웃이 프록시 타임아웃과 상호작용하며 인증 미들웨어는 API 프로토콜을 정확히 이해해야 합니다

설정 방식 비교

직접 구축이 유리한 경우

  • 완전한 제어권. 모든 레이어를 직접 관리할 수 있습니다. 어떤 부분이든 검사, 수정, 디버깅이 가능하죠. 클라이언트와 모델 사이에 불투명한 매니지드 서비스가 존재하지 않습니다.
  • No third-party data path. All traffic stays on infrastructure you control. For regulated environments (healthcare, finance, government), this may be a hard requirement — not a preference.
  • 벤더 종속성 없음. Tokios가 서비스를 중단하거나 요금제를 변경하면 곤란해질 수 있습니다. 직접 구축한 스택은 언제까지나 자유롭게 유지관리할 수 있습니다.
  • 무제한 커스터마이징. 요청 속도 제한 설정, 맞춤형 로그 처리 파이프라인, 모델별 라우팅 규칙, A/B 테스트 등 프록시 설정을 직접 제어할 수 있으므로 무엇이든 가능합니다.
  • Potentially lower cost at scale. For 100+ users, the per-seat cost of a managed service can exceed the cost of self-hosted infrastructure. At scale, DIY economics improve.

Tokios가 유리한 경우

  • 시간 대비 효율성. Tokios 설정 과정 — 커넥터 설치, 모델 등록, API 키 생성 — 은 2분에서 5분 정도밖에 걸리지 않습니다. 반면 직접 구축 시 처음 설정하는 데는 4시간에서 8시간이 소요되며, 관련 도구에 익숙한 사람이라도 마찬가지입니다.
  • 유지관리 부담 없음. 인증서 갱신, 터널 재연결, 게이트웨이 업데이트 등이 사용자 개입 없이 자동으로 이루어집니다. 직접 구축 스택은 인증서 만료 관리, 터널 장애 대응, nginx 보안 패치 적용 등 지속적인 관리가 필요합니다.
  • 기본 제공 스트리밍 기능. SSE 스트리밍이 별다른 설정 없이 정상 작동합니다. 직접 구축 시에는 nginx에서 proxy_buffering 기능을 명시적으로 비활성화하고 proxy_read_timeout 설정을 구성한 뒤 터널이 응답을 버퍼링하지 않는지 확인해야 합니다.
  • 기본 제공 인증 기능. 배포 범위에 맞춘 사용자별 API 키 관리가 가능합니다. 직접 구축 시에는 인증 미들웨어를 직접 작성하거나 배포하고, API 키를 안전하게 저장하며 해지 로직까지 구현해야 합니다.
  • CGNAT 처리 방식. Tokios의 아웃바운드 전용 연결 기능은 어떤 NAT 환경에서도 정상 작동합니다. 직접 구축한 터널 설정의 경우 사용하는 도구에 따라 CGNAT 처리가 가능할 수도, 불가능할 수도 있습니다. Cloudflare Tunnel은 가능하지만 nginx와 Let’s Encrypt만으로는 불가능합니다.
  • 관리해야 할 보안 요소이 없음. 노출된 포트도 없고, 인증서 관리 작업도 없으며, 인증 미들웨어 관련 취약점도 존재하지 않습니다. 커넥터가 외부로 연결을 시도하면 게이트웨이가 나머지 모든 작업을 처리합니다.

스트림 처리 시 발생하는 문제점들

LLM 워크로드 환경에서 직접 구축한 시스템이 가장 자주 실패하는 지점이 바로 이 부분입니다. 3 개의 서로 다른 레이어들이 스트림 응답을 버퍼링하거나 타임아웃시키는 현상이 발생할 수 있습니다.
  1. nginx 버퍼링 현상. 기본적으로 nginx는 업스트림 응답을 버퍼링합니다. LLM 엔드포인트용 로케이션 블록 내에 proxy_buffering off; 및 proxy_cache off; 설정이 반드시 필요합니다. 이를 누락하면 토큰들이 마지막에 한꺼번에 전송되는 현상이 발생합니다.
  2. 프록시 타임아웃 설정. nginx의 기본 proxy_read_timeout 값은 60초입니다. 일반 사용자용 하드웨어에서 긴 생성 작업이 진행될 경우 이 시간을 초과할 수 있습니다. 따라서 이 값을 300초 이상으로 설정해야 합니다. 만약 Cloudflare Tunnel과 같은 터널이 앞단에 위치한다면 약 100–120초 수준의 타임아웃이 새로운 한계값이 됩니다.
  3. SSE configuration. The Content-Type: text/event-stream header must propagate from your backend through every proxy layer to the client. If any layer strips or overrides it, downstream buffering may kick in.
위 문제들은 각각 해결 가능하지만, 3 개의 별도 설정이 2–3 개의 도구들에 걸쳐 적용되어야 합니다. 또한 실패 시에도 별다른 오류 메시지가 나타나지 않아 스트림이 정상 작동하는 것처럼 보이다가 실제로는 모든 토큰이 한꺼번에 전송되거나 524 또는 504 오류와 함께 생성 과정이 중단되는 현상이 발생합니다. Tokios의 게이트웨이는 이러한 특정 트래픽 패턴에 맞춰 설계되었기 때문에 3 관련 설정들을 기본적으로 모두 올바르게 처리합니다.

직접 구축하는 방식이 적합한 경우

  • Regulated environments. Healthcare, finance, or government work where no third-party data path is permitted. All traffic must stay on infrastructure you control and can audit.
  • 기존 DevOps 역량 보유. 이미 Kubernetes를 운영 중이며 모니터링 체계도 갖추어져 있고, 새로운 서비스 하나를 추가하는 것이 별도의 기술 습득 없이도 가능한 환경을 의미합니다.
  • 완전한 제어 권한이 필요합니다. 맞춤형 라우팅 로직을 구현하거나, Tokios에 내장된 요청 로깅 기능 외에 별도의 로깅 파이프라인을 구성하거나, 관리형 서비스로는 구현이 불가능한 내부 시스템과의 연동도 가능합니다.
  • 100명 이상의 사용자 환경에서 비용 절감이 중요할 때. 사용자 수가 많을 경우 자체 호스팅 인프라를 이용하면 관리형 서비스의 사용자당 요금 체계보다 훨씬 저렴하게 운영할 수 있습니다.

Tokios가 적합한 경우

  • 인프라 구축 없이 원하는 결과만 얻고 싶을 때. 목표는 “API 키만으로 모델에 접근할 수 있게 하는 것”이지 “nginx 설정법을 배우는 것”이 아니기 때문입니다.
  • Small teams. 2–10 people who need model access. It’s free on the community plan, and nobody’s time goes to infrastructure maintenance.
  • CGNAT 뒤에 위치한 환경. ISP에서 외부 연결을 차단하는 경우입니다. 직접 터널을 구축하는 방법도 있지만 Tokios는 별도 설정 없이도 이 환경을 기본적으로 지원합니다.
  • 신속한 설정이 필요할 때. 오후 내내 프록시 계층을 설정하는 대신 단 5분 만에 API 호출을 시작할 수 있습니다.

Tokios와 LiteLLM 비교

오픈소스 프록시/게이트웨이가 관리형 서비스보다 적합한 상황에 대해 설명합니다.

Tokios를 사용해야 하는 경우

Tokios가 적합한 경우와 그렇지 않은 경우에 대한 솔직한 가이드입니다.