로컬 LLM 환경 구축 실전 가이드: Ollama와 Open WebUI로 개인 AI 스택 만들기
GPU VRAM별 모델 선택 기준부터 Ollama 서버 튜닝, Open WebUI RAG 설정, OpenAI 호환 API 활용까지 실전 절차를 정리한다
2026-08-12 · 최초 발행 2026-03-29
2026년에도 로컬 LLM을 쓰는 이유
클라우드 LLM API가 성능에서 앞서 있음에도 로컬 LLM이 계속 주목받는 이유는 세 가지다. 프라이버시와 데이터 주권 — 기업 내부 문서, 개인 의료 기록, 법률 문서를 외부 API로 보내지 않고 처리할 수 있고, GDPR·HIPAA·국내 개인정보보호법 같은 규제 환경에서는 로컬 실행이 선택이 아니라 필수인 경우가 많다. 비용 — GPT-4급 모델을 하루 수천 회 호출하면 월 수십만 원의 API 비용이 발생하는데, 하드웨어 투자를 감안해도 장기적으로는 로컬 실행이 경제적인 경우가 많다. 그리고 인터넷 연결 없이 동작하는 오프라인 환경이 필요한 경우다.
VRAM이 곧 실행 가능한 모델 크기다
로컬 LLM 실행에서 가장 중요한 하드웨어 자원은 GPU VRAM이다. 모델 크기(파라미터 수)와 필요 VRAM의 대략적인 관계는 다음과 같다.
- 7B 모델(4비트 양자화): 약 4~5GB VRAM
- 13B 모델(4비트 양자화): 약 8~10GB VRAM
- 34B 모델(4비트 양자화): 약 20~24GB VRAM
- 70B 모델(4비트 양자화): 약 40~48GB VRAM
- 7B 모델(원본 FP16): 약 14GB VRAM
VRAM이 부족하면 모델이 CPU 메모리로 오프로드되면서 속도가 수십 배 느려진다. 실용적으로 쓰려면 모델 전체가 VRAM에 올라와야 한다.
예산별로 보면 이렇다.
| 예산 수준 | GPU | VRAM | 추천 모델 | 토큰/초 |
|---|---|---|---|---|
| 입문 (~60만원) | RTX 4060 Ti | 16GB | Llama 3.2 8B | 45 tok/s |
| 중급 (~120만원) | RTX 4070 Ti Super | 16GB | Mistral Small 3 22B (Q4) | 28 tok/s |
| 고급 (~250만원) | RTX 4090 | 24GB | Llama 3.3 70B (Q2) | 18 tok/s |
| 워크스테이션 (~500만원) | RTX A6000 | 48GB | Llama 3.3 70B (FP16) | 35 tok/s |
Apple Silicon은 통합 메모리(Unified Memory)가 GPU 메모리로 쓰이기 때문에 M3 Pro(18GB)는 13B 모델, M3 Max(48GB~128GB)는 70B 모델까지 실용적인 속도로 실행할 수 있다.
Ollama 설치와 모델 실행
플랫폼별 설치 방법은 다음과 같다.
# macOS / Linux (공식 설치 스크립트)
curl -fsSL https://ollama.ai/install.sh | sh
# macOS (Homebrew)
brew install ollama
# Windows
# https://ollama.ai/download에서 설치 파일 다운로드
# 설치 확인
ollama --version
# ollama version 0.5.x (2026년 기준)
모델 다운로드와 실행은 ollama run 한 줄이면 된다.
# 인기 모델 다운로드 및 실행
ollama run llama3.3 # Meta Llama 3.3 70B (권장: 48GB+ VRAM)
ollama run llama3.2 # Meta Llama 3.2 3B (경량, 모바일급 하드웨어)
ollama run llama3.2:8b # Meta Llama 3.2 8B
ollama run mistral-small3 # Mistral Small 3 22B
ollama run gemma3:9b # Google Gemma 3 9B
ollama run qwen2.5:14b # Alibaba Qwen 2.5 14B
ollama run deepseek-r2:8b # DeepSeek-R2 8B (추론 특화)
ollama run phi4 # Microsoft Phi-4 14B
# 코딩 특화 모델
ollama run codellama:13b # Meta Code Llama 13B
ollama run qwen2.5-coder:7b # Alibaba Qwen 2.5 Coder
# 설치된 모델 목록
ollama list
# 모델 삭제
ollama rm llama3.2
# 백그라운드 서버로 실행 (API 서버)
ollama serve
서버 동작을 세밀하게 조정하려면 환경 변수를 쓴다.
# 환경 변수 설정 (Linux/macOS: ~/.bashrc 또는 ~/.zshrc)
# 모델 저장 경로 변경 (기본: ~/.ollama/models)
export OLLAMA_MODELS="/data/ollama/models"
# 동시 요청 처리 수 (기본값: 1)
export OLLAMA_NUM_PARALLEL=4
# GPU 메모리 사용 임계값 (기본: 0.9 = 90%)
export OLLAMA_GPU_MEMORY_FRACTION=0.85
# 컨텍스트 윈도우 크기 (모델 기본값 오버라이드)
export OLLAMA_MAX_LOADED_MODELS=2
# 네트워크 바인딩 주소 (외부 접근 허용 시)
# 기본값: 127.0.0.1:11434 (로컬호스트만)
export OLLAMA_HOST=0.0.0.0:11434 # 주의: 방화벽 설정 필수
커스텀 모델파일(Modelfile)로 시스템 프롬프트와 파라미터를 조정할 수 있다.
# Modelfile 예시
FROM llama3.2:8b
# 시스템 프롬프트 설정
SYSTEM """
당신은 파이썬 전문가입니다. 항상 타입 힌트와 docstring을 포함한 깔끔한 코드를 작성합니다.
"""
# 파라미터 조정
PARAMETER temperature 0.2 # 낮을수록 결정론적 (코딩에는 낮은 값 권장)
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.1
PARAMETER num_ctx 8192 # 컨텍스트 윈도우 크기
# 모델 메타데이터
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|start_header_id|>"
# 커스텀 모델 생성
ollama create my-python-expert -f ./Modelfile
# 실행
ollama run my-python-expert
2026년 기준 어떤 모델을 쓸 것인가
범용 모델 중에서는 Llama 3.3 70B(Meta)가 코딩·추론·다국어 모두에서 탁월하지만 48GB+ VRAM이 필요하다. 4비트 양자화 버전이면 24GB VRAM에서도 느리지만 실행은 가능하다. Mistral Small 3(22B, Mistral AI)는 성능 대비 VRAM 효율이 뛰어나 16GB GPU에서 실용적인 속도를 낸다. Qwen 2.5 72B(Alibaba)는 한국어를 포함한 다국어 성능이 뛰어나 한국어 작업에 특히 추천되고, 14B 버전도 성능 대비 크기 비율이 좋다. Gemma 3 9B(Google)는 9B 크기에서 최상위 성능을 보이며 6GB VRAM에서도 실행 가능해 입문자에게 적합하다.
코딩 특화로는 Qwen 2.5 Coder 32B가 2026년 기준 로컬 실행 코딩 모델 중 최고 성능이고 HumanEval 벤치마크에서 GPT-4 수준에 근접한다. DeepSeek-Coder-V3는 수학과 알고리즘 문제에서 강점을 보이고, 추론 사고 체인(CoT)을 출력해 코딩 학습용으로도 쓸 만하다.
Open WebUI를 Docker로 띄우기
# docker-compose.yml
version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:latest
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
# 외부 OpenAI API도 함께 사용하려면:
- OPENAI_API_KEY=${OPENAI_API_KEY}
# 사용자 인증 비활성화 (개인 사용 시)
- WEBUI_AUTH=false
# 자동 업데이트 비활성화
- AUTOMATIC_1111_BASE_URL=""
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
volumes:
open-webui:
# 실행
docker-compose up -d
# 브라우저에서 접속
# http://localhost:3000
Open WebUI는 단순한 채팅 인터페이스 이상을 제공한다. 각 대화 세션에서 temperature, top_p, context length를 실시간으로 조정할 수 있고, 동일한 프롬프트를 여러 모델에 동시에 보내 응답을 비교하는 "아레나(Arena)" 모드가 있다. 자주 쓰는 시스템 프롬프트를 프리셋으로 저장해 빠르게 적용할 수 있고, PDF·텍스트 파일·이미지(멀티모달 모델)를 업로드해 내용 기반 질의응답도 가능하다.
RAG 파이프라인 붙이기
Open WebUI는 RAG(Retrieval-Augmented Generation) 파이프라인을 자체 내장한다.
# Open WebUI RAG 설정 (환경 변수)
# 임베딩 모델 설정
RAG_EMBEDDING_ENGINE=ollama
RAG_EMBEDDING_MODEL=nomic-embed-text # 또는 mxbai-embed-large
# 청크 크기 설정
CHUNK_SIZE=1500
CHUNK_OVERLAP=100
# 상위 K개 문서 검색
TOP_K=5
# 임베딩 모델 설치
ollama pull nomic-embed-text
ollama pull mxbai-embed-large
RAG를 활성화한 뒤 Open WebUI의 문서 업로드 기능으로 PDF, Word, 텍스트 파일을 지식 베이스에 추가하면 해당 문서 내용을 기반으로 질의응답을 할 수 있다.
API 서버처럼 붙여 쓰기
Ollama는 OpenAI API 형식과 호환되는 엔드포인트를 제공한다. 덕분에 OpenAI SDK를 쓰던 기존 코드를 수정 없이 로컬 모델로 돌릴 수 있다.
from openai import OpenAI
# Ollama 로컬 서버를 OpenAI 클라이언트로 접근
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # 임의의 문자열 (인증 없음)
)
response = client.chat.completions.create(
model="llama3.2:8b",
messages=[
{"role": "system", "content": "당신은 도움이 되는 AI 어시스턴트입니다."},
{"role": "user", "content": "파이썬으로 피보나치 수열을 생성하는 함수를 작성해줘."}
],
temperature=0.3,
max_tokens=1000,
stream=True, # 스트리밍 응답
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
LangChain과의 통합도 간단하다.
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOllama(
model="llama3.2:8b",
temperature=0,
base_url="http://localhost:11434",
)
messages = [
SystemMessage(content="당신은 코드 리뷰 전문가입니다."),
HumanMessage(content="다음 코드를 리뷰해주세요: ..."),
]
response = llm.invoke(messages)
print(response.content)
전체 스택을 그림으로 정리하면 다음과 같다.
양자화 수준과 멀티 GPU
GGUF 형식의 모델은 다양한 양자화 수준을 제공하며, 각각의 트레이드오프를 알아두면 VRAM 한계 안에서 최선의 선택을 할 수 있다. Q8_0은 거의 원본 품질이지만 VRAM 요구가 가장 높다(FP16 대비 약 50% 절감). Q6_K는 고품질이면서 FP16 대비 약 60% 절감되고 육안 차이가 거의 없다. Q5_K_M은 좋은 품질에 FP16 대비 약 68% 절감으로 일반적으로 추천되는 수준이다. Q4_K_M은 적당한 품질에 약 75% 절감으로 VRAM이 부족할 때 고르는 선택지고, Q3_K_L 이하는 품질 저하가 체감될 만큼 낮아지므로 일반 사용에는 권장되지 않는다.
두 개 이상의 GPU를 쓰는 경우 Ollama는 자동으로 모델을 GPU 간에 분산한다.
# 특정 GPU만 사용 (0번 GPU)
CUDA_VISIBLE_DEVICES=0 ollama serve
# 멀티 GPU 모두 사용 (기본 동작)
# CUDA_VISIBLE_DEVICES=0,1 ollama serve
# GPU 별 레이어 할당 조정 (Modelfile)
PARAMETER num_gpu 99 # 가능한 모든 레이어를 GPU에 올림
네트워크에 노출할 때 지켜야 할 것
로컬 LLM 서버를 네트워크에 공개하면 기본 인증 없이 누구나 접근할 수 있다는 점을 잊으면 안 된다. 최소한 다음 설정은 적용해야 한다.
# Nginx 리버스 프록시 + 기본 인증
server {
listen 443 ssl;
server_name llm.internal.company.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
location / {
auth_basic "LLM Server";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:3000; # Open WebUI
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Open WebUI 자체 인증 기능(WEBUI_AUTH=true)을 켜면 사용자 계정 관리와 대화 기록 분리가 가능해진다.
RTX 4060 Ti 16GB 수준의 소비자 GPU로도 Gemma 3 9B나 Llama 3.2 8B를 실용적인 속도로 돌릴 수 있고, RAG 파이프라인까지 포함한 개인 AI 환경을 구축하는 것이 기술적으로 복잡하지 않은 지점까지 왔다. 클라우드 API에 안심하고 보내기 어려운 민감한 데이터, 오프라인 환경, 비용 제약이 있는 상황에서 로컬 LLM은 실질적인 대안이다. 하드웨어 투자는 한 번이고 이후 API 비용 없이 계속 쓸 수 있다는 점이 장기적으로 상당한 가치를 만든다.