로컬 LLM을 API 서버로 띄우기 — Ollama의 OpenAI 호환 엔드포인트 활용

로컬 LLM을 터미널에서 ollama run으로만 쓰다 보면 아쉬워지는 순간이 온다. 직접 만드는 앱에서 부르고 싶고, 같은 집 안의 노트북에서도 데스크톱의 GPU를 빌려 쓰고 싶어진다. 다행히 Ollama는 설치하는 순간부터 이미 API 서버다. 별도 프레임워크 없이 로컬 모델을 OpenAI 호환 엔드포인트로 노출해서 여러 앱이 공용으로 쓰는 구성을, 실제로 세팅한 순서대로 정리한다.

1. 왜 API 서버로 띄우나

이유는 세 가지다. 첫째, 모델과 앱의 분리다. 무거운 모델은 GPU가 있는 데스크톱 한 대에만 두고, 앱·스크립트·노트북은 가볍게 API만 호출하면 된다. 둘째, 코드 재사용이다. OpenAI 호환 형식을 쓰면 이미 세상에 널린 OpenAI SDK 기반 코드, 각종 코딩 도구, 챗 UI를 주소만 바꿔 그대로 물릴 수 있다. 셋째, 모델 교체가 앱에 영향을 주지 않는다. 서버 쪽에서 모델을 바꿔도 클라이언트 코드는 모델명 문자열 하나만 다르다.

하나의 Ollama 서버를 여러 앱이 공유하는 구조도

2. 이미 떠 있는 서버 — 11434 포트 확인

Ollama를 설치하면 백그라운드에서 http://localhost:11434에 HTTP 서버가 항상 떠 있다. 브라우저나 curl로 바로 확인할 수 있다.

curl http://localhost:11434
# Ollama is running

Ollama 고유 API는 /api/chat 같은 경로를 쓰지만, 이 글의 주인공은 공식 문서 기준으로 제공되는 OpenAI 호환 경로다. 베이스 URL이 http://localhost:11434/v1이고, 채팅은 /v1/chat/completions로 받는다.

