싱글 컴퓨터 보드로 엔터프라이즈급 AI 에이전트 보안을 체험하다
이전 글에서 NVIDIA NemoClaw의 아키텍처와 핵심 기능, 그리고 DGX Spark을 기준으로 한 설치 방법을 다루었습니다. 하지만 DGX Spark은 수천만 원대의 장비이며, 대부분의 개인 개발자나 소규모 팀이 쉽게 접근할 수 있는 환경이 아닙니다. 그렇다면 NemoClaw의 커널 레벨 보안과 네트워크 정책, 추론 라우팅 기능을 직접 체험해 보려면 어떻게 해야 할까요? 답은 의외로 간단합니다. Raspberry Pi 5 8GB 모델 한 대면 충분합니다. NemoClaw의 OpenShell 바이너리는 aarch64(ARM64) 아키텍처를 공식적으로 지원하고 있으며, Pi 5에서 GPU 없이도 NVIDIA Cloud API를 통한 추론으로 완전한 NemoClaw 환경을 구동할 수 있습니다.

목 차
1. 왜 Raspberry Pi 5인가
NemoClaw를 체험하기 위한 공식 경로는 현재 세 가지입니다.
- 첫 번째는 NVIDIA DGX Spark이나 DGX Station과 같은 전용 하드웨어를 사용하는 것이고,
- 두 번째는 NVIDIA Brev 플랫폼에서 클라우드 VM을 시간당 약 $0.13(한화 약 170원)에 빌려 쓰는 것이며, 세 번째가 바로 ARM64 Linux 호환 장비에 직접 설치하는 것입니다. Raspberry Pi 5가
- 세 번째 경로에서 최적의 선택지인 이유는 여러 가지가 있습니다.
우선, NemoClaw의 설치 스크립트 내부에는 detect_arch() 함수가 있어 aarch64 아키텍처를 명시적으로 판별하고, 그에 맞는 OpenShell 바이너리를 자동으로 다운로드합니다. 이는 NVIDIA가 ARM64 환경을 의도적으로 지원하고 있다는 의미입니다. 또한 Pi 5의 8GB RAM은 NemoClaw의 k3s-in-Docker 아키텍처를 구동하기 위한 최소 요구사항을 간신히 충족하며, 4코어 Cortex-A76 프로세서는 Gateway 프로세스와 샌드박스를 동시에 구동할 수 있는 충분한 처리 능력을 제공합니다. 무엇보다 Pi 5는 약 몇 원대의 비용으로 구입할 수 있어, NemoClaw 평가를 위한 초기 투자 비용을 극단적으로 낮출 수 있습니다.
| 항목 | DGX Spark | Brev Cloud VM | RBPi 5(8GB) |
| 비용 | 수천만 원 | 시간당 약 170원 ($0.13) | 약 십만원 이하 (일회성) |
| GPU | 2x H100 80GB | 없음 (CPU only) | 없음 |
| RAM | 128GB+ | 16GB | 8GB |
| 추론 방식 | 로컬 NIM 서버 | NVIDIA Cloud API | NVIDIA Cloud API |
| 설치 난이도 | 공식 문서 완비 | 원클릭 배포 | 수동 설정 필요 (이 글에서 안내) |
| 상시 운영 | 가능 | 비용 발생 | 저전력 24/7 가능 |
| 네트워크 접근 | 로컬/원격 | 원격 전용 | 로컬 네트워크 + 터널 |
다만 한 가지 명확히 해야 할 점이 있습니다. Pi 5에는 GPU가 없으므로 로컬 추론(Ollama를 통한 Nemotron 모델 실행)은 사실상 불가능합니다. Nemotron 3 Super 120B 모델은 약 87GB의 디스크 공간과 상당한 GPU 메모리를 요구하기 때문입니다. 따라서 Pi 5에서의 NemoClaw는 반드시 NVIDIA Cloud API를 통한 클라우드 추론 모드로 운영해야 합니다. Pi 5는 AI 모델을 직접 실행하는 것이 아니라, AI 에이전트의 로직과 보안 거버넌스(네트워크 정책, 파일 격리, 추론 라우팅)를 담당하는 제어 플레인 역할을 수행합니다.
[!] 참고: NVIDIA Cloud API(build.nvidia.com)를 통한 추론은 별도의 API 사용료가 발생합니다. 무료 크레딧이 제공되지만, 장기 운영 시 비용 계획이 필요합니다.
2. 하드웨어 준비와 OS 설치
필수 하드웨어
NemoClaw를 Raspberry Pi 5에서 안정적으로 운영하기 위해서는 아래와 같은 하드웨어 구성을 권장합니다. 특히 RAM은 반드시 8GB 모델을 사용해야 합니다. NemoClaw 내부의 k3s-in-Docker 아키텍처는 Docker 데몬, k3s 컨트롤 플레인, 샌드박스 Pod, Gateway 프로세스가 동시에 메모리를 사용하므로 4GB 모델에서는 OOM(Out Of Memory) 킬러가 프로세스를 강제 종료시킬 가능성이 매우 높습니다.
| 항목 | 최소 사양 | 권장 사양 |
| 보드 | Raspberry Pi 5 8GB | Raspberry Pi 5 8GB |
| 저장 장치 | MicroSD 32GB (Class 10) | USB SSD 128GB 이상 |
| 전원 | 공식 27W USB-C 어댑터 | 공식 27W USB-C 어댑터 |
| 네트워크 | Wi-Fi | 유선 이더넷 (안정성) |
| 쿨링 | 패시브 방열판 | 액티브 쿨링 팬 또는 공식 케이스 |
저장 장치는 MicroSD 대신 USB SSD를 강력히 권장합니다. NemoClaw는 설치 과정에서 약 2.4GB의 샌드박스 이미지를 다운로드하고 압축을 해제하면서 대량의 랜덤 I/O가 발생합니다. MicroSD의 느린 랜덤 쓰기 성능은 설치 시간을 크게 늘리고, 장기 운영 시 SD 카드의 수명을 단축시킬 수 있습니다. USB SSD를 사용하면 설치 시간이 절반 이하로 줄어들고, I/O 병목으로 인한 Gateway 응답 지연도 크게 개선됩니다.
OS 선택 | Ubuntu Server 24.04 LTS (권장)
NemoClaw는 Linux 전용입니다. OS 선택은 NemoClaw 설치의 성패를 좌우하는 중요한 결정입니다. 결론부터 말하면, Ubuntu Server 24.04 LTS (64-bit)를 강력히 권장합니다. Raspberry Pi OS Lite (Bookworm)도 가능하지만, NemoClaw의 k3s-in-Docker 아키텍처와의 호환성 측면에서 Ubuntu가 압도적으로 유리합니다.
NemoClaw가 내부적으로 사용하는 k3s(경량 Kubernetes)는 cgroup v2의 memory controller가 활성화되어 있어야 정상 동작합니다. 여기서 두 OS의 결정적 차이가 드러납니다. Ubuntu 24.04는 설치 직후 memory cgroup이 이미 활성화된 상태입니다. 별도의 커널 파라미터 수정 없이 바로 k3s를 구동할 수 있습니다. 반면 Pi OS Bookworm은 기본적으로 memory cgroup이 비활성화되어 있을 뿐만 아니라, 최근 커널 버전(6.6.x 이후)에서는 DTB(Device Tree Blob) 파일에 cgroup_disable=memory가 하드코딩되어 있어 cmdline.txt 수정만으로는 해결되지 않는 심각한 호환성 문제가 있습니다.
이 문제는 Raspberry Pi 공식 GitHub 이슈(#6980)에 등록되어 현재 대응 중이지만, 2025년 하반기까지도 해결이 완료되지 않은 상태입니다.
| 항목 | Ubuntu Server 24.04 LTS | Pi OS Lite (Bookworm) |
| cgroup memory | 기본 활성화 (설정 불필요) | 기본 비활성화 + DTB 하드코딩 문제 |
| k3s 호환성 | 공식 지원 + 커뮤니티 검증 완료 | cmdline.txt 수정 필요 + DTB 해킹 가능성 |
| Docker 설치 | 표준 apt 설치 | 표준 apt 설치 |
| 커널 업데이트 | cgroup 설정 유지 | 업데이트 시 DTB 덮어쓰기 위험 |
| 메모리 오버헤드 | Pi OS 대비 약 50~100MB 더 사용 | 최소한의 메모리 사용 |
| 패키지 생태계 | Ubuntu/Debian 전체 호환 | Debian 기반 + Pi 전용 패키지 |
| NemoClaw 사전 설정 | Docker + Node.js만 설치하면 끝 | cgroup + Docker cgroupns + DTB 수정 필요 |
약 50~100MB 정도의 메모리 오버헤드는 8GB 모델에서 무시할 수 있는 수준이며, cgroup 관련 삽질을 수 시간 줄여주는 것과 비교하면 매우 합리적인 트레이드오프입니다. 특히 커널 업데이트 시 Pi OS에서는 DTB가 다시 덮어씌워져 cgroup 설정이 초기화될 위험이 있지만, Ubuntu에서는 이런 걱정이 없습니다.
# Raspberry Pi Imager를 사용하여 Ubuntu Server 24.04 LTS 이미지를 준비합니다
# 1. https://www.raspberrypi.com/software/ 에서 Raspberry Pi Imager 다운로드
# 2. OS 선택: Other general-purpose OS -> Ubuntu -> Ubuntu Server 24.04 LTS (64-bit)
# 3. 설정(톱니바퀴) 아이콘 클릭:
# - SSH 활성화: 비밀번호 인증 사용
# - 사용자 이름/비밀번호 설정
# - Wi-Fi 설정 (유선 사용 시 생략 가능)
# - 로케일: Asia/Seoul
# 4. 저장 장치에 쓰기 실행
OS 이미지를 SD 카드(또는 USB SSD)에 기록한 후 Pi 5에 삽입하고 부팅합니다. SSH로 접속하여 다음 초기 설정을 진행합니다.
# SSH 접속
ssh ubuntu@라즈베리파이IP
# 시스템 업데이트 (필수)
sudo apt update && sudo apt full-upgrade -y
# 타임존 설정 (Cron Jobs 정확도에 영향)
sudo timedatectl set-timezone Asia/Seoul
# 아키텍처 확인 (반드시 aarch64 출력 필요)
uname -m
# 출력: aarch64
# [핵심] cgroup memory 이미 활성화되어 있는지 확인
cat /proc/cgroups | grep memory
# 'memory 0 XX 1' -- 마지막 숫자가 1이면 활성화 상태 (Ubuntu에서는 기본값)
[!] 참고: 만약 Pi OS Bookworm을 사용해야 하는 특별한 이유가 있다면, 섹션 3.1에서 cgroup 활성화 방법을 별도로 안내합니다. 하지만 NemoClaw 전용 머신이라면 Ubuntu Server 24.04 LTS를 선택하는 것이 시간과 안정성 모두에서 유리합니다.
3. NemoClaw 설치 전 필수 사전 설정
이 섹션은 Pi 5에 NemoClaw를 설치하기 전에 반드시 완료해야 하는 사전 작업들을 다룹니다. Ubuntu Server 24.04를 선택했다면 3.1(cgroup 설정)은 건너뛸 수 있으며, Docker와 Node.js 설치부터 시작하면 됩니다. Pi OS Bookworm을 사용하는 경우에만 3.1의 cgroup 설정이 필수입니다.
cgroup v2 Memory Controller 활성화 | Pi OS Bookworm 전용
[!] Ubuntu Server 24.04를 설치한 경우, 이 단계를 건너뛰세요. Ubuntu에서는 memory cgroup이 기본 활성화되어 있습니다. cat /proc/cgroups | grep memory 명령으로 마지막 숫자가 1인지만 확인하면 됩니다.
Pi OS Bookworm을 사용하는 경우에만 이 설정이 필요합니다. NemoClaw 내부에서 k3s(경량 Kubernetes)가 Docker 컨테이너 안에서 실행되는데, k3s는 시작 시 memory cgroup 지원 여부를 확인합니다. Pi OS Bookworm은 기본적으로 cgroup memory controller가 비활성화되어 있으며, 이 상태에서 NemoClaw를 설치하면 k3s가 fatal exit로 즉시 종료됩니다. 더 심각한 문제는, 이 오류가 발생할 때 NemoClaw의 설치 스크립트가 자동 복구를 시도하는 과정에서 npm 전역 패키지 충돌이 발생하여 nemoclaw 명령 자체가 삭제되는 악순환에 빠질 수 있다는 점입니다.
# 현재 cgroup 상태 확인
cat /proc/cgroups | grep memory
# 만약 'memory 0 XX 0' (마지막 숫자가 0)이면 비활성화 상태
# [핵심] /boot/firmware/cmdline.txt 수정
# 주의: 이 파일은 반드시 한 줄로 작성해야 합니다 (줄바꿈 금지!)
sudo nano /boot/firmware/cmdline.txt
cmdline.txt 파일의 기존 내용 끝에 다음 파라미터를 추가합니다. 기존 내용을 삭제하지 않도록 주의하고, 반드시 같은 줄에 공백으로 구분하여 이어 붙여야 합니다.
cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
수정 후의 cmdline.txt 예시는 다음과 같습니다. 실제 파일에서는 줄바꿈 없이 한 줄로 이어져야 한다는 점을 다시 한번 강조합니다.
console=serial0,115200 console=tty1 root=PARTUUID=xxxxxxxx-xx rootfstype=ext4 fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
[!] 주의: Pi OS의 특정 커널 버전(6.6.x 이후)에서는 Device Tree Blob(DTB) 파일 내에 cgroup_disable=memory 파라미터가 하드코딩되어 있는 경우가 있습니다. cmdline.txt를 수정했음에도 /proc/cmdline에 cgroup_disable=memory가 나타난다면, DTB 파일을 직접 수정해야 할 수 있습니다. 이 경우 커널 버전을 6.6.74 이하로 고정하는 것이 가장 안정적인 해결책입니다.
# 재부팅 (cgroup 설정 적용을 위해 필수)
sudo reboot
# 재부팅 후 SSH 재접속하여 cgroup 활성화 확인
cat /proc/cgroups | grep memory
# 'memory 0 XX 1' (마지막 숫자가 1이면 활성화 성공)
# /proc/cmdline에서도 확인
cat /proc/cmdline | grep cgroup_enable
# cgroup_enable=memory가 포함되어 있어야 합니다
Docker 설치 및 cgroupns 설정
NemoClaw는 Docker를 필수로 사용합니다. Ubuntu Server 24.04에 Docker를 설치하고, cgroupns 모드를 올바르게 설정해야 합니다.
# Docker 공식 설치 스크립트 실행
curl -fsSL https://get.docker.com | sudo sh
# 현재 사용자를 docker 그룹에 추가 (sudo 없이 docker 사용 가능)
sudo usermod -aG docker $USER
# 로그아웃 후 재로그인 (그룹 변경 적용)
exit
# SSH 재접속 후 확인
docker --version
Docker 설치 후 반드시 daemon.json 파일을 생성하여 cgroupns 모드를 설정해야 합니다. NemoClaw의 k3s-in-Docker 구조에서 cgroup 네임스페이스가 올바르게 전달되지 않으면 컨테이너 내부의 k3s가 메모리 cgroup을 인식하지 못합니다. Ubuntu에서는 cgroup 자체는 이미 활성화되어 있지만, Docker의 cgroupns 모드 설정은 여전히 필요합니다.
# Docker daemon.json 설정 파일 생성
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"default-cgroupns-mode": "host",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
# Docker 재시작
sudo systemctl restart docker
sudo systemctl enable docker
# Docker 정상 동작 확인
docker run --rm hello-world
Node.js 22 LTS 설치
NemoClaw CLI는 Node.js 기반으로 작동합니다. Ubuntu Server 24.04의 기본 Node.js 버전은 오래된 경우가 많으므로, NodeSource 저장소를 통해 최신 22.x LTS를 설치합니다.
# NodeSource 저장소를 통한 Node.js 22 설치
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
# 버전 확인
node --version # v22.x.x 이상
npm --version # 10.x.x 이상
Swap 설정 (필수)
8GB RAM으로는 NemoClaw의 설치 과정(특히 샌드박스 이미지 빌드 시)에서 메모리가 부족할 수 있습니다. 최소 4GB의 스왑 공간을 설정하고, swappiness를 낮추어 가능한 한 물리 메모리를 우선 사용하도록 합니다.
# 기존 dphys-swapfile 제거 (Pi OS 기본 스왑)
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo apt purge -y dphys-swapfile
# 4GB 스왑 파일 생성
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 부팅 시 자동 마운트
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# swappiness 낮추기 (10 권장 -- 메모리 부족 시에만 스왑 사용)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 스왑 확인
free -h
# Swap: 4.0Gi가 표시되어야 합니다
불필요한 서비스 비활성화
Pi 5의 제한된 8GB RAM을 최대한 NemoClaw에 할당하기 위해, 사용하지 않는 시스템 서비스를 비활성화합니다.
# 불필요한 서비스 비활성화
sudo systemctl disable --now cups # 프린터 서비스
sudo systemctl disable --now bluetooth # 블루투스
sudo systemctl disable --now avahi-daemon # 네트워크 디스커버리
sudo systemctl disable --now ModemManager # 모뎀 관리자
# Wi-Fi 사용하지 않는 경우 (유선 사용 시)
sudo systemctl disable --now wpa_supplicant
# 메모리 확보 확인
free -h
4. NemoClaw 설치하기
모든 사전 설정이 완료되었다면 이제 NemoClaw를 설치할 차례입니다. GTC 2026 키노트에서 Jensen Huang이 시연한 것처럼 단 두 줄의 명령으로 설치가 시작되지만, Pi 5에서는 한 가지 중요한 차이가 있습니다. 공식 설치 스크립트에 반드시 sudo를 bash 앞에 붙여야 한다는 것입니다. DGX Spark 시연에서는 root 계정으로 직접 로그인한 상태였기 때문에 sudo가 필요 없었지만, Pi OS의 일반 사용자 계정에서는 npm 전역 패키지 설치 시 권한 오류가 발생합니다.
# NemoClaw 설치 스크립트 실행
# [!] sudo의 위치에 주의하세요 -- bash 앞에 위치해야 합니다
curl -fsSL https://nvidia.com/nemoclaw.sh | sudo bash
이 명령이 수행하는 작업은 다음과 같습니다. 먼저 시스템에 Node.js가 설치되어 있는지 확인하고, 없으면 자동으로 설치합니다(이미 설치했으므로 건너뜁니다). 그다음 uname -m 명령으로 시스템 아키텍처를 확인하여 aarch64용 OpenShell 바이너리를 다운로드합니다. OpenShell 바이너리가 /usr/local/bin/openshell에 설치된 후, NemoClaw CLI가 npm 전역 패키지로 설치됩니다. 마지막으로 Onboard 마법사가 자동으로 시작됩니다. Pi 5에서 이 과정은 네트워크 속도에 따라 약 5~10분이 소요됩니다.
설치가 정상적으로 완료되면 다음과 같은 확인 메시지가 출력됩니다.
# 설치 확인
nemoclaw --help
openshell --version
[!] 주의: 만약 설치 중 npm error code EACCES 또는 permission denied 오류가 발생한다면, sudo의 위치를 다시 확인하세요. sudo curl ... 이 아니라 curl ... | sudo bash 입니다. curl은 일반 권한으로 스크립트를 다운로드하고, bash가 관리자 권한으로 스크립트를 실행하는 구조입니다.
5. Onboard 마법사 완료하기
NemoClaw의 설치 스크립트가 완료되면 자동으로 대화형 Onboard 마법사가 시작됩니다. 이 마법사는 7단계로 구성되어 있으며, Gateway 생성부터 샌드박스 구축, API 키 설정, 추론 프로필 선택, 보안 정책 적용까지 전체 환경을 순차적으로 구성합니다. Pi 5에서는 샌드박스 이미지 다운로드와 빌드에 가장 많은 시간이 소요되며, 전체 Onboard 과정은 약 15~25분이 걸립니다.
# Onboard 마법사 시작 (설치 스크립트가 자동으로 실행하지만, 수동 실행도 가능)
nemoclaw onboard
Onboard 단계별 가이드
아래 표는 각 Onboard 단계에서 입력해야 하는 내용과 Pi 5에서의 주의사항을 정리한 것입니다.
| 단계 | 항목 | 입력/선택 | Pi 5 주의사항 |
| 1 | Gateway 이름 | 기본값(nemoclaw) 사용 | - |
| 2 | Sandbox 이름 | 소문자와 하이픈만 사용 (예: my-agent) | RFC 1123 규격: 대문자, 밑줄(_) 사용 불가 |
| 3 | NVIDIA API Key | build.nvidia.com에서 발급한 키 입력 | nvapi- 로 시작하는 키 |
| 4 | 추론 프로필 | NVIDIA Cloud API (default) | 로컬 추론(Ollama) 선택 금지 -- Pi 5에서 불가 |
| 5 | 모델 선택 | nemotron-3-super-120b (기본값) | 클라우드에서 실행되므로 Pi 5 사양 무관 |
| 6 | 보안 정책 | 기본 정책 수락 (Y) | pypi, npm, claude, nvidia 등 사전 허용 |
| 7 | 완료 | 대시보드 URL 확인 | localhost:18789 (로컬에서만 접근 가능) |
# Onboard 완료 시 출력 예시
──────────────────────────────────────────────────
Dashboard http://localhost:18789/
Sandbox my-agent (Landlock + seccomp + netns)
Model nvidia/nemotron-3-super-120b-a12b (NVIDIA Endpoint API)
──────────────────────────────────────────────────
Run: nemoclaw my-agent connect
Status: nemoclaw my-agent status
Logs: nemoclaw my-agent logs --follow
──────────────────────────────────────────────────
[INFO] === Installation complete ===
Sandbox 이름 규칙
Sandbox 이름은 RFC 1123 DNS 라벨 규격을 따라야 합니다. 이 규격을 지키지 않으면 k3s Pod 생성 단계에서 오류가 발생합니다. 허용되는 이름의 예시로는 my-agent, nemoclaw-test, pi5-sandbox 등이 있으며, My_Agent, NemoClaw_Test, piAgent! 같은 이름은 사용할 수 없습니다.
NVIDIA API Key 발급
NVIDIA Cloud API를 사용하려면 API 키가 필요합니다. 발급 과정은 다음과 같습니다.
1. https://build.nvidia.com 접속
2. NVIDIA 계정으로 로그인 (없으면 무료 가입)
3. 좌측 메뉴에서 "API Keys" 또는 "Settings" 클릭
4. "Generate API Key" 클릭
5. nvapi-xxxx... 형태의 키가 생성됩니다
6. 이 키를 안전한 곳에 저장하세요 -- 다시 확인할 수 없습니다
6. 원격 접속 설정 | Web UI와 TUI 활용
Onboard가 완료되면 NemoClaw의 Web UI 대시보드가 localhost:18789에서 실행됩니다. 하지만 Pi 5를 헤드리스 서버로 운영하는 경우, 다른 컴퓨터의 브라우저에서 이 대시보드에 접근해야 합니다. NemoClaw의 Web UI는 기본적으로 localhost에만 바인딩되어 있으므로, 외부 접근을 위한 추가 설정이 필요합니다.
socat을 이용한 포트 포워딩
가장 간단한 방법은 socat을 사용하여 Pi 5의 모든 네트워크 인터페이스에서 18789 포트를 열어주는 것입니다.
# socat 설치
sudo apt install -y socat
# 포트 포워딩 실행 (백그라운드)
socat TCP-LISTEN:18789,bind=0.0.0.0,reuseaddr,fork TCP:127.0.0.1:18789 &
# 같은 네트워크의 다른 컴퓨터에서 접속
# http://라즈베리파이IP:18789
SSH 터널링 (보안 권장)
보안이 중요한 환경에서는 SSH 터널을 사용하는 것이 좋습니다. 포트를 직접 외부에 노출하지 않으면서도 원격 접근이 가능합니다.
# 로컬 컴퓨터에서 실행 (Pi가 아닌 접속하려는 PC에서)
ssh -L 18789:localhost:18789 pi@라즈베리파이IP
# 로컬 브라우저에서 접속
# http://localhost:18789
CORS 설정
외부에서 Web UI에 접속할 때 "Origin not allowed" 오류가 발생할 수 있습니다. 이는 NemoClaw의 Gateway가 localhost 이외의 Origin을 차단하기 때문입니다. Sandbox에 접속하여 환경 변수를 설정해야 합니다.
# Sandbox 접속
nemoclaw my-agent connect
# Sandbox 내부에서 CORS 설정
export OPENCLAW_ALLOWED_ORIGINS="http://라즈베리파이IP:18789"
TUI(터미널 UI) 사용
Web UI 외에도 터미널에서 직접 대화할 수 있는 TUI 인터페이스를 제공합니다. SSH로 Pi 5에 접속한 상태에서 바로 사용할 수 있어 편리합니다.
# Sandbox에 접속
nemoclaw my-agent connect
# TUI 채팅 시작
openclaw chat
# 네트워크 모니터링 TUI (별도 터미널에서)
nemoclaw my-agent status --watch
TUI의 네트워크 모니터링 화면에서는 에이전트가 시도하는 모든 네트워크 연결을 실시간으로 확인할 수 있습니다. 허용 목록에 없는 호스트로의 연결 시도가 발생하면 즉시 차단되며, 관리자가 승인하거나 거부할 수 있습니다. 이 기능은 NemoClaw의 핵심 보안 기능 중 하나로, AI 에이전트가 예상치 못한 외부 서비스에 접근하는 것을 실시간으로 감시하고 통제할 수 있습니다.
7. Pi 5 환경 최적화와 리소스 관리
메모리 모니터링
NemoClaw가 실행 중인 상태에서 Pi 5의 메모리 사용량을 지속적으로 모니터링하는 것이 중요합니다. 8GB RAM에서 NemoClaw의 전체 스택(Docker + k3s + Gateway + Sandbox)은 약 3~5GB의 메모리를 사용합니다.
# 실시간 메모리 모니터링
watch -n 5 free -h
# Docker 컨테이너별 리소스 사용량
docker stats --no-stream
# Pi 5 CPU 쓰로틀링 확인 (발열로 인한 성능 저하)
vcgencmd get_throttled
# 0x0 = 정상, 다른 값 = 쓰로틀링 발생
성능 기대치
Pi 5에서의 NemoClaw 성능은 DGX Spark과는 확연히 다릅니다. 아래 표는 실제 운영 시 예상되는 성능 지표입니다.
| 항목 | DGX Spark | RBPi 5 (8GB) |
| Gateway 시작 시간 | 30초 이내 | 3~5분 |
| 첫 번째 응답 시간 | 1~2초 | 5~15초 (네트워크 의존) |
| Sandbox 빌드 | 1~2분 | 10~15분 |
| 동시 대화 세션 | 다수 | 1~2개 권장 |
| 메모리 여유 | 충분 | 약 2~3GB 여유 |
Gateway 시작에 3~5분이 소요되는 이유는 k3s-in-Docker 아키텍처의 특성 때문입니다. Docker 컨테이너 안에서 k3s 경량 Kubernetes가 부팅되고, 그 안에 샌드박스 Pod가 생성되는 과정이 Pi 5의 ARM 프로세서에서는 상대적으로 느리게 진행됩니다. 하지만 한번 시작되면 이후의 응답 속도는 주로 NVIDIA Cloud API의 네트워크 지연에 의해 결정되므로, Pi 5의 하드웨어 성능과는 큰 관계가 없습니다.
8. 재부팅 후 자동 복구 설정
NemoClaw 0.0.6 버전의 현재 가장 큰 운영상의 한계는 재부팅 후 자동 복구가 되지 않는다는 점입니다. Pi 5가 재부팅되면 Gateway, Sandbox, 추론 연결이 모두 초기화되며, 수동으로 다시 Onboard 과정을 거쳐야 합니다. 이는 24/7 상시 운영을 목표로 하는 환경에서 심각한 제약입니다.
expect를 활용한 자동 Onboard 스크립트
대화형 Onboard 마법사를 자동화하기 위해 expect 도구를 사용합니다. expect는 대화형 프로그램의 입력을 자동으로 처리해주는 유틸리티입니다.
# expect 설치
sudo apt install -y expect
# 자동 Onboard 스크립트 생성
sudo tee /usr/local/bin/nemoclaw-auto-start.sh > /dev/null << 'SCRIPT'
#!/usr/bin/expect -f
set timeout 600
# 기존 리소스 정리
spawn bash -c "nemoclaw my-agent status 2>/dev/null && echo 'running' || echo 'stopped'"
expect {
"running" { }
"stopped" {
spawn nemoclaw onboard
# Gateway 이름 (기본값 수락)
expect "Gateway name"
send "\r"
# Sandbox 이름
expect "Sandbox name"
send "my-agent\r"
# NVIDIA API Key
expect "API key"
send "nvapi-여기에본인API키입력\r"
# 추론 선택 (NVIDIA Cloud)
expect "inference"
send "\r"
# 모델 선택 (기본값)
expect "model"
send "\r"
# 정책 수락
expect "policy"
send "Y\r"
expect "Installation complete"
}
}
SCRIPT
chmod +x /usr/local/bin/nemoclaw-auto-start.sh
systemd 서비스 등록
자동 시작 스크립트를 systemd 서비스로 등록하면, Pi 5 재부팅 시 자동으로 NemoClaw가 복구됩니다.
# systemd 서비스 파일 생성
sudo tee /etc/systemd/system/nemoclaw.service > /dev/null << 'EOF'
[Unit]
Description=NemoClaw AI Agent Service
After=docker.service network-online.target
Wants=docker.service network-online.target
[Service]
Type=simple
User=root
ExecStartPre=/bin/sleep 30
ExecStart=/usr/local/bin/nemoclaw-auto-start.sh
Restart=on-failure
RestartSec=60
TimeoutStartSec=600
[Install]
WantedBy=multi-user.target
EOF
# 서비스 활성화
sudo systemctl daemon-reload
sudo systemctl enable nemoclaw.service
[!] 참고: 이 자동화 방식은 NemoClaw가 아직 초기 버전(0.0.6)이기 때문에 필요한 임시 해결책입니다. 향후 공식 버전에서는 nemoclaw start 명령이나 데몬 모드가 지원될 것으로 예상됩니다.
9. 실전 운영 | 모니터링과 유지보수
일일 운영 체크리스트
Pi 5에서 NemoClaw를 안정적으로 운영하기 위해서는 정기적인 상태 확인이 필요합니다.
# NemoClaw 전체 상태 확인
nemoclaw my-agent status
# OpenShell 샌드박스 상태
openshell sandbox list
# Docker 컨테이너 상태
docker ps --filter "name=openshell"
# 로그 확인 (최근 50줄)
nemoclaw my-agent logs --follow --tail 50
# 디스크 사용량 (Docker 이미지가 상당한 공간 차지)
df -h
docker system df
로그 관리
NemoClaw는 상당한 양의 로그를 생성합니다. Pi 5의 제한된 저장 공간을 보호하기 위해 로그 로테이션을 설정합니다.
# Docker 로그 크기 제한은 이미 daemon.json에서 설정됨 (10m, 3파일)
# 시스템 저널 로그 크기 제한
sudo journalctl --vacuum-size=100M
# 주기적 Docker 정리 (cron에 등록)
# 사용하지 않는 이미지, 컨테이너, 볼륨 정리
(crontab -l 2>/dev/null; echo "0 3 * * 0 docker system prune -f") | crontab -
네트워크 정책 업데이트
운영 중 에이전트가 새로운 외부 서비스에 접근해야 할 경우, 네트워크 정책을 업데이트할 수 있습니다. NemoClaw의 네트워크 정책은 YAML 파일 기반의 화이트리스트 방식으로 동작하며, 정책 변경 시 샌드박스를 재구축하지 않아도 즉시 적용됩니다.
# 현재 네트워크 정책 확인
nemoclaw my-agent connect
cat /etc/openshell/network-policy.yaml
# 허용된 호스트 목록 확인 (기본 정책 예시)
# - api.anthropic.com (claude)
# - api.openai.com (openai)
# - build.nvidia.com (nvidia)
# - api.github.com (github)
# - pypi.org (pypi)
# - registry.npmjs.org (npm)
# - api.telegram.org (telegram)
10. 트러블슈팅 | Pi 5에서만 발생하는 11가지 문제와 해결법
NemoClaw를 Pi 5에 설치하는 과정에서 발생할 수 있는 주요 문제와 해결책을 정리하였습니다. 이 목록은 실제 Pi 5 설치 경험과 커뮤니티 보고를 종합한 것입니다.
| 번호 | 문제 | 원인 | 해결법 |
| 1 | EACCES: permission denied | sudo 위치 오류 | curl ... | sudo bash 사용 |
| 2 | k3s fatal exit (memory cgroup) | cgroup v2 memory 비활성화 | cmdline.txt에 cgroup_enable=memory 추가 |
| 3 | npm 패키지 자기 삭제 루프 | cgroup 미설정 상태에서 설치 시도 | 반드시 cgroup 설정 후 설치 |
| 4 | Sandbox 이름 오류 | 대문자/밑줄 사용 | RFC 1123 규격 준수 (소문자, 하이픈만) |
| 5 | Web UI 외부 접근 불가 | localhost 바인딩 | socat 포트 포워딩 또는 SSH 터널 |
| 6 | "Origin not allowed" | CORS 정책 | OPENCLAW_ALLOWED_ORIGINS 환경변수 |
| 7 | OOM Kill 발생 | 8GB RAM 부족 | 4GB 스왑 설정, 불필요 서비스 비활성화 |
| 8 | Docker cgroupns 오류 | daemon.json 미설정 | "default-cgroupns-mode": "host" 설정 |
| 9 | 재부팅 후 상태 초기화 | Onboard 데이터 비영속 | expect 자동화 + systemd 서비스 |
| 10 | Gateway 시작 지연 (3-5분) | ARM CPU의 k3s 부팅 속도 | 정상 동작 -- 인내심 필요 |
| 11 | "Device identity required" | 디바이스 인증 토큰 만료 | Sandbox 재생성으로 해결 |
11. DGX Spark vs Pi 5 vs Brev Cloud 비교
NemoClaw를 평가하려는 사용자를 위해 세 가지 환경의 특성을 종합적으로 비교합니다.
| 항목 | DGX Spark | Raspberry Pi 5 | Brev Cloud VM |
| 초기 비용 | 수천만 원 | 약 십만원 내외 | 무료 (사용량 기반) |
| 월 운영 비용 | 전력비 | 전력비 (약 2,000원) | 시간당 ~170원 |
| 로컬 추론 | Nemotron 로컬 실행 가능 | 불가능 (Cloud API만) | Cloud API |
| 데이터 프라이버시 | 완전 로컬 | API 호출만 외부 | 전체 클라우드 |
| 설치 난이도 | 공식 문서 완비 | 높음 (이 가이드 필요) | 원클릭 |
| 상시 운영 적합성 | 최적 | 양호 (저전력) | 비용 누적 |
| 학습/평가 | 과잉 투자 | 최적 | 단기 평가에 적합 |
결론적으로 Raspberry Pi 5는 "NemoClaw가 무엇인지 직접 체험하고, 보안 프레임워크의 작동 방식을 이해하는 목적"에 가장 적합합니다. 프로덕션 운영을 위한 환경은 아니지만, DGX Spark 구매 전 개념 검증(PoC)이나 학습 목적으로는 최고의 가성비를 제공합니다. 특히 제조업 현장의 ARM 기반 엣지 디바이스에서 NemoClaw가 실행 가능한지를 검증하는 사전 테스트로도 매우 유용합니다.
12. 마무리
이 글에서는 NVIDIA NemoClaw를 Raspberry Pi 5 8GB 모델에 설치하고 운영하는 전체 과정을 다루었습니다. Pi OS의 cgroup memory controller 활성화부터 Docker cgroupns 설정, NemoClaw 설치, Onboard 마법사 완료, 원격 접속 구성, 성능 최적화, 재부팅 후 자동 복구, 그리고 Pi 5 특유의 11가지 트러블슈팅까지, 공식 문서에는 없는 실전 정보를 상세하게 정리하였습니다.
NemoClaw는 아직 초기 단계(0.0.6)의 소프트웨어이며, Pi 5 환경에서의 사용은 공식적으로 지원되지 않습니다. 하지만 OpenShell 바이너리가 aarch64를 지원하고, 클라우드 추론을 통해 GPU 없이도 핵심 기능을 모두 사용할 수 있다는 점은 매우 고무적입니다. 향후 NemoClaw가 정식 릴리스되면 ARM 기반 엣지 디바이스에서의 지원이 공식화될 가능성이 높으며, 그때까지 Pi 5는 최소 비용으로 NemoClaw를 탐색할 수 있는 최적의 플랫폼입니다.
이전 글(NemoClaw 블로그 1편)에서 다룬 아키텍처와 보안 기능에 대한 이해를 바탕으로 이 글의 실전 설치 가이드를 따라하면, NemoClaw의 커널 레벨 보안이 실제로 어떻게 AI 에이전트를 보호하는지를 직접 체험할 수 있을 것입니다.
참고 자료
- NVIDIA NemoClaw 공식 GitHub: https://github.com/NVIDIA/NemoClaw
- NVIDIA NemoClaw 공식 문서: https://docs.nvidia.com/nemoclaw/latest/
- NVIDIA Build (API 키 발급): https://build.nvidia.com
- NVIDIA Brev 일 클릭 배포: https://brev.nvidia.com/launchable/deploy
- OpenClaw Raspberry Pi 가이드: https://docs.openclaw.ai/platforms/raspberry-pi
- Raspberry Pi 5 cgroup memory 이슈: https://github.com/raspberrypi/linux/issues/5933
- k3s Raspberry Pi 호환성: https://github.com/k3s-io/k3s/issues/9524
- NemoClaw 이전 글 (1편): 아키텍처와 보안 기능 상세
'AI 활용' 카테고리의 다른 글
| NVIDIA - NemoClaw 설치부터 활용까지 (0) | 2026.03.24 |
|---|---|
| 중소기업 AI 도입 심화 분석 - 핵심 성공사례와 업종별 전략 (0) | 2026.03.09 |
| 중소기업을 위한 제조업 AI 도입 사례 - 작은 투자로 큰 변화를 만드는 법 (0) | 2026.03.09 |
| 글로벌 제조업 AI 활용 사례 - 세계를 선도하는 혁신 기업들 (0) | 2026.03.09 |
| 국내 제조업 AI 활용 사례 - 생산성 혁신의 선도주자들 (2) | 2026.03.09 |