티스토리 뷰

"내 PC에서 LLM을 직접 굴려보고 싶다." 여기까지는 쉬운데, 막상 찾아보면 도구가 셋이나 나온다.
LM Studio, Ollama, llama.cpp. 뭘 골라야 하나 싶어 한참 헤맸는데, 알고 보니 셋은 경쟁하는 대체재가 아니라 층이 다른 것이었다. 맨 밑에 엔진(llama.cpp)이 있고, 그 위에 편의 도구(Ollama·LM Studio)가 얹힌 구조다.
이 글은 그 셋을 쉬운 순서로 하나씩 띄워보고, 언제 뭘 쓰면 좋은지까지 정리한다. (양자화 글에서 모델을 GGUF로 만드는 얘기를 했는데, 이 글은 그 GGUF를 실제로 굴리는 법이다. RAG 구축 고려사항의 서빙 곁가지쯤.)
1. 제일 쉬운 길 : LM Studio (터미널 없이 클릭 몇 번)
터미널이 부담스러우면 여기서 시작하는 게 제일 편하다. 모델 검색·다운로드·대화·서버까지 전부 GUI로 된다.
설치: lmstudio.ai/download에서 Windows 설치본을 받아 실행하면 끝이다. 명령줄이 편하면 winget으로도 된다.
winget install --id ElementLabs.LMStudio
모델 받기
좌측 Discover 탭(돋보기, Ctrl+2)에서 모델을 검색한다. 이름이나 Hugging Face 주소를 넣고, 양자화는 Q4 이상을 고르면 무난하다(양자화 얘기는 지난 글 참고). 받고 나면 Chat 탭에서 그 모델을 로드해 바로 대화할 수 있다.

LM Studio가 편한 또 한 가지는 모델을 로드할 때 하드웨어 설정을 슬라이더로 만질 수 있다는 점이다.
GPU에 레이어를 몇 개 올릴지(GPU offload), 컨텍스트 길이를 얼마로 할지 — 뒤에 볼 llama.cpp에선 -ngl·-c 플래그로 넘겨야 하는 것들을 여기선 화면에서 눈금으로 조절한다. 채팅 쪽에서도 시스템 프롬프트나 temperature 같은 값을 GUI로 바꿀 수 있어서, 코드 한 줄 없이 이것저것 실험해보기 좋다.

