AI 에이전트를 $7/월 VPS에 배치하고 IRC를 전송 계층으로 사용한 디지털 도어맨 구축

3 hours ago 1
  • 개인 포트폴리오 사이트에 IRC 기반 AI 에이전트를 연결해, 방문자가 실제 GitHub 저장소 코드 분석 결과를 바탕으로 질문에 답변받을 수 있는 구조
  • 단순한 이력서 요약형 챗봇이 아니라, 저장소 복제·테스트 계산·코드 검증을 수행하는 실행형 에이전트로 설계
  • 시스템은 공개용 nullclaw비공개 ironclaw 두 에이전트로 분리되어, Tailscale 네트워크를 통해 안전하게 통신
  • IRC 프로토콜을 전송 계층으로 채택해 자가 호스팅·표준화·저비용을 동시에 달성하고, Haiku 4.5와 Sonnet 4.6 모델을 역할별로 분리해 비용을 하루 $2로 제한
  • 전체 시스템이 10MB 미만 바이너리·5MB 미만 메모리로 동작하며, 보안·비용·투명성을 모두 확보한 경량 AI 인프라 사례로 제시됨

디지털 도어맨 구축

  • $7/월 VPSAI 에이전트를 배치하고, 개인 IRC 서버를 전송 계층으로 사용해 GitHub 저장소와 연결한 구조
    • 방문자는 포트폴리오 사이트에서 AI에게 질문을 던지고, 실제 코드 기반의 답변을 받을 수 있음
    • 단순한 이력서 요약형 챗봇이 아닌, 코드 분석을 통한 구체적 응답 제공

"이력서를 물어보는 챗봇"의 한계

  • 대부분의 포트폴리오 챗봇은 이력서 내용을 모델에 주입해 재구성하는 수준에 머무름
  • 이런 방식은 새로운 정보를 제공하지 못하며, 단순한 형식적 대화에 불과함
  • “테스트 커버리지를 어떻게 관리하나?” 같은 질문에는 저장소를 복제하고 테스트 수를 계산하는 식의 구체적 응답이 필요함
  • 이를 위해 직접적인 코드 접근과 분석이 가능한 인프라를 구축함

시스템 아키텍처

  • 두 개의 에이전트, 두 개의 서버, 두 개의 보안 경계로 구성
    • nullclaw: 공개용 도어맨, 678KB Zig 바이너리, 약 1MB RAM 사용
      • 방문자 인사, 프로젝트 관련 질문 응답, GitHub 저장소 복제 및 코드 기반 검증 수행
    • ironclaw: 비공개 백엔드 에이전트, 별도 시스템에서 동작
      • 이메일, 일정, 개인 컨텍스트 접근 가능
      • nullclaw로부터 복잡한 요청을 #backoffice IRC 채널을 통해 전달받음
  • 두 시스템은 Tailscale을 통해 연결되며, 공개 서버는 개인 데이터에 접근 불가

IRC를 선택한 이유

  • 미학적 일관성: 포트폴리오 사이트가 터미널 UI 기반이므로 IRC 클라이언트가 자연스러움
  • 완전한 자가 호스팅: Ergo IRC 서버, gamja 웹 클라이언트, nullclaw 모두 자체 인프라에서 운영
  • 단순하고 표준화된 프로토콜: 30년 된 IRC는 벤더 종속성 없음, API 변경 리스크 없음
  • 동일한 에이전트가 웹 클라이언트뿐 아니라 irssi 터미널 클라이언트에서도 동일하게 작동

모델 선택과 설계

  • 대형 모델 사용은 비효율적이며, 역할에 따라 모델을 구분
    • Haiku 4.5**: 대화 및 간단한 질의 처리,** 초저지연 응답

      • Sonnet 4.6: 코드 분석 및 복잡한 추론 시에만 사용
      • 비용 상한선: 하루 $2, 월 $30으로 제한
      • 악의적 사용이나 과도한 대화로 인한 비용 폭주 방지
      • 계층형 추론 구조를 통해 속도와 비용 효율성을 동시에 확보

