DEV Community

Cover image for 로컬 LLM API로 활용하는 방법
Rihpig
Rihpig

Posted on • Originally published at apidog.com

로컬 LLM API로 활용하는 방법

노트북에서도 프로덕션에 배포하는 OpenAI 형태의 엔드포인트 뒤에 70B 매개변수 모델을 제공할 수 있습니다. 핵심은 base_url 하나를 바꾸는 것입니다. 이 변경만으로 오프라인 개발, 토큰당 비용 0원, 규제 데이터에 대한 비공개 추론 경로를 만들 수 있습니다. 아래에서는 런타임을 선택하고, OpenAI 호환 엔드포인트를 노출하고, 기존 클라이언트를 연결한 뒤, Apidog로 전체 흐름을 테스트하는 방법을 구현 중심으로 정리합니다.

오늘 Apidog를 사용해 보세요

TL;DR

로컬 LLM API는 다음 흐름으로 구성하면 됩니다.

  1. Ollama, vLLM 또는 llama.cpp 중 하나를 선택합니다.
  2. OpenAI 호환 REST 엔드포인트를 실행합니다.
  3. 기존 OpenAI SDK의 base_url만 로컬 주소로 바꿉니다.
  4. Apidog에서 LocalProduction 환경을 분리합니다.
  5. 동일한 시나리오 테스트를 두 환경에 모두 실행합니다.

예를 들어 Ollama를 사용하면 기존 OpenAI 클라이언트에서 다음 값만 바꾸면 됩니다.

base_url = "http://localhost:11434/v1"
api_key = "ollama"
Enter fullscreen mode Exit fullscreen mode

그러면 Llama 3.3, DeepSeek V4, Qwen 3.6 같은 로컬 모델을 기존 코드 흐름에서 재사용할 수 있습니다.

소개

로컬 LLM API 스택은 더 이상 연구용 장난감이 아닙니다. Ollama, vLLM, llama.cpp 같은 런타임은 OpenAI /v1/chat/completions 형식을 지원합니다. 즉, 로컬과 호스팅 모델을 위해 별도의 클라이언트 코드를 유지할 필요가 없습니다.

기존 코드는 보통 다음처럼 동작합니다.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.openai.com/v1",
    api_key="YOUR_API_KEY",
)
Enter fullscreen mode Exit fullscreen mode

로컬 모델로 전환하려면 다음처럼 바꾸면 됩니다.

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",
)
Enter fullscreen mode Exit fullscreen mode

API 개발자에게 이 점이 중요한 이유는 명확합니다. 기존 SDK, 테스트 도구, CI 흐름을 그대로 사용할 수 있기 때문입니다. Apidog의 요청 템플릿이 https://api.openai.com/v1/chat/completions를 가리키고 있다면, 기본 URL 변수만 바꿔 로컬 GPU에서 실행되는 모델을 테스트할 수 있습니다.

이미 기능별 API 지출을 추적하고 있다면, 로컬 모델과 호스팅 모델을 A/B 테스트해 비용과 지연 시간의 차이를 확인할 수 있습니다.

이 글에서는 다음을 다룹니다.

  • 로컬 LLM 런타임 선택 기준
  • OpenAI 호환 서버 실행 방법
  • Python 및 JavaScript 클라이언트 연결
  • Apidog를 사용한 로컬/프로덕션 시나리오 테스트
  • 양자화와 GPU 오프로드 팁
  • 로컬 vs 호스팅 비용 및 지연 시간 비교

더 넓은 모델 선택지는 2026년 최고의 로컬 LLM을 참고하십시오.

API 개발자에게 로컬 LLM이 유용한 이유

LLM을 호출하는 API 코드는 다양한 환경에서 디버깅해야 합니다.

  • 비행기나 오프라인 환경
  • Wi-Fi가 불안정한 컨퍼런스
  • *.openai.com 외부 통신을 차단하는 고객 네트워크
  • 규제 데이터가 포함된 내부 개발 환경

