AI 에이전트가 물리 세계의 장비를 움직인다는 말은 이제 남의 세상 소리가 아닙니다. MCP가 퍼지면서 연구실 기계를 에이전트에게 맡기는 시도가 하나둘 나오고 있고, 저 역시 3D 프린터용 오픈소스 프로젝트를 하나 발견했습니다. 이름은 Kiln. 제 노트북에 내려받아 지난 10월 22일 하루, 저희 연구실에 있는 3DWOX DP200(RODIN 펌웨어)에 붙여볼 수 있는지 직접 재봤습니다. 결과는 한 줄로 요약됩니다. Kiln이 준비한 어댑터 8종 중 우리 프린터에 닿는 것은 0개였습니다.
Kiln은 설계부터 출력까지 에이전트에게 맡기는 물건입니다
Kiln은 오픈소스 MCP 서버이자 CLI입니다. 저장소는 GitHub의 codeofaxel/Kiln이고 라이선스는 AGPL-3.0입니다. 에이전트가 붙으면 프린터 일의 처음과 끝을 도맡습니다. 텍스트로 OpenSCAD 스타일의 파라메트릭 설계를 생성하고, PrusaSlicer든 OrcaSlicer든 CLI를 호출해서 슬라이싱하고, 출력 파일을 전송하고, 웹캠으로 모니터링하고, 실패 복구까지 노립니다. "어떤 Marlin 프린터든 USB로 직결한다"는 문구가 이 프로젝트의 가장 큰 판촉 포인트입니다.
연결 가능한 프린터 백엔드는 8종입니다. 앞의 네 종은 OctoPrint(HTTP REST), Moonraker/Klipper, Creality(Moonraker 경유), Bambu Lab(LAN MQTT)입니다. 나머지는 Prusa Link(REST), Elegoo(SDCP WebSocket), Duet/RepRapFirmware(beta), 그리고 Marlin에 직결하는 Direct USB/Serial입니다. 주류에서 마이너까지 꽤 성의껏 챙긴 구성이고, 문서와 소스를 10월 27일에도 재확인해서 이 목록은 최신입니다.
벽 1 — 전송 경로 자체가 없습니다
첫 번째 벽은 호환성 문제가 아니라 회선 문제였습니다. 나갈 길 자체가 없었습니다.
3DWOX DP200은 밀봉된 Marvell ARM 리눅스 박스입니다. 시리얼 포트가 외부로 나와 있지 않고, 표준 Marlin 프로토콜도 쓰지 않습니다. 그래서 Kiln이 가장 자랑하는 serial_adapter가 출발선에서 적용 불가입니다. 시리얼이 안 되면 OctoPrint라도 물리면 좋겠는데, OctoPrint 역시 프린터를 시리얼로 제어해야 하므로 이 우회로도 막힙니다.
결정적인 건 이 지점입니다. 3DWOX가 실제로 받아쓰는 통로는 TCP 9100 raw 소켓 하나뿐입니다. 프린터 표준 네트워크 포트이고, 우리 프린터가 가진 유일한 문입니다. 그런데 Kiln에는 raw 9100 기반 generic 네트워크 어댑터가 아예 없습니다. 8종 중 어느 것도 여기에 해당하지 않아요. 요약하면 우리 프린터의 유일한 길을 상대 지도에 그려놓지 않은 셈입니다. 국제전화 번호 여덟 종류를 잔뜩 들여놨는데 막상 걸려는 곳에 전화선이 없는 상황이랄까요. 언어 문제가 아니라 선의 문제입니다.

