2026년 9월 21일
Klipper와 Moonraker에 Spoolman 연동하기 (Mainsail/Fluidd)
Klipper를 쓰고 있다면 Spoolman은 스풀에 얼마나 남았는지 더는 눈대중으로 추측하지 않게 해주는 표준적인 방법입니다 — 무료 셀프호스팅 스풀 데이터베이스이고, Moonraker에는 이를 위한 기본 지원 기능이 있어서 연동을 마치면 Mainsail과 Fluidd 모두 스풀 선택 메뉴를 보여주고 출력이 진행되는 동안 잔량을 자동으로 갱신해줍니다. 전체 설정 과정을 정리했습니다.
시작 전에 필요한 것
- Klipper와 Moonraker가 이미 설치되어 동작하고 있어야 합니다 — Spoolman은 Moonraker에 연결되는 것이지, 기존 설정을 대체하는 게 아닙니다.
- Spoolman 서버 자체를 돌릴 위치: Moonraker와 같은 라즈베리파이/SBC 위의 Docker 컨테이너, 또는 네트워크상의 별도 상시 가동 기기(NAS, 홈서버 등 꺼지지 않는 어떤 기기든 상관없습니다).
- Docker 없이 Spoolman을 실행한다면 Python 3.9 이상이 필요하지만, Spoolman이 공식 이미지를 제공하므로 대부분 Docker 경로를 선택합니다.
1. Spoolman 서버 실행하기
공식적인 방법은 Docker Compose입니다 — spoolman 이미지를 받고, 데이터베이스용 영구 볼륨을 지정하고, 포트를 엽니다(기본값 7912). 컨테이너가 뜨면 브라우저에서 http://<spoolman-주소>:7912로 접속해 웹 UI를 확인할 수 있습니다 — 아직은 비어 있는 상태입니다.
2. Moonraker에 Spoolman 주소 지정하기
프린터 호스트에서 moonraker.conf를 열고 [spoolman] 섹션을 추가합니다.
[spoolman]
server: http://<spoolman-주소>:7912
<spoolman-주소>에는 Spoolman 컨테이너가 돌아가는 기기의 IP 주소나 호스트명을 넣습니다 — Moonraker와 같은 기기라면 localhost, 아니라면 같은 네트워크상의 IP를 씁니다.
3. Moonraker 재시작하기
sudo systemctl restart moonraker
Moonraker 로그에서 오류 없이 Spoolman에 연결됐다는 줄을 확인하세요. 서버에 연결되지 않는다면 주소를 다시 확인하고, 포트가 실제로 열려 있는지 프린터 호스트에서 직접 curl http://<spoolman-주소>:7912로 확인하는 게 가장 빠릅니다.
4. Mainsail이나 Fluidd에 나타나는지 확인하기
Moonraker가 Spoolman을 인식하는 순간 두 인터페이스 모두 자동으로 연동을 인식합니다 — 별도 플러그인 설치는 필요 없습니다. 출력 상태 패널에 스풀 선택 메뉴가 나타나야 합니다. 아직 보이지 않는다면 대체로 브라우저 탭을 새로고침하는 것으로 충분하고, Moonraker를 다시 재시작할 필요는 없습니다.
5. 스풀 등록하기
Spoolman 웹 UI에서 필라멘트 종류(브랜드, 소재, 직경, 밀도)를 등록한 다음, 해당 필라멘트의 스풀을 초기 무게와 함께 등록합니다. 현재 쓰고 있는 스풀마다 이 과정을 반복하세요 — 전체 설정에서 유일한 수동 작업이고, 이후로는 전부 자동으로 갱신됩니다.
6. 출력 전 스풀 선택하기
작업을 시작하기 전, 이제 Mainsail/Fluidd에 나타나는 선택 메뉴에서 사용할 스풀을 고르세요. 이 시점부터 Moonraker가 출력이 진행되는 동안 예상 소비량을 Spoolman에 보고하고, 해당 스풀의 잔량이 자동으로 줄어듭니다 — 저울도, 수동 차감도 필요 없습니다.
이 설정이 다루지 않는 부분
이제 Spoolman은 각 스풀에 물리적으로 얼마나 남았는지 압니다. 하지만 출력에 실제로 얼마가 들었는지는 알려주지 않습니다 — 애초에 그건 Spoolman의 역할이 아니었습니다. 이를 위해서는 킬로그램당 가격, 출력 시간, 전기 요금이 한 곳에 모여 있어야 합니다. 이게 다음 단계로 필요하다면, Spoolman과 주문 원가 계산이 어떻게 서로를 보완하는지 정리한 글을 참고하세요 — 서로 겹치는 게 아니라 보완하는 관계입니다.