로컬 LLM API는 네트워크 의존성을 제거하면서도 프로덕션과 비슷한 API 표면을 제공합니다.

1. 프라이버시

HIPAA, GDPR, EU AI 법과 관련된 데이터는 프롬프트에 포함되는 순간 사용자 데이터로 취급될 수 있습니다. 환자 기록, 계약서, 계좌 번호, 생체 식별자 같은 데이터를 호스팅 엔드포인트로 보내면 데이터 처리자 관계를 문서화하고 감사해야 합니다.

반면 로컬 모델은 데이터가 장비 밖으로 나가지 않습니다. 온디바이스 추론은 국경 간 데이터 전송 의무를 줄이는 방식으로 활용될 수 있습니다.

2. 비용

예를 들어 GPT-5.5 Instant를 통해 하루 5천만 프롬프트 토큰을 처리하고, 백만 토큰당 5달러를 지불한다면 하루 비용은 약 250달러입니다.

반면 4,500달러짜리 M3 Max Studio에서 같은 볼륨을 계속 처리한다면, 전기 비용을 제외하고 약 18일의 완전 활용 후 장비 비용이 상각됩니다.

비용 계산 방식은 GPT-5.5 Instant 사용 방법의 산술을 자신의 워크로드에 적용해 볼 수 있습니다.

3. 결정론

호스팅 모델은 제공자가 스냅샷을 교체하거나 중단할 수 있습니다. 반면 로컬 모델은 디스크에 있는 파일입니다. 같은 모델 파일, 같은 프롬프트, 같은 설정을 사용하면 장기간 회귀 테스트에 더 안정적으로 사용할 수 있습니다.

OpenAI 호환 엔드포인트가 중요한 이유도 여기에 있습니다. 모델은 로컬에 있지만 SDK 계약은 그대로 유지됩니다.

OpenAI 호환 엔드포인트를 제공하는 런타임

주요 선택지는 Ollama, vLLM, llama.cpp입니다. 선택 기준은 인기도가 아니라 워크로드입니다.

런타임 적합한 사용 사례 기본 포트 특징
Ollama 개인 개발, 데모, CI 러너 11434 설치와 모델 실행이 가장 쉬움
vLLM 공유 개발 서버, 고처리량 추론 8000 PagedAttention, 연속 배칭
llama.cpp 제한된 메모리, 다양한 하드웨어 사용자 지정 GGUF, 세밀한 양자화 제어

Ollama로 로컬 LLM API 실행하기

Ollama는 가장 쉬운 시작점입니다. 단일 바이너리, 단일 CLI, 기본 HTTP 서버를 제공합니다.

macOS에서는 다음처럼 실행합니다.

brew install ollama

ollama serve &

ollama pull llama3.3:70b-instruct-q4_K_M

ollama run llama3.3:70b-instruct-q4_K_M
Enter fullscreen mode Exit fullscreen mode

OpenAI 호환 엔드포인트는 다음 주소입니다.

http://localhost:11434/v1
Enter fullscreen mode Exit fullscreen mode

간단히 확인하려면 Python SDK를 사용합니다.

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",
)

resp = client.chat.completions.create(
    model="llama3.3:70b-instruct-q4_K_M",
    messages=[
        {"role": "user", "content": "Reply with the word OK only."}
    ],
)

print(resp.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

OK가 출력되면 런타임, 포트, SDK 계약이 맞게 연결된 것입니다.

Ollama는 다음 상황에 적합합니다.

  • 개인 노트북 개발
  • 오프라인 데모
  • 로컬 CI 스모크 테스트
  • 단일 모델 기반 프로토타이핑

vLLM으로 고처리량 서버 실행하기

vLLM은 프로덕션 등급에 가까운 런타임입니다. PagedAttention과 연속 배칭을 사용해 동시 요청 처리량을 높입니다.

설치 및 실행:

pip install vllm

vllm serve meta-llama/Llama-3.3-70B-Instruct \
  --port 8000 \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192
Enter fullscreen mode Exit fullscreen mode

엔드포인트는 다음과 같습니다.

http://localhost:8000/v1
Enter fullscreen mode Exit fullscreen mode

Python 클라이언트는 동일합니다.

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="local-key",
)