API 서버로도 쓰기. 그냥 채팅만 하는 게 아니라, Developer 탭에서 로컬 서버를 켜면 OpenAI 호환 API가 열린다. 주소는 http://localhost:1234/v1. 그러면 OpenAI SDK에서 base_url만 이걸로 바꿔 그대로 갖다 쓸 수 있다.
채팅 API http://localhost:1234/v1/chat/completions
임베딩 http://localhost:1234/v1/embeddings
실제로 나는 검색 실험에서 bge-m3 임베딩을 이 OpenAI 호환 서버로 호출해서 썼다. 임베딩 모델을 GUI로 받아 클릭 한 번으로 서버를 열 수 있으니, 이것저것 갈아 끼우며 실험하기엔 이만한 게 없었다.
LM Studio는 GUI라 처음 발 담그거나 모델을 이리저리 실험할 땐 최고다.
대신 그만큼 무겁고 GUI에 의존한다. 화면 없는 서버(헤드리스)에 얹거나 프로덕션에 그대로 배포하기엔 맞지 않는다. (CLI가 아예 없진 않다 — lms server start 같은 lms 명령이 번들돼 있다. 다만 이 도구의 본령은 GUI다.)
2. 적당히 쉽고 깔끔한 서빙 : Ollama (명령 한 줄)
터미널이 익숙하다면 Ollama가 더 빠르다. 명령 한 줄이면 모델을 받아 바로 돌리고, 깔끔한 로컬 API까지 딸려 온다.
설치
ollama.com/download/windows에서 설치본을 받거나, PowerShell 한 줄, 또는 winget으로 깐다.
irm https://ollama.com/install.ps1 | iex # 또는
winget install --id Ollama.Ollama
설치 프로그램이 PATH를 자동으로 잡아준다. 단 이미 열려 있던 터미널엔 반영이 안 되고, 새 터미널부터 ollama 명령이 먹는다.
모델 받고 돌리기
ollama pull gemma3 # 모델 다운로드
ollama run gemma3 # 실행 → >>> 프롬프트에서 바로 대화
ollama list # 받아둔 모델 목록
ollama run은 모델이 로컬에 없으면 알아서 받은 뒤 대화 프롬프트로 넘어간다. 성공하면 콘솔이 대략 이렇게 흐른다(진행 바 문구는 버전마다 조금씩 다르고, 마지막 >>> 프롬프트가 "이제 됐다"는 신호다).
pulling manifest
pulling a1b2c3... 100% ▕████████████████▏ 4.7 GB
verifying sha256 digest
writing manifest
success
>>> Send a message (/? for help)
API로 쓰기
서버는 기본으로 http://localhost:11434에 뜬다. 네이티브 엔드포인트(/api/chat)도 있고, OpenAI 호환 엔드포인트(http://localhost:11434/v1/)도 열려 있다. API 키는 형식상 필요하지만 값은 무시되니 아무거나 넣으면 된다.
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1/", api_key="ollama")
나는 파인튜닝한 질의처리기를 GGUF로 만들어 Ollama에 등록해서(Modelfile로) 서빙했다. run 한 줄로 굴러가고 API가 깔끔하니, 스크립트나 앱에 붙이기 좋았다. 참고로 2025년부터는 Ollama도 Windows용 네이티브 데스크톱 앱(트레이 아이콘 + 채팅 창)이 생겨서, 꼭 터미널만 써야 하는 건 아니다.
정리하면, pull 한 줄·API 깔끔함이 최대 장점이다. 대신 그 편의를 위해 내부가 추상화돼 있어서 세부 플래그나 메모리를 손톱만큼 더 짜내는 제어는 다음에 볼 llama.cpp만큼 되진 않는다.
3. 밑바닥 엔진 직접 : llama.cpp server (제어와 경량)
사실 위 둘 다 이걸 감싼 것이다. llama.cpp가 맨 아래에서 도는 추론 엔진이고, GGUF 포맷의 본가다. 최대한 가볍게, 플래그를 직접 만지고 싶으면 이걸 직접 띄운다. 정본 저장소는 github.com/ggml-org/llama.cpp다(예전 ggerganov 계정에서 이전됐고, 옛 주소는 리다이렉트된다).
설치
Releases에서 Windows용 zip을 받는다. 파일명이 llama-<버전>-bin-win-<종류>-x64.zip 꼴이고, 내 하드웨어에 맞는 종류를 고른다.
...-cpu-x64.zip CPU만
...-cuda-12.4-x64.zip NVIDIA (CUDA 버전 갈래 있음, 드라이버 맞춰서)
...-vulkan-x64.zip Vulkan (범용 GPU)
...-hip-radeon-x64.zip AMD
zip은 인스톨러가 아니라 풀어서 바로 실행한다.
압축을 풀면 llama-server.exe, llama-cli.exe가 들어 있고, 그 폴더에서 실행하거나 PATH를 수동으로 추가해야 한다(zip은 PATH 자동 등록을 안 해준다). 손이 가는 게 싫으면 winget으로 깔면 PATH까지 잡아준다.
winget install llama.cpp
실행
GGUF 모델 파일을 하나 준비해서(보통 Hugging Face에서 .gguf) llama-server에 물린다.
.\llama-server.exe -m .\models\model.gguf -c 4096 -ngl 99 --host 127.0.0.1 --port 8080
-m 모델 경로 (필수)
-c 컨텍스트 길이 (여기선 4096)
-ngl GPU에 올릴 레이어 수 (99 = 되는 만큼 다)
--port 포트 (기본 8080)
성공했는지는 마지막 리스닝 라인으로 안다(모델 로딩 로그는 버전마다 문구가 바뀌지만, 이 줄은 늘 뜬다).
main: model loaded
main: server is listening on http://127.0.0.1:8080
main: starting the main loop...
이제 브라우저로 http://localhost:8080에 들어가면 llama.cpp에 내장된 웹 UI로 바로 대화할 수 있다. API도 OpenAI 호환(/v1/chat/completions)이라 붙이는 방식은 앞의 둘과 똑같다.
🌐 http://localhost:8080 llama.cpp 내장 웹 UI
────────────────────────────────────────────────────────────
나 ▸ 안녕, 넌 어떤 모델이야?
봇 ▸ 로컬에서 llama.cpp로 도는 GGUF 모델이에요.
무엇을 도와드릴까요?
────────────────────────────────────────────────────────────
[ 메시지를 입력… ] ▸ 보내기
온디바이스 개발하는 상황에서는 사실상 선택권이 없다. 성능과 플래그를 완전히 손에 쥘 수 있고, 셋 중 가장 가볍다. 대신 앞의 편의 도구들이 대신 해주던 일을 여기선 전부 사람이 떠안는다. 구체적으로 세 가지다.
1. 빌드 고르기. 릴리스에는 하드웨어별로 다른 zip이 올라온다 — CPU 전용, CUDA(엔비디아, 그것도 드라이버의 CUDA 버전까지 맞춰야 한다), Vulkan(범용 GPU), ROCm(AMD). 내 장비에 맞는 걸 직접 골라야 하고, 엉뚱한 걸 받으면 GPU를 못 쓰거나 아예 안 뜬다(CUDA 빌드는 런타임 DLL 묶음도 따로 챙겨야 한다). Ollama·LM Studio는 이걸 알아서 감지해 맞는 걸 깔아준다.
2. PATH. zip이 인스톨러가 아니라 그냥 압축을 푸는 것이라 생기는 문제다. 압축을 풀면 llama-server.exe가 그 폴더 안에 들어 있는데, 실행도 그 폴더 안에서만 된다. 아무 위치의 터미널에서나 llama-server라고 불러 쓰려면, 그 폴더 경로를 Windows 환경변수 PATH에 손수 등록해야 한다(시스템 속성 → 환경 변수). winget으로 깔면 이건 알아서 잡아준다.
3. 모델 관리. Ollama의 ollama pull처럼 모델을 받아서 정리하고 버전까지 챙겨주는 창구가 없다는 뜻이다. 쓸 GGUF 파일을 보통 Hugging Face에서 직접 찾아 받아 어딘가 저장해두고, 실행할 때마다 -m에 그 경로를 정확히 적어 물려줘야 한다. 어떤 모델을 어디에 뒀는지도 스스로 관리한다.
그래서 셋 중 가장 강력하지만, 진입장벽도 그만큼 제일 높다.
4. 그래서 뭘 쓰나 — '레이어'로 이해하면 쉽다
셋을 나란히 놓고 "뭐가 제일 좋냐"를 따지면 답이 안 나온다. 애초에 같은 줄에 선 물건이 아니기 때문이다.
LM Studio (GUI) Ollama (CLI + API) ← 이 엔진을 감싼 편의층
▲ ▲
└───────────┬────────────┘
│
llama.cpp · 엔진 (GGUF) ← 밑바닥 (이걸 감싼 게 위의 둘)
Ollama도 LM Studio도 내부적으로 llama.cpp를 엔진으로 쓴다(양쪽 공식 문서가 그렇게 밝힌다). 위에 무엇을 얹었느냐가 다를 뿐이다 — Ollama는 CLI와 간단한 API를, LM Studio는 풀 GUI를 얹었고, llama.cpp는 그 엔진을 날것으로 준다.
그러니 선택은 "무엇이 우월한가"가 아니라 "어디에 쓰느냐"의 문제다.
처음 발 담그기 · 모델 실험 · 임베딩 굴려보기 → LM Studio
CLI로 편하게 서빙 · 스크립트/앱에 API 연동 → Ollama
성능 튜닝 · 최대 경량 · 플래그 완전 제어 → llama.cpp 직접
그러니 셋 중 뭐가 낫냐를 따질 게 아니라, 지금 내가 뭘 하려는지를 먼저 보면 된다. 편의를 얻으면 그만큼 제어를 내주고, 제어를 쥐면 그만큼 손이 간다 — 셋은 그 맞바꿈의 눈금이 어디쯤이냐가 다를 뿐이다.
마치며
로컬에 LLM을 띄우는 건 생각보다 쉽다.
LM Studio면 클릭 몇 번, Ollama면 명령 한 줄이면 내 PC에서 모델이 돈다. 다만 그 쉬움의 뒤에는 다 llama.cpp라는 같은 엔진이 있고 편의 도구들은 그 위에 각자 다른 껍데기를 씌운 것뿐이다.
특히 온디바이스처럼 자원이 빠듯한 자리에선 이 선택이 곧 자원 예산의 문제가 된다. 양자화 글에서 GGUF를 만드는 법을 봤다면, 이 글은 그걸 굴리는 법이었다. 만들고 굴리는 두 조각이 맞물려야, 비로소 "내 PC(또는 기기) 위에서 도는 LLM"이 완성된다.
'개발 > AI' 카테고리의 다른 글
| RAG 검색 개선기: 하이브리드 검색 (0) | 2026.07.09 |
|---|---|
| RAG 검색 개선기: LLM을 걷어내고 규칙 기반 질의처리기로 (0) | 2026.06.26 |
| 한국어 검색의 바탕, Kiwi 형태소 분석 (1) | 2026.06.23 |
| LLM 모델 양자화해보기 Q4와 Q8 사이? (0) | 2026.06.20 |
| 무료 Colab으로 소형 LLM 파인튜닝 직접 해보기 (0) | 2026.06.20 |
- Total
- Today
- Yesterday
- 스프링부트
- Spring
- cache
- ChatGPT
- 람다
- GIT
- 질의처리
- S3
- Redis
- Kotlin
- springboot
- CloudFront
- java
- rag
- AWS EC2
- AWS
- CORS
- elasticsearch
- serverless
- lambda
- 인프런
- 티스토리챌린지
- EKS
- Log
- docker
- 오블완
- terraform
- 후쿠오카
- OpenAI
- 온디바이스 AI
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |

