34. Ollama로 내 컴퓨터에서 AI 모델 실행하기

이 문서는 Ollama를 처음 설치하는 사람이 읽고 따라 하도록 썼다. 인공지능이나 명령어 창을 다뤄 본 적이 없어도 되고, 인터넷이 연결된 컴퓨터 한 대와 20GB 정도의 빈 저장 공간만 있으면 된다. 끝까지 따라 하면 내 컴퓨터에서 도는 AI 모델, 성격을 바꿔 만든 나만의 모델, 그리고 그 모델에 파이썬 코드로 말을 거는 스크립트가 남는다.

Ollama 요금제는 3단계다. 공식 페이지(ollama.com/pricing) 기준으로 정리한다.

요금제가격핵심 내용
Free$0로컬 모델 무제한 실행, 클라우드 모델도 가벼운 사용량만큼 접근 가능, CLI·API·데스크톱 앱, 커뮤니티 연동 4만 개 이상
Pro월 $20 (연간 결제 시 $200/년)Free 전체 + 더 크고 강력한 클라우드 모델 접근, 클라우드 모델 동시 3개 실행, Free보다 사용량 50배, 비공개 모델 업로드·공유
Max월 $100Pro 전체 + 클라우드 모델 동시 10개 실행, Pro보다 사용량 5배

로컬에서 내 컴퓨터로 모델을 돌리는 건 어느 요금제든 완전 무료·무제한이다. 요금제 차이는 오직 클라우드 모델(-cloud 접미사 붙은 모델, Ollama 서버에서 계산)에만 적용된다.

Max 요금제는 신규 가입이 일시 중단된 상태다. 클라우드 수요가 용량 증설 속도보다 빠르게 늘어서 기존 Max 구독자는 유지하되 신규 가입만 막아 놓았다. Free와 Pro는 정상 가입된다.

사용량 측정 방식도 특이하다. 토큰 개수로 딱 자르지 않고 모델별 난이도(레벨 1~4)에 따라 GPU 사용량으로 계산하며, 세션 한도는 5시간마다, 주간 한도는 7일마다 초기화된다.

팀 단위 요금제도 따로 있다 — 최소 5석부터 시작하고 석당 월 $25(최소 월 $125), 추가 인원은 석당 $25씩 늘어난다.

1 – 설치

1.2 – 운영체제에 맞게 설치하기

Ollama는 Windows, macOS, Linux에서 모두 사용할수 있다.
아래 링크에서 자신의 운영체제에 맞는 설치프로그램을 받아 설치한다.

설치가 끝나면 Ollama 서버가 백그라운드에서 돌기 시작한다.

1.3 – 설치 확인과 모델 내려받기

1.3.1 – GUI

  1. 채팅창 우측 하단의 모델 선택버튼을 클릭한다.
  2. 모델명과 버전 우측 다운로드 아이콘을 클릭한다.
    아이콘이 구름모양 인것은 클라우드 전용이다. (무료 X)

1.3.2 – CLI

공식사이트의 링크에서 다양한 모델을 확인할수 있다. 설치 전 내 PC에서 구동이 되는지 확인하자

내 PC에서 실행 가능한 로컬 LLM 모델을 조사해줘.

다음 순서로 진행해줘.

1. 내 PC의 하드웨어 사양을 먼저 확인해줘.

   * CPU 모델 및 코어 수
   * RAM 용량
   * GPU 모델
   * GPU VRAM 용량
   * 저장공간 여유 용량
   * 운영체제
   * CUDA 지원 여부(NVIDIA GPU인 경우)

2. 하드웨어 사양을 기준으로 로컬 LLM의 실행 가능 여부를 판단해줘.

3. 다음 기준으로 모델을 분류해줘.

   * 원활하게 실행 가능
   * 실행 가능하지만 느릴 수 있음
   * 권장하지 않음
   * 실행 불가능

