gpt-oss와 폰에서 부르는 ChatGPT
— AI 두뇌 넣기: gpt-oss와 폰에서 부르는 ChatGPT
지난 편에서 ChatGPT 비슷한 화면까지 만들었어요. Docker로 Open WebUI 컨테이너를 띄우고, 브라우저에서 localhost:8080 으로 접속해서 회원가입까지 했죠. 그런데 끝낼 때 한 가지가 빠져 있다고 했어요.
“두뇌가 없어요.”
오늘은 그 빈 ChatGPT에 AI 두뇌를 넣고, 진짜로 써먹기 시작하는 이야기입니다.
모델 다운로드 - 그리고 gpt-oss라는 이름의 충격
화면 왼쪽 위에 “Select a model” 드롭다운이 있었어요. 거기서 첫 모델을 받아야 합니다. 첫 모델로는 gpt-oss:20b 를 골랐어요. 가장 무난하면서도 OpenAI의 진짜 모델이라는 점이 끌렸거든요.
검색창에 입력하고 “Pull ‘gpt-oss:20b’ from Ollama.com” 버튼 누르니까 다운로드 시작. 약 12GB 짜리라 한 10분 걸렸어요.
그런데 이 모델 이름이 좀 신경 쓰였어요. gpt-oss - GPT 라잖아요. GPT는 ChatGPT의 그 GPT 아닌가? 그럼 이거 OpenAI 모델인가? 그럼 OpenAI가 자기 모델을 풀었다는 거고, 그걸 Ollama가 받게 해주는 거고…
“잠깐, Ollama는 OpenAI 자회사인가?”
Ollama의 정체 - Spotify 같은 거였다
답: Ollama는 OpenAI랑 아무 관계 없어요. 완전히 다른 회사예요.
찾아보니 Ollama는,
- 미국 팔로 알토의 작은 스타트업 (직원 약 51명)
- 창업자: Jeffrey Morgan, Michael Chiang
- 2023년 설립, Y Combinator 출신
여기서 진짜 흥미로운 게 있어요. 창업자들이 Docker 출신이에요.
“잠깐. Docker가 회사예요?”
이게 또 헷갈리는 부분이에요. 풀어드릴게요. Docker는 도구이자 회사예요. 둘 다 맞아요.
| 의미 | |
|---|---|
| Docker (도구) | 컨테이너를 만들고 관리하는 소프트웨어. 5편에서 본인이 쓴 그거 |
| Docker, Inc. (회사) | 그 도구를 만든 미국 회사. 본사: 캘리포니아 팔로 알토 |
스팀(Steam)이라는 게임 플랫폼을 밸브(Valve)가 만들었듯이, Docker라는 도구는 Docker, Inc. 라는 회사가 만든 거예요. 다만 도구랑 회사 이름이 같아서 헷갈려요. 영어권 사람도 헷갈려해요.
그러면 Ollama 창업자들 이야기로 돌아가 봅시다. 두 사람은 원래 Kitematic 이라는 회사를 차렸는데, 그걸 Docker, Inc.가 인수했어요. 그래서 자동으로 Docker, Inc. 직원이 됐고, 거기서 일하다가 나와서 Ollama를 차린 거예요. 참고로 그 Kitematic은 결국 Docker Desktop의 전신이 됐습니다. 윈도우나 맥에서 Docker 쓸 때 보는 그 친숙한 화면.
이게 왜 흥미로운 이야기였냐면, Ollama 명령어가 Docker 명령어랑 닮은 거예요.
Docker 도구: docker pull ubuntu:22.04
Ollama 도구: ollama pull llama3.2:7b
↑
형식이 똑같음
우연이 아니에요. Ollama 창업자들이 Docker, Inc.에서 일하면서 익힌 사고방식을 그대로 AI 모델에 적용한 거예요. “AI 모델을 Docker 이미지처럼 다루면 어떨까?” 라는 발상.
그래서 본인이 Docker 한 번 익혀두면 Ollama 명령어가 자연스럽게 손에 잡혀요. 5편에서 본인이 Docker 명령어들 익힌 게 이미 Ollama 절반은 익혀둔 거나 마찬가지였던 거예요.
그럼 Ollama는 뭘 하는 회사냐. 모델을 쉽게 쓰게 해주는 도구 만드는 회사예요. 모델 자체는 안 만들어요.
비유로 풀면 이래요.
| 플랫폼 | 만든 회사 | 그 안에 있는 콘텐츠 |
|---|---|---|
| Steam | Valve | 수많은 게임사의 게임들 |
| Spotify | Spotify AB | 모든 음반사의 음악들 |
| Docker Hub | Docker, Inc. | 수십만 명이 올린 이미지들 |
| Ollama Library | Ollama Inc. | 모든 AI 회사의 오픈 모델들 |
그러니까 Ollama는 AI 모델 배급 플랫폼이에요. 그 안에 들어있는 건,
- Meta가 만든 Llama
- Google이 만든 Gemma
- Alibaba가 만든 Qwen (한국어 정말 잘함)
- DeepSeek이 만든 DeepSeek
- OpenAI가 만든 gpt-oss ⭐ ← 본인이 받은 거
- Mistral, Microsoft Phi, NVIDIA Nemotron, 기타 등등
음반 비유로 한 번 더 말하면, OpenAI라는 가수가 음반(gpt-oss)을 발매했고, 스포티파이(Ollama)가 그걸 본인 앱에서 스트리밍 가능하게 해준 셈입니다.
“오, OpenAI가 자기 모델을 풀었다고?”
네. 2025년 8월에 OpenAI가 입장을 바꿔서 일부 모델 가중치를 공개했어요. 이름이 gpt-oss 인 이유는 GPT + Open Source Software 의 줄임말이에요. 이전엔 폐쇄적이었지만, Meta의 Llama랑 DeepSeek 같은 오픈 모델들에 밀리지 않으려는 전략적 결정이었다고 해요.
그래서 본인은 지금 진짜 OpenAI가 만든 모델을, 본인 책상 위에서, 인터넷 없이, 무료로 돌리고 있는 거예요. 이게 1년 전엔 상상도 못 했을 일입니다.
모델은 도대체 어디에 있는 건가
모델을 받고 나니까 또 다음 질문이 떠올랐어요.
“이 12GB짜리 모델은 지금 어디 있지? 메모리? 디스크?”
생각보다 중요한 질문이었어요. 답은,
디스크(SSD)에 영구 저장되어 있어요. 메모리에 있는 게 아니에요.
정확히는 5편에서 만든 그 볼륨 안에 있어요. 컨테이너 만들 때 줬던 옵션은 아래와 같아요.
-v open-webui-ollama:/root/.ollama
이 옵션이 만들어둔 볼륨 안에 모델 파일들이 들어 있는 거예요. 실제 위치는 본인 SSD의 아래 경로입니다.
/var/lib/docker/volumes/open-webui-ollama/_data/
그럼 메모리는 언제 쓰냐? 답은 모델이 세 가지 상태로 존재한다는 거였어요.
상태 1: 디스크에만 있음 (받기만 한 상태)
↓ 본인이 채팅 시작하면
상태 2: 디스크 → 메모리로 로드 ← 첫 응답이 5~10초 느린 이유
↓ 채팅 끝나고 한참 안 쓰면 (보통 5분)
상태 3: 메모리에서 자동 언로드 (디스크엔 그대로)
↓ 다시 채팅 시작하면 → 상태 2로 돌아감
비유
- 디스크 = 책장에 꽂혀있는 책
- 메모리에 로드 = 책상에 펴놓은 책 (바로 읽을 수 있음)
- 자동 언로드 = 책 다시 책장에 꽂음 (책상 비워짐, 책은 그대로 있음)
받기는 한 번만 받으면 되는데, 책상에 펴는 데(=메모리 로드) 시간이 좀 걸려요. 그래서 첫 응답이 5~10초 느렸던 거예요. 두 번째 메시지부터는 거의 즉시 응답이 시작됐고요.
그리고 여기서 1편에서 처음 들었던 “통합 메모리(unified memory)” 가 다시 등장합니다. ATOM의 GB10 칩은 CPU랑 GPU가 같은 128GB 메모리 풀을 공유해요. 일반적인 GPU 시스템은 모델을 CPU 메모리에서 GPU 메모리로 옮겨야 하는데, ATOM은 그럴 필요가 없어요. 둘이 같은 책상을 쓰니까요. 1편에서 추상적이었던 개념이 6편에 와서 진짜로 손에 잡혔습니다.
첫 채팅
자, 모델까지 로드 끝. 채팅창에 첫 질문을 던졌어요.
오늘 저녁 메뉴 추천해줘
엔터를 누르자 5초 정도 정적이 흘렀어요 (모델 메모리 로드). 그리고 문장이 한 자 한 자 흘러나오기 시작했습니다.
“오늘 저녁 메뉴로는 …”
별 거 아닌 평범한 답이었는데, 그 순간이 신기했어요. 인터넷 끊겨도 작동하고, 본인 회사 비밀 얘기 다 해도 외부로 안 나가고, 토큰당 과금 없고, 무제한이고. 본인 컴퓨터 안에서 도는 ChatGPT 였어요.
응답 속도도 인상적이었어요. 화면 아래에 작은 정보가 떴는데 40~60 tok/s 정도. 사람이 읽는 속도보다 훨씬 빠릅니다.
두 번째 메시지를 보내니 이번엔 거의 즉시 응답이 시작됐어요. 모델이 이미 메모리에 있어서 그런 거였죠. 위에서 배운 그 “3가지 상태” 가 진짜로 작동하더라고요.
폰에서도 됐다 - 4편의 진짜 결실
여기까지 와서 4편 셋업의 진가가 발휘됐어요.
4편에서 Tailscale 깔아둔 거 기억나시죠? 그게 본인 폰이랑 ATOM을 마치 같은 네트워크에 있는 것처럼 묶어주는 도구라고 했죠. 그게 이번에 빛을 발했습니다.
폰에서:
- Tailscale 앱 ON
- 브라우저 열고:
http://[ATOM의 Tailscale IP]:8080 - 같은 계정으로 로그인
진짜로 됐어요. 폰 화면에 ChatGPT 비슷한 인터페이스가 떴고, 입력해보니 집에 있는 ATOM이 답해줬어요. 사무실 책상에서, 출퇴근 지하철에서, 카페에서 - 어디서든.
그리고 더 좋은 게 있었어요. PWA(Progressive Web App) 라는 기술 덕분에, 폰 브라우저에서 “홈 화면에 추가” 누르면 앱처럼 아이콘이 박혀요. 누르면 ChatGPT 앱이랑 구분 안 가는 형태로 떠요.
홈 화면을 보니까 ChatGPT 앱, Claude 앱 옆에 본인이 만든 “Open WebUI” 가 놓여 있더라고요. 다만 그 셋이랑 결정적으로 달라요. 다른 둘은 외부 서버에 본인 데이터를 보내야 하지만, 마지막 하나는 본인 서버에만 접속해요. 의뢰인 정보 다뤄도 마음 편한 그 한 칸.
이게 처음 ATOM을 산 이유였습니다.
청소는 어떻게? - 세 층의 구조
새 도구를 깔고 나면 변호사로서 자연스럽게 드는 생각이 있어요. “이거 만약에 잘못되면 어떻게 되돌리지?” 보통 IT 가이드는 “롤백” 명령어를 같이 알려주잖아요. 그래서 일단 그 부분을 봤어요.
근데 가만히 보니까, 그건 “Open WebUI를 완전히 지우고 없던 일로 만들겠다” 할 때 쓰는 거였어요. 본인은 잘 만든 걸 계속 쓰고 싶은 거고요. 그래서 진짜 알아야 할 건 “어떻게 부분 부분을 정리하느냐” 였어요.
여기서 5편에서 배운 Docker의 3층 구조 가 다시 중요해졌어요.
┌─────────────────────────────────────┐
│ 1. 이미지 (Image) │
│ 설치 파일 (= 게임 CD) │
│ 예: ghcr.io/.../:ollama │
├─────────────────────────────────────┤
│ 2. 컨테이너 (Container) │
│ 실행된 인스턴스 (= 게임 실행) │
│ 예: open-webui │
├─────────────────────────────────────┤
│ 3. 볼륨 (Volume) ⭐ │
│ 데이터 저장소 (= 외장하드) │
│ 예: open-webui-ollama (모델들) │
│ 컨테이너 지워도 살아남음! │
└─────────────────────────────────────┘
각 층마다 따로 지워야 해요. 그리고 모델은 볼륨에 있어요.
| 원하는 것 | 명령어 | 결과 |
|---|---|---|
| 한 모델만 지우기 | ollama rm 모델이름 | 모델 크기만 해방 |
| 컨테이너 잠깐 끄기 | docker stop open-webui | 거의 0 (그냥 멈춤) |
| 컨테이너 삭제 | docker rm open-webui | 거의 0 (볼륨은 살아남음) |
| 이미지 삭제 | docker rmi ... | ~5GB |
| 볼륨 삭제 | docker volume rm ... | 모델들 다 |
여기서 변호사 본능적으로 한 가지가 신경 쓰였어요. 그래서 직접 한 번 확인했습니다.
“docker rm 컨테이너 한다고 모델까지 같이 사라지는 건 아니지?”
답: 사라지지 않아요. Docker가 일부러 그렇게 설계돼 있어요. 본인이 30분 기다려 받은 모델이 컨테이너 삭제 한 번에 같이 사라지면 끔찍하잖아요. 그래서 컨테이너랑 데이터는 별개예요. 사라지길 원하면 명시적으로 docker volume rm 으로 따로 지워야 합니다.
이게 또 변호사스럽게 생각하면 너무 자연스러워요. 계약을 해지해도 그동안 쌓인 자료는 따로 남는 거랑 비슷해요. 자동으로 다 사라지면 안 되죠. 의도적으로 분리해야 합니다.
한 가지 보너스 - 자동 재시작
마지막으로 작은 팁 하나. 본인이 만든 컨테이너는 ATOM 재부팅하면 자동으로 다시 안 켜져요. 다음에 켰을 때 한 번 더 docker start open-webui 해야 합니다.
이게 매번 귀찮을 거 같아서, 컨테이너 재생성할 때 한 줄 추가했어요. --restart always.
docker run -d -p 8080:8080 --gpus=all \
--restart always \
-v open-webui:/app/backend/data \
-v open-webui-ollama:/root/.ollama \
--name open-webui ghcr.io/open-webui/open-webui:ollama
이 한 줄의 뜻은,
“이 컨테이너는 죽어도 계속 살려줘. ATOM 재부팅해도 자동으로 켜줘.”
이러면 앞으로 ATOM이 재부팅돼도 본인이 아무것도 안 해도 컨테이너가 알아서 일어나요. 데이터(볼륨)는 그대로 보존되고요. 외출 중에 폰으로 접속할 때 항상 준비된 상태이려면 이게 필요해요.
기존 컨테이너 지우고 다시 만들었는데, 볼륨은 그대로 살아남으니까 안전했어요. 새 컨테이너가 같은 볼륨 이름으로 연결하면 모델이랑 대화 기록이 다 그대로 보존됩니다. 위에서 배운 3층 구조의 직접적인 응용이었어요.
마치며
5편이랑 합치면 결국 한 문장짜리 결과예요.
“본인 컴퓨터 위에 ChatGPT 비슷한 걸 띄우고, 거기에 두뇌를 넣고, 폰에서도 접속하게 만들었다.”
그게 다입니다. 그런데 6편에서 새로 만난 개념도 적지 않아요.
- ✅ Ollama의 정체 - OpenAI 자회사가 아니라, Docker, Inc. 출신이 만든 별개 회사 (Spotify 같은 모델 배급 플랫폼)
- ✅ Docker는 도구이자 회사 - 도구 이름과 회사 이름이 같아서 헷갈림. Steam-Valve 관계랑 비슷
- ✅ gpt-oss의 진실 - OpenAI가 2025년에 푼 진짜 모델 (GPT + Open Source Software)
- ✅ 모델의 3가지 상태 - 디스크 / 메모리 로드 / 자동 언로드
- ✅ Tailscale + PWA - 폰에서도 본인 AI 호출, 앱처럼 박힌 아이콘
- ✅ 컨테이너 ≠ 데이터 - 컨테이너 지워도 모델은 살아남음 (의도된 안전 장치)
- ✅
--restart always- 컨테이너 자동 재시작으로 외출 중 항상 준비
가장 강조하고 싶은 한 마디를 고른다면 이거예요.
“오늘 만든 건 단순한 ‘나만의 ChatGPT’가 아니라, 데이터 통제권이 본인 손에 있는 ChatGPT입니다.”
읽어주셔서 감사합니다. 🙂
