
Rust와 Zenoh로 Sahou라는 도구를 만들었습니다
요약
Rust와 Zenoh 프로토콜을 기반으로 개발된 AI 친화적 GUI 통신 도구 'sahou'를 소개합니다. 스키마 기반의 빠른 통신 구축과 IP/Port 설정 없는 자동 접속을 지원하며, Rust의 크로스 컴파일 기능을 활용해 다양한 언어 환경을 지원합니다.
핵심 포인트
- 스키마 기반의 빠른 애플리케이션 간 통신 구축 가능
- Zenoh 프로토콜을 활용한 고성능 Pub/Sub 및 Query 통신
- Rust의 크로스 컴파일을 통한 Python, Node.js 등 다중 언어 대응
- AI를 활용한 Rust 코드 작성 및 개발 효율성 증대
최근 sahou라는 도구를 만들면서 배운 점이 많았기에 정리해 보려고 합니다.
sahou란 무엇인가
우선은 조금 니치(niche)한 도구일지도 모르지만 가볍게 소개해 드리겠습니다.
네이밍은 일본어의 『사호(作法, 절차/예법)』에서 따왔습니다.

간단히 말하자면
- AI 친화적인 GUI를 갖추고 있으며, 애플리케이션 간의 통신을 위한 약속(스키마 (Schema))을 매우 빠르게 만들 수 있습니다.
- 만든 스키마를 빌드하여 sahou의 실행 환경(Node.js, Python 등 대응)에 로드하면, 타입 정보가 부여될 뿐만 아니라 그대로 통신도 가능합니다.
- 동일 LAN 내에서의 통신에서는 IP 주소, Port 설정이 필요하지 않습니다.
스키마 정보에 기반하여 자동으로 접속됩니다.
라는 도구입니다.
본래 통신 부분은 굉장히 신경 써서 설계해야 하지만, 체험형 콘텐츠나 테크놀로지를 사용한 아트 등을 만들 때는 시간이 없는 경우가 많아 매번 어떤 식으로든 고충이 발생하곤 합니다..
즉, 이것을 사용하면
- 애플리케이션뿐만 아니라 통신 부분도 AI로 구축할 수 있고,
- 번거로운 IP 주소·포트 맞추기 의식도 필요 없으며,
- 타입 정보 덕분에 실제로 접속 테스트를 하기 전까지의 불쾌한 긴장감도 없어서 정신적으로도 즐겁습니다.
라는 것입니다.
이 도구의 토대가 되고 있는 것이 Rust와 Zenoh입니다.
Zenoh
Zenoh 소개
이것을 만난 날, 엄청나게 감동했습니다.
Zenoh: Zero Overhead Network Protocol.
대단한 이름의 프로토콜이 있구나 싶었습니다.
개발처는 그 Eclipse이며, 조사해 보니 최근에는 ROS2 등에도 채택되고 있는 프로토콜이었습니다.
이 기사를 보시면 알 수 있겠지만, Rust제(후술)로 매우 경량이며 고성능인 Pub/Sub 및 Query 통신 프로토콜이라는 것입니다.
Zenoh끼리는 물론, MQTT, REST 등과도 접속할 수 있고, 나아가 TCP 라이크(TCP-like)한 접속, UDP 라이크(UDP-like)한 접속도 선택할 수 있기 때문에, 이것 하나만 있으면 기본적인 통신은 모두 대체할 수 있을 것 같았습니다.
Zenoh는 최강이었습니다. 더 유행해도 좋습니다.
크로스 컴파일(Cross-compile)을 통한 대응 언어의 다양성
최근 유행하는 Rust제, 버즈워드(buzzword)가 되어가는 느낌이 있습니다만, 이번에 이 Rust제가 매우 빛을 발했습니다. Rust는 Write Once, Compile Anywhere라는 사고방식에 따라 다양한 환경에 대응할 수 있습니다.
실제로 Zenoh는 공식적으로 다음과 같은 언어를 지원하는 듯합니다.
- Rust
- C
- C++
- Python
- Kotlin
- Java
- TypeScript
sahou의 Python, Node 대응은 이 공식 지원을 이용하고 있습니다.
Rust의 크로스 컴파일
Zenoh의 장점을 살리기 위해, sahou에서는 메인 개발 언어를 Rust로 정했습니다.
Rust는 이전에 아주 조금 써본 적은 있었지만, 본격적으로 쓰는 것은 처음입니다.
하지만 괜찮습니다, 지금은 AI가 써주니까요.
Rust의 최대 문제였던 높은 학습 비용이 해결되었습니다. 이제는 최강의 언어 중 하나가 되지 않았나 생각합니다.
sahou에 대해서도 코어 부분을 Rust로 작성하고, wasm으로 변환하여 Node 모듈에 임베딩하며, PyO3를 통해 Python에 바인딩하여 유용하게 사용하고 있습니다.
Rust는 Sahou도 Write Once, Compile Anywhere를 실현시켜 주었습니다.
(물론 언어 고유한 부분은 개별적으로 작성하고 있습니다. 작성한 것은 AI입니다만)
현재는 C FFI, bindgen 등을 사용하여 C++ 대응, TouchDesigner 대응을 진행하고 있습니다.
Rust는 좋습니다.
중간 표기법 패턴(MNP)
원래 이 sahou를 생각할 때는 gRPC의 사상을 크게 받았습니다.
gRPC에서는 Protocol Buffers(.proto 파일)라는 DSL (Domain Specific Language)을 작성하고, 이를 바탕으로 코드 자동 생성을 수행합니다.
다만 조금 (기분상) 너무 무거웠습니다...
.proto 파일 자체가 독자적인 표기법이라 조금 거부감이 있기도 하고, 또한 HTTP 기반의 통신이라 대량의 데이터를 스트리밍하면 성능이 문제가 될 것 같다는 우려도 있었습니다.
gRPC 자체는 멋진 기술이지만, 이번에 해결하고 싶은 과제에는 맞지 않는다고 느꼈습니다.
왜냐하면 간단하게 통신시키고 싶으니까 OSC 등을 사용하는 것이니까요...
시간이 없는 와중에 여기까지 본격적으로 하면 힘들겠다고 생각하던 차에,
이야기 도중에 우연히 이 기사를 알려주셨습니다 (그때는 감사했습니다).
DSL (Domain Specific Language, 중간 언어)로 기술한다는 점까지는 gRPC와 같은 사상입니다만, 인간과 AI 양측이 DSL을 접함으로써 개발 속도가 폭발적으로 빨라진다는...
이거다!!! 라고 생각했습니다.
따라서 sahou도 이 MNP를 채택하여, schema.sahou.yaml이라는 파일을 인간이 기술하거나, AI가 기술하거나, GUI를 통해 기술함으로써 스키마 개발 속도를 높이고 있습니다.
AI 친화적인 CLI를 만들어 보기
MNP·DSL을 채택했다고 해서 바로 폭발적으로 빨라지지는 않았습니다!
AI에게 쓰게 하려고 하면
- 애초에 작성법을 몰라서 써주지 않는다
- 때때로 이상한 방식으로 작성하는 바람에 붕괴된다
와 같은 상황이 발생했습니다.
매번 수동으로 프롬프트를 입력하거나, CLAUDE.md에 적어보기도 했습니다만,
우여곡절 끝에 현재는 다음과 같은 방식으로 정착되었습니다.
sahou init
을 수동 실행하면 템플릿 생성 - 템플릿으로서 간단한 sahou 소개를 담은 AGENTS.md를 자동 배치. AI가 기동하면 알아서 이것을 읽음 - AI가 sahou를 이용하기 전에 자동으로 sahou reference 명령어를 실행하여 이용 방법을 이해 - AI가 yaml 파일을 직접 편집
- 편집 후 AI가
sahou validate를 실행하여 올바르게 작성했는지 스스로 확인
Rust의 속도 덕분에 (Rust가 아니어도 빠를 수도 있지만) validate에 걸리는 시간이 거의 오차 범위 수준이라, 지금은 스트레스 없이 운용할 수 있습니다.
또한 이것은 MCP를 만들 정도의 일은 아니기에, 이 방식에 만족하고 있습니다.
GUI
sahou gui 명령어를 실행하면 UI가 실행됩니다.
UI는 Vue + AntV G6로 구축했습니다.
다양한 드로잉 도구를 시도해 보았습니다만, 결국 이 G6가 커넥터의 곡선이나 자동 배치 등을 가장 깔끔하게 처리해 주었기에 이것을 선정했습니다.
원래는 노드(node)끼리 마우스로 직접 선을 연결하여 만들 수 있게 하고 싶었지만, 시각적인 깔끔함을 우선시한 결과, UI는 Vue, 그래프 드로잉은 G6라는 구분으로 구현했습니다.
그 외에 sahou의 코어 부분에서 일부 기능을 WASM (WebAssembly)으로 추출하여 탑재했습니다.
그리고 컴파일 시에 rust-embed를 사용하여 바이너리에 통합해 CLI와 함께 배포하고 있습니다.
기타: 개발 방법
이 sahou를 구현함에 있어서는 "정말로 가능한가?"와 같은 벽이나, 구현을 진행한 결과 사용하기 불편하다는... 등의 문제에 부딪혔습니다.
처음에는 타입 정보가 포함된 OSC를 구현해 보거나, gRPC에 UI를 붙여보는 등 다양한 수법을 시도했다가 폐기했습니다.
그리고 시행착오 속에서 "이 개발 수법이 좋을지도 모르겠다"라고 생각하게 된 것이 있어, 언젠가 체계화하여 정리된 내용을 내놓을까 생각 중입니다.
동기부여가 있을 때 쓰지 않으면 내지 못한 채 끝나버릴 것 같습니다. 힘내봅시다.
마지막으로
앞으로 동기부여가 계속되는 한 sahou의 개발을 진행해 나갈까 합니다.
부디 이 고통에 공감해 주시는 분들과 함께 만들어 나갈 수 있다면 기쁘겠습니다.
네트워크나 프로토콜에 대해 아는 것도 물론 매우 중요하지만, AI를 사용하여 불필요한 고통을 제거할 수 있다면 제거하고 집중해야 할 것에 집중하고 싶으니까요.
이런 "있으면 좋겠다"와 같은 도구는 저 자신과 분리하여, craf'te라는 프로젝트로 릴리스하고 있습니다.
응원의 의미로 팔로우해 주신다면 기쁘겠습니다.
Zenoh는 좋습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기