4. 현재 사용할 수 있는 주요 모델 중 내 PC에 적합한 모델을 찾아줘.

   * 모델명
   * 파라미터 규모
   * 권장 양자화
   * 예상 메모리 사용량
   * 필요한 VRAM/RAM
   * 한국어 성능
   * 코딩 성능
   * 일반 대화 성능
   * 내 PC에서 예상되는 실행 방식(GPU / CPU / 혼합)

5. Ollama에서 사용할 수 있는 모델이라면 Ollama 기준으로 설치 명령어도 알려줘.

6. 단순히 모델의 파라미터 수만 보고 판단하지 말고, 양자화 수준과 컨텍스트 길이에 따른 메모리 사용량까지 고려해줘.

7. 내 PC에서 가장 추천하는 모델을 3개 이하로 선정하고 각각 추천 이유를 설명해줘.

8. 최신 모델이나 현재 제공되지 않는 모델을 임의로 추천하지 말고, 현재 실제로 다운로드할 수 있는 모델인지 확인해줘.

9. 마지막에는 다음 형식의 표로 정리해줘.

| 모델 | 크기 | 양자화 | 예상 메모리 | 실행 가능성 | 한국어 | 코딩 | 추천도 |
| -- | -: | --- | -----: | ------ | --- | -- | --- |

하드웨어 사양을 직접 확인할 수 없다면 필요한 터미널 명령어를 먼저 제시하고, 그 결과를 받은 후 모델 추천을 진행해줘.
  1. 명령어 창을 연다. Windows는 시작 메뉴에서 cmd를 검색해 실행하고, macOS는 [응용 프로그램] → [유틸리티] → [터미널]을 실행하며, Linux는 터미널을 연다.

  2. 이어서 ollama pull llama3.2를 입력하고 Enter 키를 누른다.

ollama pull은 모델 파일을 내 컴퓨터에 내려받는 명령이다. 화면에 진행률 막대가 나오고, llama3.2는 약 2GB라서 100Mbps 회선에서 3~5분쯤 걸린다. success가 나오면 내려받기가 끝난 것이다.

모델 파일이 저장되는 위치는 운영체제마다 다르다. macOS는 ~/.ollama/models, Linux는 /usr/share/ollama/.ollama/models, Windows는 C:\Users\사용자이름\.ollama\models다. 저장 공간이 모자라면 OLLAMA_MODELS 환경 변수에 다른 폴더 경로를 넣어 옮길 수 있다.

내려받기 도중 멈추거나 오류가 나면 같은 ollama pull llama3.2 명령을 다시 실행한다. 이미 받은 부분은 건너뛰고 남은 부분부터 이어 받는다. 회사나 학교 네트워크에서 막히면 HTTPS_PROXY 환경 변수에 프록시 주소를 넣어야 연결된다.

1.4 – 첫 대화 나누기

내려받은 모델을 메모리에 올려 대화를 시작한다. ollama run이 그 일을 하는 명령이다.

  1. 명령어 창에 ollama run llama3.2를 입력하고 Enter 키를 누른다.
  2. 화면에 >>> 표시가 나올 때까지 5~20초 기다린다.
  3. >>> 다음에 대한민국의 수도는 어디인가?를 입력하고 Enter 키를 누른다.
  4. 답이 한 글자씩 이어져 나오는 것을 확인한다.

>>>는 모델이 입력을 기다리고 있다는 표시다. 답이 한 번에 나오지 않고 한 글자씩 이어지는 까닭은, 모델이 다음에 올 글자를 하나씩 계산해 내보내기 때문이다. 이 상태에서는 계속 질문을 이어 갈 수 있고, 앞서 나눈 대화 내용도 함께 기억한다.

대화창 안에서만 쓰는 명령이 몇 가지 있다.

  1. /bye — 대화를 끝내고 명령어 창으로 돌아온다.
  2. /set parameter num_ctx 8192 — 한 번에 기억하는 분량을 8192 토큰으로 바꾼다.
  3. /? — 쓸 수 있는 대화창 명령 목록을 보여 준다.