보안 설계

  • SSH: 루트 로그인 비활성화, 키 인증만 허용, 비표준 포트 사용
  • 방화벽: SSH, IRC(TLS), HTTPS(WebSocket)만 개방
  • Cloudflare 프록시: TLS 종료, 속도 제한, 봇 필터링 수행
  • 에이전트 샌드박스: 읽기 전용 도구만 허용, 시간당 10회 액션 제한
  • 비용 제어: 하루 $2, 월 $30 하드캡
  • 감사 로그 및 자동 업데이트 활성화
  • 공격면 최소화: ergo와 nullclaw 두 서비스만 실행, 웹 콘텐츠 직접 제공 없음
  • 침해 발생 시 피해 범위는 $2/일 한도의 IRC 봇으로 제한됨

통신 스택 구성

  • 모든 구성요소는 소형·자가 호스팅·교체 가능 형태
    • Ergo: IRC 서버, 단일 Go 바이너리, 2.7MB RAM
    • gamja: 웹 IRC 클라이언트, 152KB 정적 페이지, Cloudflare 뒤에서 서비스
    • nullclaw: AI 에이전트 런타임, 4MB Zig 바이너리, 약 1MB 메모리 사용
  • 전체 시스템은 10MB 미만의 바이너리, 5MB 미만의 유휴 메모리로 동작
  • 가장 저렴한 VPS 티어에서도 충분히 운영 가능

nully(공개 에이전트)의 실제 기능

  • 프로그래밍 언어 파악: 사전 로드된 컨텍스트와 저장소 검증을 통해 확인
  • 테스트 구조 분석: 저장소 복제 후 테스트 파일을 직접 읽어 결과 보고
  • 프로젝트 설명: 예를 들어 Fracture 프로젝트의 세부 내용을 코드 기반으로 응답
  • 연락처 안내: 정확한 연락 정보만 제공, 허위 정보 생성 없음
  • 일정 예약 요청: Google A2A 프로토콜을 통해 ironclaw로 전달, 결과를 구조화해 반환
  • 방문자는 백엔드 전환 과정을 인지하지 못함

A2A 구현

  • Google A2A 프로토콜(v0.3.0) 을 지원하며, JSON-RPC 기반 작업 상태 관리 수행
  • a2a_call 도구는 원격 에이전트에 메시지를 전송하고, 작업 상태(완료/실패/진행 중) 를 파싱
  • HTTPS 강제, 단 Tailscale 내부 네트워크에서는 디버깅 편의를 위해 HTTP 허용
  • ironclaw 측 구조

    • nullclaw 인스턴스는 자체 API 키 없이 ironclaw의 LLM 게이트웨이를 프록시로 사용
    • 하나의 API 키와 결제 관계만 유지
    • ironclaw가 모든 추론 요청을 처리하고 비용을 부담

핸드오프 보안

  • A2A 엔드포인트는 프롬프트 인젝션 위험이 존재하므로 엄격한 제한 적용
    • ironclaw로 전달 가능한 요청은 일정, 연락처, 가용성 관련으로 한정
    • 임의 명령 전달은 거부
    • ironclaw의 A2A 엔드포인트는 Tailscale 전용 방화벽으로 보호
    • 두 에이전트 모두 감시 모드 및 제한된 명령 허용 목록으로 실행
  • nully가 요청 승격 여부를 결정, 무분별한 명령 실행 방지

구축 과정에서 얻은 교훈

  • 모델 선택은 시스템 설계의 일부이며, 비용·지연·경험에 직접 영향
  • 에이전트 자체보다 통신·보안·인프라 구성에 더 많은 시간 소요
  • IRC의 단순성과 개방성이 AI 에이전트 전송 계층으로 이상적임
  • nullclaw–ironclaw 분리 구조가 보안 모델의 핵심
  • A2A 프로토콜과 IRC 로그 채널 병행으로 구조적 통신과 실시간 가시성 확보
  • 자격 증명 중복 방지: ironclaw의 게이트웨이를 프록시로 사용해 단일 API 키·단일 결제 관계 유지

체험 방법

  • georgelarson.me/chat 방문 또는 홈페이지 터미널에서 irc 입력
  • IRC 클라이언트 사용 시: irc.georgelarson.me, 포트 6697(TLS), 채널 #lobby
  • nully가 대기 중이며, 방문자와 실시간 대화 가능
Read Entire Article