벽 2 — 경로를 뚫어도 409 방언의 벽이 남습니다
이를 악물고 통로라도 뚫는다고 가정하면, 그 다음 벽은 gcode 방언입니다. 우리 프린터는 표준 슬라이서의 산출물을 409 에러로 거부합니다. 이 거부 이유는 OrcaSlicer 산출물의 출력 사연에서 이미 직접 뒤져 확정한 바가 있습니다 (https://techtoast.kr/80).
비표준 제약은 모두 7종입니다. 우선 전용 검증 헤더와 파일 머리의 OEM 시작 시퀀스가 필수로 요구돼요. 줄바꿈은 LF 전용이라 CRLF는 전면 거부됩니다. 레이어 마커 M532와 ;LOCATION 줄의 min코너 일치도 검사 항목입니다. Z 피드 상한은 F2400이고, 아예 쓰지 못하게 막힌 명령도 있는데 그게 M298입니다.
Kiln의 slicer.py는 Prusa나 Orca CLI가 만든 표준 G-code를 그대로 전송합니다. 방언 변환 단계가 없어서, 어찌어찌 TCP 9100을 뚫어도 매번 409가 날 구조예요. 사투리 듣기에 통역기 여덟 대를 들여놓은 형국인데, 부족한 건 통역 실력이 아니라 사투리 사전입니다.
벽 3 — 그 이전에 제 환경에서 슬라이서도 안 돌아갔습니다
여기까지는 정직하게 분리해서 적겠습니다. 제 머신에서는 OrcaSlicer CLI를 헤드리스로 돌리면 setup params error가 뜨면서 Kiln의 슬라이싱 경로가 첫 단계에서 막혔습니다. 이건 Kiln의 결함이 아니라 저희 환경의 사정입니다. 다만 벽 1과 벽 2 때문에 끝까지 가야 소용없는 길이 뻔해서, 이 환경 문제는 고치지 않고 그날 검토를 접었습니다.
커스텀 어댑터를 손대볼 만한가, 남는 장사냐
Kiln은 registry.register() 인터페이스로 커스텀 어댑터 확장이 가능합니다. 길이 아예 없는 건 아니에요. 그런데 PrinterAdapter 추상 클래스의 표면이 넓습니다. 상태 조회, 진행률, 취소, 필라멘트 작업까지 구현해야 하고, 거기다 방언 컨버터까지 별도로 붙여야 하니 어댑터 하나에 컨버터 하나, 둘을 따로 개발하는 셈이 됩니다. 저희는 승인 게이트에서 방언 변환, 전송, 상태 폴링까지 도는 자체 파이프라인을 이미 검증해둔 터라 개발 노동 대비 메리트가 낮다고 판단했고, 코드 읽기만 하고 손대지는 않았습니다.
이번 실측으로 얻은 건 우리 프린터에는 우리 방언 파이프라인이 유일한 길이라는 재확인, 그리고 규칙 하나입니다. 앞으로 이 프린터의 자동화 시도는 방언 변환을 갖춘 통로만 고르면 됩니다. Bambu나 Klipper, OctoPrint 계열의 표준 프로토콜 프린터가 랩에 들어오는 날에는 Kiln이 즉시 쓸 만한 도구가 된다는 메모도 검토 로그에 남겨뒀습니다.
하루를 써서 결론이 "사용 불가"라니 좀 허무합니다. 그래도 "안 됐네"로 뭉개는 대신, 나갈 길이 없다, 방언이 안 맞는다, 둘 다 고치려면 어댑터와 컨버터를 따로 개발해야 한다의 세 단계로 원인을 특정해둔 덕에 다음 시도에는 길 찾기 시간이 안 듭니다. 랩에 표준 프로토콜 프린터가 있는 분이라면 우리 같은 방언 고생을 건너뛰고 Kiln을 바로 시험해 보시면 됩니다.
'공부 > 인공지능' 카테고리의 다른 글
| 에이전트를 웹앱 런타임으로 쓰려다 접었습니다 — 개발 인부로 쓰니 괜찮았습니다 (0) | 2026.10.26 |
|---|---|
| 29개 서비스를 대시보드 한 장에 모았더니, 외면하던 503의 정체가 보였다 (0) | 2026.10.25 |
| 파일 크기 21GB, 필요 VRAM 31.8GB — 오픈웨이트의 함정 두 개를 한 번에 배웠습니다 (0) | 2026.10.24 |
| Zotero를 헤르메스에 붙였다 — 심사 초대 논문 36권이 자동으로 서재에 들어온다 (0) | 2026.10.24 |
| 메모리 슬롯은 하나뿐 — 세컨드브레인 52.5만 벡터를 헤르메스 안에 감쌌다 (0) | 2026.10.21 |