별채가 아니라 방하나만 빌리기(docker vs venv)
- Docker 말고도 격리하는 법이 있다
지난 편까지 본인 ATOM에는 Open WebUI랑 Ollama가 깔려 있어요. 폰에서도 접속 가능하고, 재부팅돼도 알아서 살아납니다. 텍스트로 대화하는 ChatGPT 비슷한 환경은 완성된 셈이죠.
그런데 이번엔 좀 다른 걸 해보고 싶었어요. 이미지 생성.
2편에서 한 번 해봤었죠. JupyterLab에서 파이썬 코드 직접 짜서 보라색 그림 한 장 뽑은 거. 그건 “되는지 확인”하는 데 의의가 있었어요. 이번엔 본격적으로 “이미지 생성을 일상적으로 쓸 환경” 을 만들어 보려고 합니다. 그 도구가 ComfyUI 예요.
오늘 글이 좀 길어요. 6~7분 정도 잡고 읽어주세요.
ComfyUI는 또 뭔가요?
간단히 말하면, 이미지 생성용 노드 기반 GUI예요. 박스 여러 개를 줄로 연결해서 “여기서 모델 불러오고, 여기서 텍스트 받고, 여기서 그림 생성하고…” 하는 시각적 파이프라인을 짜는 도구.
업무 자동화 도구인 Make(예전 Integromat)랑 n8n 써본 분이라면 화면 보자마자 “아, 그거랑 같은 가족이구나” 하실 거예요. 패러다임이 똑같아요. 데이터가 박스 사이를 흘러다니면서 변형돼서 결과물이 나오는 구조.
| 도구 | 용도 |
|---|---|
| Make / n8n / Zapier | 웹 자동화 (앱끼리 연결) |
| ComfyUI | AI 이미지 생성 파이프라인 |
| Blender (Geometry Nodes) | 3D 모델링 |
| TouchDesigner | 인터랙티브 비주얼 |
한 번 익혀두면 다른 노드 기반 도구도 자연스럽게 손에 잡혀요.
그리고 결정적으로, 로컬에서 돌아가요. 본인 ATOM에서 무료로, 의뢰인 자료 같은 거 외부 안 보내고. 6편에서 텍스트로 했던 그걸 이번엔 이미지로 하는 거예요.
두 번째 공포: Docker로 안 깐다고?
설치를 시작하기 전에 한 가지 사실에서 멈췄어요.
이번엔 Docker로 안 까는 거였어요.
5편에서 Docker 컨테이너 사고방식을 한참 배웠잖아요. “별채를 짓는 셈” 이라고. 그래서 모든 게 Docker로 깔리는 줄 알았는데, ComfyUI 설치 가이드를 보니까 python3 -m venv ... 라는 게 등장합니다.
“이건 뭐고, 왜 Docker가 아닌 거지?”
답은 격리에도 여러 종류가 있다는 거였어요. venv (가상환경, virtual environment)는 Docker보다 가벼운 격리예요.
Docker = 별채를 짓기 (운영체제 통째로 감쌈, 무겁고 안전)
venv = 방 하나만 따로 쓰기 (파이썬 패키지만 격리, 가볍고 빠름)
비유로 풀면 이래요. 본인 집(=ATOM)에서 일하는데,
- 별채(Docker): 따로 건물 하나 더 짓고 거기서 일함. 본채에 영향 0. 다만 짓는 데 시간 들고, 가는 데 시간 들고, 짐 정리도 별도.
- 방 하나(venv): 본채 안의 방 하나를 작업실로 정함. 가벼움. 다만 “본채 자체에 문제가 생기면” 영향받을 수 있음.
이미지 생성 같은 단순한 파이썬 작업엔 굳이 별채까지 안 지어도 돼요. 방 하나면 충분해요. 게다가 GPU 직접 접근도 venv가 더 자연스러워요. Docker로 GPU 쓰려면 옵션 챙겨줘야 하는데, venv는 그냥 그 자리에 있는 GPU를 바로 씁니다.
venv가 왜 필요한 거였더라
좀 더 깊이 보면, venv가 풀어주는 문제가 있어요.
파이썬 패키지(예: PyTorch)는 버전이 정말 빠르게 바뀝니다. 그런데 어떤 프로젝트는 PyTorch 2.3을 정확히 요구하고, 다른 프로젝트는 PyTorch 2.5만 받음. 한 컴퓨터에서 둘 다 돌리려면?
윈도우 식으로 그냥 다 깔면 충돌해요. 마지막에 깐 게 이긴다는 식이라서, A 프로젝트 깔고 → B 프로젝트 깔면 → A가 망가집니다. AI 입문자가 가장 좌절하는 지점이 여기예요.
venv는 프로젝트별로 자기 전용 파이썬 공간을 따로 갖는 방식으로 풀어요.
ATOM 시스템 파이썬
│
├─ comfyui-env/ ← 가상환경 1: PyTorch 2.5 + ComfyUI 패키지들
│
├─ other-env/ ← 가상환경 2: PyTorch 2.3 + 다른 도구들
│
└─ another-env/ ← 가상환경 3: 또 다른 조합
각 가상환경은 자기만의 패키지 목록을 가져요. 서로 안 부딪쳐요. 망가져도 그 폴더만 지우면 됩니다. 시스템 파이썬은 무사.
5편 Docker가 OS 단위 격리였다면, venv는 파이썬 단위 격리예요. 같은 “격리” 패러다임의 다른 척도라고 보면 돼요.
작업실 만들기 - 5줄의 의미
ComfyUI 설치는 결국 다음 5줄로 시작합니다.
mkdir -p ~/ai-projects
cd ~/ai-projects
python3 -m venv comfyui-env
source comfyui-env/bin/activate
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu130
문서로 보면 그냥 5줄인데, 의미를 풀어보면 작업실 차리는 단계랑 정확히 일치해요.
| 줄 | 의미 | 비유 |
|---|---|---|
mkdir -p ~/ai-projects | 폴더 만들기 | 빈 방 하나 잡기 |
cd ~/ai-projects | 그 폴더로 이동 | 그 방으로 들어가기 |
python3 -m venv comfyui-env | 가상환경 생성 | 작은 공방 차리기 |
source comfyui-env/bin/activate | 가상환경 진입 | 공방 안으로 들어가기 |
pip3 install torch torchvision ... | PyTorch 설치 | 필수 공구 사들고 옴 |
그리고 마지막 줄에 슬쩍 들어있는 옵션. --index-url https://download.pytorch.org/whl/cu130. 이게 핵심이에요.
기본 PyTorch 저장소(PyPI)에서 받지 말고, NVIDIA가 CUDA 13.0용으로 만든 특별 빌드 저장소에서 받으라는 지정이에요. 본인 ATOM의 GB10 칩에 맞는 버전.
만약 이걸 빠뜨리고 일반 PyTorch를 깔면? 깔리긴 깔려요. 그런데 GPU를 못 써요. 그림 한 장 만드는 데 5분씩 걸려요. CPU로 돌리는 거니까. 3편에서 배운 “Tensor Core 가속” 이 안 걸린 상태예요.
코드 한 줄에 옵션 하나 빼먹은 게 성능 수십 배 차이를 만들어요. 계약서 단서 한 문장 빼먹으면 권리가 송두리째 날아가는 거랑 비슷해요.
변호사스럽게 짚어둘 두 가지
새 도구를 만질 때 변호사 본능적으로 “이거 잘못되면 어떻게 되돌리지?” 부터 생각하게 돼요. 위의 5줄에서도 그런 시각으로 짚어둘 게 두 가지 있어요.
1. 여러 줄 한 번에 붙여넣을 때
터미널은 한 줄이 실패해도 멈추지 않고 다음 줄을 그냥 이어서 실행합니다. 5줄 중 1번째 줄이 실패하면 2~5번째 줄은 잘못된 상태에서 진행돼버려요. 그러면 한참 뒤에 “어 이게 왜 여기 있지?” 하고 발견하게 되죠.
습관 하나만 들이면 돼요. 붙여넣고 엔터 친 직후 빨간색 에러 메시지가 흘러가지 않는지 한 번 훑어보기. 그게 없으면 잘 진행된 거고, 있으면 즉시 멈춰서 원인 파악. 변호사가 계약서 한 줄 한 줄에 검토 도장 찍듯이.
2. 정리할 때 알아둘 명령어 - rm -rf
가상환경을 잘못 만들었거나, 다시 시작하고 싶을 때 폴더를 지워야 할 때가 있어요. 그때 쓰는 명령어가 rm -rf <폴더> 인데, 이게 강력해요.
rm= remove (삭제)-r= recursive (폴더 안의 내용까지 다)-f= force (확인 안 묻고 강제로)
휴지통 안 거치고 영구 삭제예요. 그래서 인터넷에 유명한 격언이 하나 있어요.
“
rm -rf /절대 하지 마세요. 시스템 통째로 날아가요.”
/ 는 시스템 최상위 폴더예요. 거기 안에 있는 모든 걸 지우라는 명령이 됩니다. 매번 rm -rf 칠 때 경로를 두 번 확인하는 습관이 권장돼요. rm -rf ~/comfyui-env 처럼 경로가 명확하면 안전합니다.
본채와 별채와 방의 위치 정리
설치가 끝나고 보면 이런 구조가 만들어져요.
/home/rocklassic/ ← 본인의 홈 (= "본채")
│
├── ai-projects/ ← 작업 폴더
│ ├── comfyui-env/ ← venv ("방")
│ │ ├── bin/ 파이썬, pip
│ │ └── lib/ PyTorch 등 격리 설치된 패키지
│ │
│ └── ComfyUI/ ← 앱 본체 (git으로 받아옴)
│ ├── main.py
│ ├── models/ 모델 저장소 (venv 밖!)
│ │ ├── checkpoints/ ← SD/SDXL/FLUX 본체
│ │ ├── loras/ ← LoRA들
│ │ ├── vae/
│ │ └── ...
│ └── output/ 생성된 이미지 자동 저장
│
├── .cache/huggingface/ ← 2편 때 SDXL 받았던 곳
│
└── /var/lib/docker/volumes/ ← 6편 별채 (Docker 볼륨)
└── open-webui-ollama/_data/ Ollama가 받은 모델들
여기서 변호사스럽게 한 번 짚어둘 만한 게 있어요.
venv랑 모델은 분리돼 있어요.
venv(=comfyui-env/)는 파이썬 패키지만 들어가요. 진짜 무거운 자산인 모델들(GB 단위)은 ComfyUI/models/ 안에 따로 있어요. 둘은 완전히 별개. 그래서:
- venv가 망가져도 → 모델은 안전
- 가상환경 새로 만들어도 → 모델은 그대로 재사용 가능
- ComfyUI 재설치해도 → models 폴더만 보존하면 모델 안 받아도 됨
이게 5편에서 배운 “컨테이너 ≠ 데이터” 와 같은 사고방식이에요. 도구는 가벼우면 좋고, 데이터는 분리해서 영구 보관. 패러다임은 똑같고 구현 방법만 다른 거.
인프라가 깔린 책상
여기까지 와서 본인 ATOM이 어떤 상태인지 한 번 정리해 볼게요.
- 🤖 Open WebUI + Ollama: Docker 컨테이너, 24/7 백그라운드 작동 (텍스트 채팅)
- 🎨 ComfyUI 환경: venv로 격리된 파이썬 작업실, 필요할 때만 실행 (이미지 생성, 다음 편에서)
- 📱 Tailscale: 폰에서 어디서든 접속 가능
- 💾 모델 저장소들: 텍스트 모델은 Docker 볼륨, 이미지 모델은 ComfyUI 폴더에 분리 보관
이게 개인 AI 인프라의 모습이에요. 클라우드 회사들이 월 수십만 원에 임대해주는 그것. 본인은 1리터 우유팩 크기 머신 위에 그걸 만들고 있는 셈이에요.
그리고 다음 편엔, 이 환경 위에서 진짜로 그림 한 장을 만들어볼 거예요. 보라색 우주 병 한 마리가 본인 ATOM에서 태어나는 순간을 같이 봐주세요.
오늘의 정리
- ✅ venv = 방 하나만 빌리는 격리. Docker(별채)보다 가볍고, 파이썬 작업에 적합
- ✅
python3 -m venv 이름으로 만들고,source 이름/bin/activate로 들어가고,deactivate로 나옴 - ✅ 격리 패러다임은 같지만 척도가 다름: OS 단위(Docker) vs 파이썬 단위(venv)
- ✅ PyTorch는 CUDA 13.0용 특별 빌드로 받아야 GPU 가속됨 -
--index-url옵션 - ✅ 여러 줄 명령어 붙여넣을 땐 빨간 에러 메시지 흘려보내지 않기
- ✅ venv와 모델은 분리되어 있음. 도구는 가볍게, 데이터는 영구 보관 - 5편과 같은 사고방식
읽어주셔서 감사합니다.