여러 줄을 한 번에 입력할 때는 큰따옴표 세 개(""")로 앞뒤를 감싼다. 아래처럼 입력하면 세 줄이 한 질문으로 전달된다.

>>> """아래 문장을 영어로 옮겨라.
... 오늘 비가 온다.
... """

첫 줄에 """를 입력하고 Enter 키를 누르면 줄 앞이 ...으로 바뀐다. 마지막 줄에 """를 다시 입력해야 입력이 끝나고 답이 나온다.

질문을 한 번만 던지고 바로 빠져나오려면 대화창에 들어가지 않고 명령 뒤에 질문을 붙인다. ollama run llama3.2 "파이썬 리스트와 튜플의 차이를 세 줄로 설명하라"처럼 적으면 답만 출력하고 명령어 창으로 돌아온다. 이 방식은 4장에서 자동화 스크립트를 만들 때 그대로 쓴다.

1.5 – 데스크톱 앱 화면에서 대화하기

명령어 창 대신 창 화면으로 대화하는 방법도 있다. Windows와 macOS에는 설치할 때 데스크톱 앱이 함께 깔린다.

  1. Windows는 작업 표시줄 알림 영역의 Ollama 아이콘을 클릭한다. macOS는 화면 위쪽 메뉴 막대의 Ollama 아이콘을 클릭한다.
  2. 열린 창 위쪽의 모델 선택 상자를 클릭한다.
  3. 목록에서 llama3.2를 선택한다.
  4. 아래쪽 입력란에 짧은 자기소개 문장을 하나 써 줘를 입력하고 Enter 키를 누른다.

명령어 창에서 하던 일과 같은 일을 화면으로 하는 것이다. 앱에서 나눈 대화도 명령어 창에서 쓰던 같은 서버를 거치므로, 어느 쪽에서 모델을 올려 두든 결과는 같다. Linux에는 이 앱이 없고 명령어 창만 쓴다.

2 – 모델 관리하고 클라우드 모델 쓰기

앞에서 모델 하나를 내려받아 실행했다. 모델 파일은 하나에 2GB에서 40GB까지 나가므로, 무엇을 받아 두었고 지금 무엇이 메모리에 올라와 있는지 확인하는 방법을 알아야 저장 공간을 관리할 수 있다. 여기서는 모델 목록을 확인하고 지우는 방법을 익힌 다음, 내 컴퓨터에 담기지 않는 큰 모델을 쓰는 방법까지 다룬다.

2.1 – 내려받은 모델과 메모리 상태 확인하기

명령 두 개를 짝으로 기억한다. ollama ls는 내려받은 모델 목록을 보여 주고, ollama ps는 지금 메모리에 올라와 있는 모델을 보여 준다. 앞의 것은 저장 장치를 보는 명령이고, 뒤의 것은 메모리를 보는 명령이다.

  1. 명령어 창에 ollama ls를 입력하고 Enter 키를 누른다.
  2. 이어서 ollama ps를 입력하고 Enter 키를 누른다.

ollama ls는 아래처럼 이름·식별자·크기·수정 시각을 보여 준다.

NAME              ID              SIZE      MODIFIED
llama3.2:latest   a80c4f17acd5    2.0 GB    5 minutes ago

ollama ps는 메모리에 올라와 있는 모델만 보여 주므로, 대화를 끝낸 지 5분이 넘었으면 아무것도 나오지 않는다. 모델을 올려 둔 상태라면 아래처럼 나온다.

NAME              ID              SIZE      PROCESSOR    UNTIL
llama3.2:latest   a80c4f17acd5    3.5 GB    100% GPU     4 minutes from now

여기서 눈여겨볼 칸은 PROCESSOR다. 100% GPU는 모델 전체가 그래픽 카드 메모리에 올라갔다는 뜻이고, 100% CPU는 전부 일반 메모리에 올라갔다는 뜻이며, 48%/52% CPU/GPU는 둘로 나뉘어 올라갔다는 뜻이다. GPU 비율이 높을수록 답이 빨리 나온다.

모델은 마지막 요청 뒤 5분 동안 메모리에 남아 있다가 내려간다. 바로 내리려면 ollama stop llama3.2를 실행한다. 다른 프로그램을 돌리려고 메모리를 비워야 할 때 쓴다.

2.2 – 모델 지우고 저장 공간 확보하기

쓰지 않는 모델은 지워서 저장 공간을 되찾는다. 지우는 명령은 ollama rm이다.

  1. 시험 삼아 작은 모델을 하나 더 받는다. ollama pull llama3.2:1b를 입력하고 Enter 키를 누른다.
  2. ollama ls로 두 모델이 모두 있는지 확인한다.
  3. ollama rm llama3.2:1b를 입력하고 Enter 키를 누른다.
  4. ollama ls를 다시 실행해 목록에서 사라졌는지 확인한다.

3번에서 deleted 'llama3.2:1b'가 나오면 파일이 지워진 것이다. 저장 공간은 곧바로 되돌아온다.

모델 이름 뒤의 :1b:latest는 태그(tag)라고 부른다. 태그는 같은 모델의 크기나 판을 구별하는 이름표다. llama3.2:1b는 10억 개 규모, llama3.2:3b는 30억 개 규모를 뜻하고, 숫자가 클수록 답의 품질이 올라가는 대신 메모리를 더 쓴다. 태그를 적지 않으면 :latest가 붙는다.

ollama rm으로 지운 모델 파일은 휴지통을 거치지 않는다. 되돌리려면 ollama pull로 다시 내려받아야 하므로, 회선이 느린 곳에서는 지우기 전에 크기를 확인한다.

2.3 – 클라우드 모델로 큰 모델 쓰기

내 컴퓨터에 담기지 않는 큰 모델은 클라우드 모델로 쓴다. 로컬 모델은 내 컴퓨터에서 계산을 처리하는 모델이고, 클라우드 모델은 Ollama 서버에서 계산을 처리하는 모델이다. 이름 뒤에 -cloud가 붙어 있으면 클라우드 모델이다.

명령어는 로컬 모델과 똑같다. 내 컴퓨터의 Ollama 서버가 요청을 대신 넘겨 주고 답을 받아 오기 때문에, 쓰는 쪽에서는 차이를 느끼지 않는다.

  1. 명령어 창에 ollama signin을 입력하고 Enter 키를 누른다.
  2. 화면에 나온 주소를 브라우저 주소창에 붙여 넣고 Enter 키를 누른다.
  3. 브라우저에서 ollama.com 계정으로 로그인한다. 계정이 없으면 그 화면에서 만든다.
  4. Device Connected Successfully 문구가 나오면 브라우저를 닫는다.
  5. 명령어 창으로 돌아와 ollama run gpt-oss:120b-cloud를 입력하고 Enter 키를 누른다.
  6. >>> 표시가 나오면 양자컴퓨터를 초등학생에게 설명해 줘를 입력하고 Enter 키를 누른다.

gpt-oss:120b-cloud는 1200억 개 규모의 모델이라 일반 노트북 메모리에는 올라가지 않는다. 그런데도 답이 나오는 까닭은 계산이 내 컴퓨터가 아니라 Ollama 서버에서 이뤄지기 때문이다. ollama ls로 보면 이 모델의 SIZE 칸이 비어 있는데, 파일을 내려받지 않았다는 표시다.

쓸 수 있는 클라우드 모델 목록은 https://ollama.com/search?c=cloud에서 확인한다. 모델 이름과 태그는 새 모델이 나올 때마다 바뀌므로, 이 문서의 이름 대신 그 페이지에 적힌 이름을 그대로 쓴다.

로그인하지 않고 클라우드 모델을 실행하면 You need to be signed in to Ollama to run Cloud models 메시지가 나온다. 이때는 ollama signin을 먼저 실행한 다음 같은 명령을 다시 실행한다.

클라우드 기능을 아예 끄고 내 컴퓨터에서만 돌리려면 ~/.ollama/server.json 파일에 아래 내용을 적고 Ollama를 다시 시작한다.

{
  "disable_ollama_cloud": true
}

이 설정을 켜면 클라우드 모델과 웹 검색 기능을 쓸 수 없는 대신, 어떤 요청도 바깥으로 나가지 않는다. 개인 정보나 회사 자료를 다루는 실습에서 고르는 설정이다.

2.4 – 대화형 메뉴와 도구 연결하기

명령을 외우지 않고 목록에서 골라 실행하는 방법도 있다. 명령 이름 없이 ollama만 입력하면 대화형 메뉴가 열린다.

  1. 명령어 창에 ollama만 입력하고 Enter 키를 누른다.
  2. 키와 키로 항목을 옮긴다.
  3. 키를 눌러 쓸 모델을 바꾼다.
  4. Enter 키를 눌러 고른 항목을 실행한다.
  5. Esc 키를 눌러 메뉴를 닫는다.

메뉴에는 모델과 대화하는 항목, 코딩 도구를 여는 항목, 그 밖의 연결 도구를 모아 둔 [More…] 항목이 있다. 예전 판에서는 ollama만 입력하면 도움말만 나왔으므로, 메뉴가 열리지 않으면 버전이 낮은 것이다. ollama --version으로 버전을 확인한다.

코딩 도구는 ollama launch 명령으로 연다. 아래 명령은 Claude Code를 열면서 Ollama 모델을 쓰도록 설정까지 맞춰 준다.

ollama launch claude

claude 자리에 codexopencode를 넣으면 그 도구가 열린다. 어떤 도구를 쓸 수 있는지는 ollama launch만 입력해 목록에서 확인한다.

3 – Modelfile로 나만의 모델 만들기

같은 모델이라도 말투와 답의 길이를 미리 정해 두면 쓸 때마다 지시를 반복하지 않아도 된다. Modelfile은 기본 모델에 설정을 얹어 새 모델을 정의하는 파일이다. 요리에 빗대면 재료는 그대로 두고 조리법만 적어 두는 셈이다.

앞에서 내려받은 llama3.2를 바탕으로, 한국어로만 답하고 문장을 짧게 쓰는 모델을 만든다.

3.1 – Modelfile 파일 만들기

먼저 설정을 적을 파일을 만든다. 확장자가 없는 Modelfile이라는 이름을 쓴다.

  1. "ollama_실습" 폴더를 연다.
  2. 메모장이나 텍스트 편집기로 새 파일을 만든다.
  3. 아래 내용을 그대로 입력한다.
  4. Ctrl+S(macOS는 +S)를 눌러 "Modelfile"이라는 이름으로 저장한다. 이름 뒤에 .txt가 붙지 않게 저장 창의 파일 형식을 [모든 파일]로 바꾼다.
FROM llama3.2

PARAMETER temperature 0.3
PARAMETER num_ctx 4096

SYSTEM """너는 한국어로만 답한다.
한 문장은 40자를 넘기지 않는다.
답은 세 문장 안에서 끝낸다."""

각 줄이 하는 일은 다음과 같다.

  1. FROM llama3.2 — 바탕이 되는 모델을 정한다. 이 줄은 반드시 있어야 한다.
  2. PARAMETER temperature 0.3 — 답의 자유도를 정한다. 기본값은 0.8이고, 낮출수록 같은 질문에 비슷한 답이 나온다.
  3. PARAMETER num_ctx 4096 — 한 번에 기억하는 분량을 4096 토큰으로 정한다.
  4. SYSTEM """...""" — 모델이 답하기 전에 늘 읽는 지시문을 정한다. 여러 줄을 담을 때는 큰따옴표 세 개로 감싼다.

temperature를 0.3으로 낮춘 까닭은 실습에서 같은 질문에 매번 다른 답이 나오면 설정이 반영됐는지 확인하기 어려워서다.

3.2 – 모델로 등록하고 실행하기

작성한 Modelfile을 Ollama에 등록한다. 등록하는 명령은 ollama create이고, 등록이 끝나면 ollama ls 목록에 새 이름이 나타난다.

  1. 명령어 창에서 "ollama_실습" 폴더로 이동한다. Windows는 cd %USERPROFILE%\Desktop\AI실습\ollama_실습, macOS와 Linux는 cd ~/Desktop/AI실습/ollama_실습을 입력하고 Enter 키를 누른다.
  2. ollama create ko-short -f Modelfile을 입력하고 Enter 키를 누른다.
  3. success가 나오면 ollama lsko-short가 목록에 있는지 확인한다.
  4. ollama run ko-short를 입력하고 Enter 키를 누른다.
  5. >>> 표시가 나오면 What is the capital of France?를 입력하고 Enter 키를 누른다.

영어로 물었는데도 한국어로, 세 문장 안에서 답이 나온다. SYSTEM 줄에 적은 지시문을 모델이 답하기 전에 읽기 때문이다. 새 모델을 만들어도 모델 파일 전체가 복사되지는 않는다. ollama lsSIZE 칸이 llama3.2와 같은 2.0GB로 나오는 까닭은, 두 모델이 같은 파일을 나눠 쓰고 설정만 따로 저장하기 때문이다.

2번에서 no such file or directory가 나오면 명령어 창의 현재 폴더가 "ollama_실습"이 아닌 것이다. Windows는 cd, macOS와 Linux는 pwd를 입력해 현재 폴더를 확인하고 1번을 다시 실행한다.

3.3 – 설정을 바꿔 결과 비교하기

설정이 실제로 답을 바꾸는지 직접 확인한다. 같은 질문을 두 모델에 던져 길이와 말투를 비교하는 방식이다.

  1. ollama run llama3.2 "프로그래밍 언어를 하나 추천해 줘"를 입력하고 Enter 키를 누른다. 답을 "ollama_메모.txt"에 붙인다.
  2. ollama run ko-short "프로그래밍 언어를 하나 추천해 줘"를 입력하고 Enter 키를 누른다. 이 답도 메모 파일에 붙인다.
  3. 두 답의 언어와 문장 개수를 비교한다.

llama3.2는 영어로 여러 문단을 쓰고, ko-short는 한국어로 세 문장 안에서 끝낸다. 바탕이 되는 모델은 같으므로, 이 차이는 모두 Modelfile에 적은 SYSTEM 지시문에서 나온 것이다.

만든 모델이 제대로 등록됐는지는 아래 다섯 가지로 가린다.

아래 다섯 가지 가운데 세 개 이상이 맞으면 이 부분을 통과한 것이다. 세 개에 못 미치면 3.1의 Modelfile 내용부터 다시 확인한다.

  1. ollama ls 목록에 ko-short가 있다.
  2. ollama run ko-short로 대화창이 열린다.
  3. 영어로 물어도 한국어로 답한다.
  4. 답이 세 문장을 넘지 않는다.
  5. 같은 질문을 두 번 던졌을 때 답이 크게 달라지지 않는다.

3번과 4번이 맞지 않으면 SYSTEM 줄의 큰따옴표 세 개가 앞뒤로 짝을 이루는지 확인한다. 5번이 맞지 않으면 PARAMETER temperature 값이 0.3으로 저장됐는지 확인한다.

3.4 – 등록된 설정 확인하기

모델에 어떤 설정이 들어갔는지는 ollama show 명령으로 확인한다. 파일을 잃어버렸을 때 설정을 되살리는 데도 쓴다.

  1. 명령어 창에 ollama show --modelfile ko-short를 입력하고 Enter 키를 누른다.
  2. 화면에 나온 내용을 "ollama_메모.txt"에 붙인다.

화면에는 방금 적은 PARAMETERSYSTEM 줄이 그대로 나오고, FROM 줄만 모델 파일의 실제 경로로 바뀌어 나온다. 다른 컴퓨터에 같은 모델을 만들 때는 이 내용에서 FROM 줄만 FROM llama3.2로 되돌려 쓰면 된다.

설정 없이 모델의 크기와 구조만 보려면 --modelfile을 빼고 ollama show ko-short를 실행한다. 매개변수 개수, 양자화 방식, 기본 문맥 길이가 표로 나온다.

4 – REST API와 파이썬으로 연결하기

지금까지는 사람이 명령어 창에 직접 입력했다. 프로그램이 모델에 말을 걸게 하려면 API를 쓴다. REST API는 다른 프로그램이 HTTP 요청으로 모델에 말을 거는 통로다. 웹사이트 주소를 여는 것과 같은 방식으로 요청을 보내고 답을 JSON으로 받는다.

Ollama 서버는 설치할 때부터 http://localhost:11434에서 이 통로를 열어 둔다. localhost는 내 컴퓨터 자신을 가리키는 주소이고, 11434는 Ollama가 쓰는 포트 번호다.

4.1 – curl로 첫 요청 보내기

먼저 명령어 창에서 요청을 한 번 보내 통로가 열려 있는지 확인한다. curl은 명령어 창에서 웹 요청을 보내는 프로그램이며, Windows 10 이상과 macOS, 대부분의 Linux에 기본으로 들어 있다.

  1. 명령어 창에 아래 명령을 입력하고 Enter 키를 누른다.
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "하늘이 파란 이유를 한 문장으로 설명해 줘",
  "stream": false
}'

Windows의 cmd에서는 작은따옴표가 통하지 않으므로, PowerShell을 열고 아래 명령을 대신 쓴다.

(Invoke-WebRequest -Method POST -Uri http://localhost:11434/api/generate -Body '{"model":"llama3.2","prompt":"하늘이 파란 이유를 한 문장으로 설명해 줘","stream":false}').Content | ConvertFrom-Json

답은 아래처럼 JSON 한 덩어리로 돌아온다. 지면을 아끼려고 뒷부분은 줄였다.

{
  "model": "llama3.2",
  "created_at": "2026-08-04T02:11:07.414671Z",
  "response": "햇빛이 대기의 공기 입자와 부딪힐 때 파란색 빛이 가장 많이 흩어지기 때문이다.",
  "done": true,
  "done_reason": "stop",
  "eval_count": 38
}

읽을 곳은 response 칸이다. 여기에 모델이 만든 문장이 들어 있다. "stream": false를 넣었기 때문에 답이 완성된 뒤 한 번에 돌아왔고, 이 값을 빼면 글자가 만들어지는 대로 여러 조각이 나뉘어 돌아온다. 처음 다룰 때는 false로 두는 편이 다루기 쉽다.

Connection refused가 나오면 Ollama 서버가 돌지 않는 것이다. Windows와 macOS는 Ollama 앱을 실행하고, Linux는 sudo systemctl start ollama를 실행한 다음 같은 요청을 다시 보낸다.

4.2 – 대화를 이어 가는 요청 보내기

/api/generate는 질문 하나에 답 하나를 돌려준다. 앞뒤 대화를 이어 가려면 /api/chat을 쓴다. 두 통로의 차이는 보내는 내용에 있다. /api/generateprompt에 문장 하나를 담고, /api/chatmessages에 대화 내역을 순서대로 담는다.

  1. 명령어 창에 아래 명령을 입력하고 Enter 키를 누른다.
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    { "role": "user", "content": "내 이름은 망고다." },
    { "role": "assistant", "content": "반갑다, 망고." },
    { "role": "user", "content": "내 이름이 뭐라고 했지?" }
  ],
  "stream": false
}'

답의 message.content 칸에 망고가 들어 있으면 대화 내역이 제대로 전달된 것이다.

role은 그 말을 누가 했는지 알리는 값이다. user는 사람, assistant는 모델, system은 모델이 답하기 전에 읽는 지시문을 뜻한다. Ollama 서버는 앞선 대화를 저장하지 않으므로, 대화를 이어 가려면 요청을 보낼 때마다 지금까지의 내역을 전부 함께 보내야 한다. 이 점이 명령어 창의 대화와 다른 부분이다.

대화 내역이 길어지면 num_ctx 값에 걸린다. 기본값은 4096 토큰이고, 한국어는 한 글자가 대체로 1~2 토큰이므로 2000~4000자쯤에서 앞부분이 밀려난다. 더 담으려면 요청에 "options": { "num_ctx": 8192 }를 넣는다.

4.3 – 파이썬 스크립트로 만들기

curl 명령으로 확인한 요청을 파이썬 코드로 옮긴다. Ollama는 공식 파이썬 라이브러리를 내놓고 있어서, JSON을 직접 만들지 않아도 된다.

  1. 명령어 창에 pip install ollama를 입력하고 Enter 키를 누른다.
  2. "ollama_실습" 폴더에 텍스트 편집기로 새 파일을 만든다.
  3. 아래 코드를 그대로 입력한다.
  4. "ask.py"라는 이름으로 저장한다.
  5. 명령어 창에서 python ask.py를 입력하고 Enter 키를 누른다. macOS와 Linux에서 실행되지 않으면 python3 ask.py로 다시 실행한다.
from ollama import Client

client = Client()

messages = [
    {"role": "user", "content": "재귀 함수를 초보자에게 세 문장으로 설명해 줘"},
]

for part in client.chat("llama3.2", messages=messages, stream=True):
    print(part["message"]["content"], end="", flush=True)

print()

실행하면 답이 한 글자씩 화면에 이어져 나온다. stream=True로 두어 조각이 도착하는 대로 바로 출력하기 때문이다. end=""는 조각마다 줄을 바꾸지 않게 하고, flush=True는 화면에 바로 내보내게 한다. 마지막 print()는 답이 끝난 뒤 줄을 한 번 바꾼다.

3장에서 만든 모델을 쓰려면 코드에서 모델 이름만 바꾼다. client.chat("llama3.2", ...)client.chat("ko-short", ...)로 고치고 다시 실행하면, 답이 한국어 세 문장으로 짧아진다.

클라우드 모델도 같은 코드로 쓴다. 모델 이름 자리에 gpt-oss:120b-cloud를 넣으면 된다. 먼저 ollama pull gpt-oss:120b-cloud로 모델을 등록해 두고, ollama signin으로 로그인한 상태여야 한다.

4.4 – 정해진 형식으로 답 받기

프로그램이 답을 이어서 처리하려면 문장이 아니라 정해진 형식으로 받아야 한다. format 값에 원하는 구조를 적어 보내면, 모델이 그 구조에 맞는 JSON으로 답한다.

  1. "ollama_실습" 폴더에 새 파일을 만든다.
  2. 아래 코드를 그대로 입력한다.
  3. "book.py"라는 이름으로 저장한다.
  4. 명령어 창에서 python book.py를 입력하고 Enter 키를 누른다.
import json
from ollama import Client

client = Client()

schema = {
    "type": "object",
    "properties": {
        "title": {"type": "string"},
        "author": {"type": "string"},
        "year": {"type": "integer"},
    },
    "required": ["title", "author", "year"],
}

res = client.chat(
    "llama3.2",
    messages=[{"role": "user", "content": "소설 '토지'의 제목, 작가, 출간 연도를 알려 줘"}],
    format=schema,
)

data = json.loads(res["message"]["content"])
print(data["author"])

화면에는 작가 이름만 출력된다. format에 넘긴 구조가 title·author·year 세 칸을 요구하므로, 모델이 설명 문장 대신 그 세 칸만 담은 JSON을 만든다. json.loads는 그 JSON 글자를 파이썬이 다룰 수 있는 값으로 바꾸는 함수다.

형식을 정해 두면 답에서 원하는 값을 꺼내 쓰기 쉬워진다. 예를 들어 책 100권의 정보를 정리한다면, 이 코드의 질문 부분만 바꿔 반복 실행한 다음 data["author"] 값을 표에 채워 넣으면 된다.

작은 모델은 형식을 어기고 설명 문장을 섞어 답할 때가 있다. 이때는 json.loads에서 오류가 난다. 질문 안에 “JSON으로만 답한다”는 문장을 함께 넣거나, 더 큰 모델이나 클라우드 모델로 바꿔 실행한다.

댓글 남기기