7화 2026-05-30

별채가 아니라 방하나만 빌리기(docker vs venv)

- Docker 말고도 격리하는 법이 있다

지난 편까지 본인 ATOM에는 Open WebUI랑 Ollama가 깔려 있어요. 폰에서도 접속 가능하고, 재부팅돼도 알아서 살아납니다. 텍스트로 대화하는 ChatGPT 비슷한 환경은 완성된 셈이죠.

그런데 이번엔 좀 다른 걸 해보고 싶었어요. 이미지 생성.

2편에서 한 번 해봤었죠. JupyterLab에서 파이썬 코드 직접 짜서 보라색 그림 한 장 뽑은 거. 그건 “되는지 확인”하는 데 의의가 있었어요. 이번엔 본격적으로 “이미지 생성을 일상적으로 쓸 환경” 을 만들어 보려고 합니다. 그 도구가 ComfyUI 예요.

오늘 글이 좀 길어요. 6~7분 정도 잡고 읽어주세요.


ComfyUI는 또 뭔가요?

간단히 말하면, 이미지 생성용 노드 기반 GUI예요. 박스 여러 개를 줄로 연결해서 “여기서 모델 불러오고, 여기서 텍스트 받고, 여기서 그림 생성하고…” 하는 시각적 파이프라인을 짜는 도구.

업무 자동화 도구인 Make(예전 Integromat)랑 n8n 써본 분이라면 화면 보자마자 “아, 그거랑 같은 가족이구나” 하실 거예요. 패러다임이 똑같아요. 데이터가 박스 사이를 흘러다니면서 변형돼서 결과물이 나오는 구조.

도구용도
Make / n8n / Zapier웹 자동화 (앱끼리 연결)
ComfyUIAI 이미지 생성 파이프라인
Blender (Geometry Nodes)3D 모델링
TouchDesigner인터랙티브 비주얼

한 번 익혀두면 다른 노드 기반 도구도 자연스럽게 손에 잡혀요.

그리고 결정적으로, 로컬에서 돌아가요. 본인 ATOM에서 무료로, 의뢰인 자료 같은 거 외부 안 보내고. 6편에서 텍스트로 했던 그걸 이번엔 이미지로 하는 거예요.


두 번째 공포: Docker로 안 깐다고?

설치를 시작하기 전에 한 가지 사실에서 멈췄어요.

이번엔 Docker로 안 까는 거였어요.

5편에서 Docker 컨테이너 사고방식을 한참 배웠잖아요. “별채를 짓는 셈” 이라고. 그래서 모든 게 Docker로 깔리는 줄 알았는데, ComfyUI 설치 가이드를 보니까 python3 -m venv ... 라는 게 등장합니다.

“이건 뭐고, 왜 Docker가 아닌 거지?”

답은 격리에도 여러 종류가 있다는 거였어요. venv (가상환경, virtual environment)는 Docker보다 가벼운 격리예요.

Docker  = 별채를 짓기 (운영체제 통째로 감쌈, 무겁고 안전)
venv    = 방 하나만 따로 쓰기 (파이썬 패키지만 격리, 가볍고 빠름)

비유로 풀면 이래요. 본인 집(=ATOM)에서 일하는데,

이미지 생성 같은 단순한 파이썬 작업엔 굳이 별채까지 안 지어도 돼요. 방 하나면 충분해요. 게다가 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 -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/에 따로 있어요. 둘은 완전히 별개. 그래서:

이게 5편에서 배운 “컨테이너 ≠ 데이터” 와 같은 사고방식이에요. 도구는 가벼우면 좋고, 데이터는 분리해서 영구 보관. 패러다임은 똑같고 구현 방법만 다른 거.


인프라가 깔린 책상

여기까지 와서 본인 ATOM이 어떤 상태인지 한 번 정리해 볼게요.

이게 개인 AI 인프라의 모습이에요. 클라우드 회사들이 월 수십만 원에 임대해주는 그것. 본인은 1리터 우유팩 크기 머신 위에 그걸 만들고 있는 셈이에요.

그리고 다음 편엔, 이 환경 위에서 진짜로 그림 한 장을 만들어볼 거예요. 보라색 우주 병 한 마리가 본인 ATOM에서 태어나는 순간을 같이 봐주세요.


오늘의 정리

읽어주셔서 감사합니다.

#환경구축#Docker#venv