response = client.chat.completions.create(
    model="meta-llama/Llama-3.3-70B-Instruct",
    messages=[
        {"role": "user", "content": "Summarize vLLM in one sentence."}
    ],
)

print(response.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

vLLM은 CUDA GPU 또는 최신 AMD ROCm 카드가 필요한 경우가 많습니다. Apple Silicon 노트북보다는 공유 개발 클러스터나 내부 추론 서버에 더 적합합니다.

llama.cpp로 세밀하게 제어하기

llama.cpp는 GGUF 생태계의 핵심 런타임입니다. Raspberry Pi 5부터 고사양 GPU 서버까지 다양한 환경에서 실행할 수 있습니다.

빌드 및 서버 실행:

git clone https://github.com/ggerganov/llama.cpp

cd llama.cpp

make -j LLAMA_METAL=1

./llama-server -m models/llama-3.3-70b-q4_k_m.gguf \
  --port 8080 \
  --host 0.0.0.0 \
  -c 8192 \
  -ngl 99
Enter fullscreen mode Exit fullscreen mode

OpenAI 호환 엔드포인트:

http://localhost:8080/v1
Enter fullscreen mode Exit fullscreen mode

-ngl 99는 가능한 많은 레이어를 GPU로 오프로드합니다. llama.cpp는 다음이 필요할 때 적합합니다.

  • 16GB 또는 24GB VRAM에 모델을 맞춰야 할 때
  • GGUF 양자화 옵션을 직접 선택해야 할 때
  • CPU, Metal, CUDA 등 다양한 백엔드를 테스트해야 할 때
  • 메모리 매핑, 컨텍스트 길이, 배칭을 직접 제어해야 할 때

LM Studio와 Jan은 llama.cpp를 GUI로 감싼 도구입니다. 터미널을 사용하지 않는 팀원이 프롬프트를 테스트해야 할 때 유용합니다.

Apidog로 로컬 LLM 테스트하기

로컬 LLM API의 장점은 프로덕션 API와 같은 방식으로 테스트할 수 있을 때 극대화됩니다. Apidog에서는 환경 변수를 사용해 하나의 요청 템플릿으로 로컬과 프로덕션을 모두 테스트할 수 있습니다.

1단계: Local 환경 만들기

Apidog 프로젝트에서 새 환경을 만들고 이름을 Local로 지정합니다.

환경 변수:

BASE_URL=http://localhost:11434/v1
API_KEY=ollama
MODEL=llama3.3:70b-instruct-q4_K_M
Enter fullscreen mode Exit fullscreen mode

2단계: Production 환경 만들기

기존 OpenAI 환경을 복제하고 Production으로 이름을 바꿉니다.

BASE_URL=https://api.openai.com/v1
API_KEY=<your-hosted-api-key>
MODEL=<hosted-model-name>
Enter fullscreen mode Exit fullscreen mode

3단계: 요청 URL을 변수화하기

하드코딩된 URL을 다음처럼 바꿉니다.

{{BASE_URL}}/chat/completions
Enter fullscreen mode Exit fullscreen mode

인증 헤더:

Authorization: Bearer {{API_KEY}}
Content-Type: application/json
Enter fullscreen mode Exit fullscreen mode

요청 본문 예시:

{
  "model": "{{MODEL}}",
  "messages": [
    {
      "role": "system",
      "content": "You are a JSON-only assistant."
    },
    {
      "role": "user",
      "content": "Return {\"status\":\"ok\"}."
    }
  ],
  "response_format": {
    "type": "json_object"
  }
}
Enter fullscreen mode Exit fullscreen mode

4단계: 시나리오 테스트 추가하기

다음 조건을 단언합니다.

choices[0].message.role == "assistant"
choices[0].message.content is not empty
usage.total_tokens > 0
Enter fullscreen mode Exit fullscreen mode

이 시나리오는 다음을 검증합니다.

  • 로컬 서버가 정상 실행 중인지
  • OpenAI 호환 응답 스키마가 유지되는지
  • 모델이 실제로 응답을 생성하는지
  • 토큰 사용량 필드가 반환되는지

5단계: Local과 Production에 모두 실행하기

  1. 환경을 Local로 선택합니다.
  2. 시나리오를 실행합니다.
  3. 환경을 Production으로 바꿉니다.
  4. 같은 시나리오를 다시 실행합니다.

두 환경 모두 통과해야 합니다.

이 방식은 런타임 업그레이드에도 유용합니다. 예를 들어 새 모델 태그를 받은 뒤:

ollama pull llama3.3:70b-instruct-q4_K_M
Enter fullscreen mode Exit fullscreen mode

다시 Apidog 시나리오를 실행하면 응답 구조 변경을 애플리케이션 반영 전에 확인할 수 있습니다.

같은 패턴은 다단계 API를 호출하는 AI 에이전트 테스트에도 적용할 수 있습니다.

Python에서 로컬/프로덕션 전환하기

애플리케이션 코드에서는 base_urlapi_key를 환경 변수로 분리합니다.

import os
from openai import OpenAI

def get_client():
    if os.getenv("ENV") == "local":
        return OpenAI(
            base_url=os.getenv("LOCAL_LLM_BASE_URL", "http://localhost:11434/v1"),
            api_key=os.getenv("LOCAL_LLM_API_KEY", "ollama"),
        )

    return OpenAI(
        base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1"),
        api_key=os.environ["OPENAI_API_KEY"],
    )

client = get_client()

response = client.chat.completions.create(
    model=os.getenv("MODEL", "llama3.3:70b-instruct-q4_K_M"),
    messages=[
        {"role": "system", "content": "You are a JSON-only assistant."},
        {"role": "user", "content": "Return {\"status\": \"ok\"}."},
    ],
    response_format={"type": "json_object"},
)

print(response.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

실행 예시:

ENV=local \
MODEL=llama3.3:70b-instruct-q4_K_M \
python app.py
Enter fullscreen mode Exit fullscreen mode

프로덕션:

ENV=production \
OPENAI_API_KEY=sk-... \
MODEL=<hosted-model-name> \
python app.py
Enter fullscreen mode Exit fullscreen mode

JavaScript에서 로컬/프로덕션 전환하기

Node.js에서도 동일한 방식으로 처리합니다.

import OpenAI from "openai";

const isLocal = process.env.ENV === "local";

const client = new OpenAI({
  baseURL: isLocal
    ? process.env.LOCAL_LLM_BASE_URL || "http://localhost:11434/v1"
    : process.env.OPENAI_BASE_URL || "https://api.openai.com/v1",
  apiKey: isLocal
    ? process.env.LOCAL_LLM_API_KEY || "ollama"
    : process.env.OPENAI_API_KEY,
});

const resp = await client.chat.completions.create({
  model: process.env.MODEL || "llama3.3:70b-instruct-q4_K_M",
  messages: [
    {
      role: "user",
      content: "Say hi.",
    },
  ],
});

console.log(resp.choices[0].message.content);
Enter fullscreen mode Exit fullscreen mode

실행:

ENV=local node app.js
Enter fullscreen mode Exit fullscreen mode

CI에 Apidog 시나리오 연결하기

Apidog 프로젝트를 apidog-cli 컬렉션으로 내보낸 뒤 GitHub Actions에서 실행할 수 있습니다.

예시 흐름:

name: API contract tests

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  api-tests:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Run Apidog scenarios
        run: |
          apidog run ./apidog-collection.json \
            --env Local
Enter fullscreen mode Exit fullscreen mode

시나리오 단언이 실패하면 러너는 0이 아닌 종료 코드를 반환합니다. 따라서 로컬 또는 호스팅 계약이 깨지는 순간 빌드를 실패시킬 수 있습니다.

QA 엔지니어는 같은 방식을 기존 API 테스트 파이프라인에 연결할 수 있습니다.

양자화 선택 기준

70B 모델을 노트북에서 실행하려면 양자화가 핵심입니다. GGUF 형식은 가중치를 8, 6, 5, 4, 3, 2비트 등으로 저장할 수 있습니다.

실무 기준은 다음과 같습니다.

양자화 사용 시점 특징
Q8 코드 생성, 품질 우선 FP16에 가까운 품질, 메모리 사용량 큼
Q5_K_M 품질과 메모리 균형 RAM 여유가 있을 때 안정적
Q4_K_M 기본 추천 70B 모델을 현실적인 크기로 축소
Q2_K 극단적 메모리 절약 긴 컨텍스트나 추론 작업에서 품질 저하 가능

Q4_K_M은 기본값으로 적합합니다. FP16 대비 벤치마크 손실은 작지만 70B 모델을 약 140GB에서 약 40GB 수준으로 줄일 수 있습니다.

실무 추천:

  • 일반 채팅: Q4_K_M
  • 코드 생성: Q8
  • 품질 여유와 메모리 절충: Q5_K_M
  • 매우 제한된 장비: Q2_K, 단 품질 확인 필수

GPU 오프로드 설정

llama.cpp에서는 -ngl 플래그를 사용합니다.

./llama-server \
  -m models/model.gguf \
  -ngl 99
Enter fullscreen mode Exit fullscreen mode

Ollama에서는 num_gpu 옵션을 사용할 수 있습니다.

가능하면 VRAM이 허용하는 범위에서 GPU 오프로드를 높게 설정합니다. CPU로 떨어지는 레이어가 많을수록 처리량이 줄어듭니다.

예시 기준:

  • 24GB VRAM: 70B Q4 모델의 일부 레이어만 GPU에 적재 가능
  • 48GB VRAM: 더 많은 레이어 또는 전체 스택 적재 가능
  • 통합 메모리 128GB: 대형 양자화 모델 개발에 유리

mmap은 기본값으로 유지하기

llama.cpp와 Ollama는 기본적으로 메모리 매핑(mmap)을 사용합니다. 모델 전체를 시작 시점에 모두 로드하지 않고, 필요한 가중치를 운영체제가 페이지 인합니다.

일반적으로는 켜두는 것이 좋습니다.

끄는 경우:

  • 첫 토큰 지연 시간이 약간 줄 수 있음
  • RAM 사용량이 크게 늘 수 있음
  • 컨테이너 메모리 제한에서 문제가 생길 수 있음

특별한 이유가 없다면 기본값을 유지하십시오.

배칭은 vLLM에서 활용하기

vLLM의 강점은 동시 요청 배칭입니다. 여러 요청을 하나의 GPU 패스로 묶어 처리량을 높입니다.

노트북 또는 작은 서버:

vllm serve meta-llama/Llama-3.3-70B-Instruct \
  --max-num-seqs 64
Enter fullscreen mode Exit fullscreen mode

H100급 서버:

vllm serve meta-llama/Llama-3.3-70B-Instruct \
  --max-num-seqs 256
Enter fullscreen mode Exit fullscreen mode

동시 요청이 많은 내부 개발 서버라면 vLLM이 Ollama보다 적합할 수 있습니다.

스트리밍 응답 사용하기

사용자가 체감하는 지연 시간을 줄이려면 스트리밍을 사용합니다.

Python:

stream = client.chat.completions.create(
    model="llama3.3:70b-instruct-q4_K_M",
    messages=[
        {"role": "user", "content": "Write a short deployment checklist."}
    ],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="")
Enter fullscreen mode Exit fullscreen mode

전체 완료를 기다리는 대신 토큰이 생성되는 즉시 클라이언트에 전달됩니다.

Ollama Modelfile 사용하기

반복되는 시스템 프롬프트나 온도 설정은 Modelfile로 묶을 수 있습니다.

Modelfile 예시:

FROM llama3.3:70b-instruct-q4_K_M

SYSTEM """
You are an API testing assistant.
Return concise JSON responses only.
"""

PARAMETER temperature 0.2
PARAMETER stop "</json>"
Enter fullscreen mode Exit fullscreen mode

모델 생성:

ollama create api-test-assistant -f Modelfile
Enter fullscreen mode Exit fullscreen mode

이후 클라이언트에서는 api-test-assistant만 지정하면 됩니다.

response = client.chat.completions.create(
    model="api-test-assistant",
    messages=[
        {"role": "user", "content": "Return a JSON health check."}
    ],
)
Enter fullscreen mode Exit fullscreen mode

흔한 실수

다음 문제는 로컬 LLM API를 처음 붙일 때 자주 발생합니다.

  • 프로덕션 코드에 http://localhost:11434를 하드코딩함
  • base_url, api_key, model을 환경 변수로 분리하지 않음
  • 로컬 모델이 max_tokens를 길게 생성하도록 방치함
  • 중지 시퀀스를 설정하지 않음
  • Ollama와 다른 런타임을 같은 포트에서 실행함
  • Authorization 헤더를 생략함
  • vLLM의 --api-key 설정 후 401 응답을 디버깅하지 않음
  • Q4 모델에 호스팅 최상위 모델 수준의 수학/추론 품질을 기대함
  • 로컬과 프로덕션의 응답 스키마를 별도로 테스트하지 않음

기본 패턴은 간단합니다.

환경 변수로 분리하고,
동일한 요청 스키마를 유지하고,
Apidog 시나리오로 양쪽을 검증합니다.
Enter fullscreen mode Exit fullscreen mode

로컬 vs 호스팅: 비용 및 지연 시간 비교

아래 수치는 로컬의 경우 128GB 통합 메모리를 갖춘 M3 Max를 가정하고, 호스팅 엔드포인트의 경우 공개 가격 기준을 사용합니다. 첫 토큰까지의 시간(TTFT)은 1,024 토큰 프롬프트에서 배치 처리 없이 콜드 상태로 측정한 값입니다.

모델 로컬 TTFT 로컬 처리량 호스팅 동등 모델 호스팅 가격 호스팅 TTFT
Llama 3.3 70B Q4_K_M 1.2 초 12 토큰/초 GPT-5.5 Instant 1백만 토큰당 $5 / $30 200 ms
DeepSeek V4 67B Q4_K_M 1.4 초 10 토큰/초 DeepSeek-Chat (호스팅) 1백만 토큰당 $0.55 / $2.20 280 ms
Qwen 3.6 32B Q5_K_M 0.7 초 28 토큰/초 Qwen-Max (호스팅) 1백만 토큰당 $1.60 / $6.40 240 ms
Gemma 4 27B Q4_K_M 0.5 초 35 토큰/초 Gemini 3 Flash 1백만 토큰당 $0.35 / $1.05 180 ms

해석은 단순합니다.

  • 지연 시간은 대부분 호스팅 모델이 유리합니다.
  • 비용은 일정 토큰량을 넘으면 로컬이 유리합니다.
  • 프라이버시는 첫 요청부터 로컬이 유리합니다.
  • 사용자 대면 프로덕션은 데이터 분류가 허용한다면 호스팅이 더 적합할 수 있습니다.
  • 내부 개발 루프와 규제 데이터 테스트는 로컬이 더 적합합니다.

실용적인 운영 패턴은 다음과 같습니다.

개발: Local
스테이징: Hosted
CI: Local + Hosted 둘 다 실행
프로덕션: 데이터 분류와 지연 시간 요구사항에 따라 선택
Enter fullscreen mode Exit fullscreen mode

DeepSeek 계열은 DeepSeek V4 로컬에서 실행하는 방법DeepSeek V4 사용 가이드를 참고하십시오.

실제 사용 사례

핀테크 컴플라이언스 팀

싱가포르의 한 핀테크 컴플라이언스 팀은 엔지니어 노트북에서 Ollama를 사용해 의심스러운 활동 보고서를 작성합니다. 프롬프트에는 MAS 규정상 국가 밖으로 나갈 수 없는 계좌 번호와 거래 패턴이 포함됩니다.

구성 방식:

  • 개발: Ollama 로컬 모델
  • 프로덕션: 수정된 프롬프트를 호스팅 엔드포인트로 전송
  • 테스트: Apidog 시나리오에서 모든 요청에 수정자가 적용되는지 검증

게임 스튜디오

스톡홀름의 한 게임 스튜디오는 로컬 Qwen 3.6 인스턴스로 디자인 인턴에게 프롬프트 엔지니어링을 교육합니다.

장점:

  • 무료로 반복 실험 가능
  • 오프라인 환경에서 동작
  • 신작 세계관을 외부 서비스에 노출하지 않음

프로덕션에서는 단일 환경 변수 변경으로 Gemini 3 Flash를 대상으로 배포합니다. 연결 방식은 Gemini 3 Flash API 가이드를 재사용할 수 있습니다.

헬스케어 스타트업

한 헬스케어 스타트업은 고객 병원 네트워크 내부의 A100 서버에 vLLM을 실행합니다. 이 엔드포인트는 공개 DNS에 노출되지 않습니다.

구성:

  • 병원 내부 VLAN에서만 접근 가능
  • Jenkins 에이전트가 동일 네트워크에서 통합 테스트 실행
  • 애플리케이션 코드는 OpenAI SDK 그대로 사용
  • Apidog 시나리오로 응답 계약 검증

결과적으로 동일한 코드가 세 가지 배포 대상에 연결됩니다.

개발자 노트북 → Ollama
고객 네트워크 → vLLM
프로덕션 SaaS → 호스팅 모델
Enter fullscreen mode Exit fullscreen mode

구현 체크리스트

로컬 LLM API를 붙일 때는 다음 순서로 진행하십시오.

[ ] 런타임 선택: Ollama / vLLM / llama.cpp
[ ] 모델 다운로드
[ ] OpenAI 호환 서버 실행
[ ] /v1/chat/completions 응답 확인
[ ] base_url과 api_key를 환경 변수로 분리
[ ] Python 또는 JavaScript SDK 연결
[ ] Apidog에 Local 환경 추가
[ ] Production 환경 복제
[ ] 요청 URL을 {{BASE_URL}}로 변경
[ ] 시나리오 테스트 작성
[ ] Local과 Production에서 모두 실행
[ ] CI에 시나리오 연결
Enter fullscreen mode Exit fullscreen mode

최소 curl 테스트:

curl http://localhost:11434/v1/chat/completions \
  -H "Authorization: Bearer ollama" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.3:70b-instruct-q4_K_M",
    "messages": [
      {
        "role": "user",
        "content": "Reply with OK only."
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

결론

로컬 LLM API 스택은 이제 실무 개발 루프에 넣을 수 있을 만큼 성숙했습니다. 핵심은 새로운 애플리케이션 코드를 작성하는 것이 아니라, 기존 OpenAI 호환 클라이언트의 대상만 바꾸는 것입니다.

정리하면 다음 다섯 단계입니다.

  1. 노트북 개발에는 Ollama를 사용합니다.
  2. 공유 개발 서버나 고처리량 추론에는 vLLM을 사용합니다.
  3. 메모리와 하드웨어 제어가 중요하면 llama.cpp를 사용합니다.
  4. base_url, api_key, model을 환경 변수로 분리합니다.
  5. Apidog에서 Local과 Production에 동일한 시나리오 테스트를 실행합니다.

아직 모델을 선택하지 않았다면 2026년 최고의 로컬 LLM으로 시작하십시오. 로컬 엔드포인트 위에서 에이전트 흐름까지 테스트하려면 AI 에이전트 API 테스트 방법을 참고하면 됩니다.

Top comments (0)