curl http://localhost:11434/v1/chat/completions `
  -H "Content-Type: application/json" `
  -d '{
    "model": "gemma3:4b",
    "messages": [{"role": "user", "content": "로컬 LLM의 장점 한 줄 요약"}]
  }'

응답 JSON의 구조가 OpenAI API와 같은 형태(choices[0].message.content)로 내려온다. 서버에 어떤 모델이 있는지는 /v1/models를 조회하면 OpenAI와 같은 형식의 목록으로 내려오는데, 챗 UI 도구들이 모델 선택 메뉴를 자동으로 채울 때 쓰는 것이 바로 이 경로다. 이 호환성 덕분에 다음 단계가 쉬워진다.

3. 클라이언트 예제 — OpenAI SDK를 그대로 쓴다

파이썬 openai 라이브러리를 쓰는 코드에서 바꿀 것은 base_urlapi_key 두 줄뿐이다. Ollama는 키를 검사하지 않지만 SDK가 빈 값을 허용하지 않으므로 아무 문자열이나 넣는다.

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # 아무 값이나 가능 (검사하지 않음)
)

res = client.chat.completions.create(
    model="gemma3:4b",
    messages=[{"role": "user", "content": "커밋 메시지 컨벤션 예시 3개"}],
)
print(res.choices[0].message.content)

스트리밍도 stream=True로 OpenAI와 동일하게 동작한다. 기존에 클라우드 API로 짜 둔 코드가 있다면 이 두 줄 수정만으로 로컬 모델로 갈아탈 수 있다는 뜻이다. 개발 중 반복 테스트는 로컬 모델로 비용 없이 돌리고, 배포 버전만 클라우드 모델을 쓰는 식의 운용도 이 구조에서 나온다.

4. 로컬 네트워크에서 다른 기기가 접근하게 하기

기본 상태의 Ollama는 localhost에만 바인딩되어 있어서 같은 PC에서만 접근할 수 있다. 같은 공유기에 물린 노트북에서 데스크톱의 모델을 쓰려면 OLLAMA_HOST 환경변수로 바인딩 주소를 바꿔야 한다.

  1. 서버가 될 PC에서 Ollama를 완전히 종료한다.
  2. PowerShell에서 setx OLLAMA_HOST "0.0.0.0"을 실행해 모든 네트워크 인터페이스에서 듣게 한다.
  3. Windows 방화벽에 11434 포트 인바운드 허용 규칙을 추가한다. 이때 범위를 "개인 네트워크" 또는 내부 IP 대역으로 제한한다.
  4. Ollama를 다시 실행하고, 서버 PC의 내부 IP를 확인한다(ipconfig에서 IPv4 주소, 예: 192.168.0.10).
  5. 노트북에서 http://192.168.0.10:11434/v1을 base_url로 넣고 위의 클라이언트 코드를 그대로 돌린다.

여기까지 하면 집 안 어느 기기에서든 데스크톱의 GPU로 추론이 돌아간다. 체감상 가장 유용한 조합은 성능 낮은 노트북 + GPU 데스크톱이다. 노트북은 사실상 화면과 키보드 역할만 한다. 한 가지 알아 둘 점은, 여러 기기가 동시에 요청을 보내면 한 대의 GPU가 순서대로 처리하므로 대기가 생길 수 있다는 것이다. 혼자 또는 가족·팀 단위의 소규모 사용에는 문제가 없지만, 동시 사용자가 많은 서비스용이라면 처음부터 전용 서빙 도구를 검토하는 것이 맞다.

5. 인증과 포트 보안 — 반드시 짚고 넘어갈 것

편해진 만큼 위험도 생긴다. 반드시 알아야 할 사실은 Ollama에는 자체 인증 기능이 없다는 것이다. 0.0.0.0으로 열어 둔 순간, 그 네트워크에 접속할 수 있는 누구나 내 모델을 호출할 수 있고 ollama rm 같은 관리 API까지 닿을 수 있다. 그래서 원칙을 정해 두는 게 좋다.

  • 개방 범위는 신뢰하는 내부망까지만. 카페 와이파이 같은 공용망에 물린 채 0.0.0.0으로 열지 않는다.
  • 공유기에서 11434 포트를 포트포워딩해 인터넷에 직접 노출하는 것은 금물이다. 실제로 인터넷에 무방비로 노출된 Ollama 서버가 대량으로 스캔된다는 보안 보고가 여러 차례 있었다.
  • 집 밖에서 써야 한다면 포트 개방 대신 Tailscale 같은 사설 VPN으로 기기끼리만 연결하는 방식이 안전하다.
  • 불특정 다수에게 서비스해야 한다면 Ollama 앞에 리버스 프록시(nginx, Caddy 등)를 세우고 API 키 검사와 HTTPS를 프록시에서 처리한다.
외부 접속을 열기 전 보안 점검 체크리스트

6. 마무리

정리하면 이렇다. Ollama는 설치 시점부터 API 서버이고, /v1 경로의 OpenAI 호환 덕분에 기존 생태계의 코드가 거의 그대로 붙는다. OLLAMA_HOST와 방화벽 규칙만 만지면 내부망 공용 추론 서버가 되고, 보안은 "내부망까지만, 밖은 VPN으로"라는 원칙만 지키면 큰 사고를 피할 수 있다. 다음 단계로는 이 엔드포인트를 실제 앱 백엔드에 물려 챗 기능을 붙여 보는 것을 권한다.

※ 이 글의 엔드포인트 경로와 설정 방법은 2026년 기준이며 변경될 수 있습니다.

함께 보면 좋은 글: 개인 컴퓨터에 무료 LLM 구축하기 — Ollama로 Gemma 4 설치부터 저장 위치 변경까지

댓글

이 블로그의 인기 게시물

메일 주소 하나 만들려다 브랜드를 세웠다 — 1인 스튜디오 브랜딩 실전기

클로드 Fable 5와 Opus 4.8 비교 - 차이점, 가격, 무료 기간 종료 후 변화까지 총정리 (7월 최신)

구글 labs-fx - 제미나이 - 클라우드 차이점 알아보기