Huny's Dev Blog
huny.dev

rc — 브라우저에서 실행하는 터미널, 하나의 바이너리로

CLI 명령을 PTY로 감싸 WebSocket으로 브라우저에 실시간 스트리밍하는 경량 서버. Go 단일 바이너리, 멀티탭, 분할 패널, 에이전트 모드, 파일 업로드, 모바일 지원까지.

Hun Jang
Hun Jang Mar 17, 2026

🎯 Why I Built This

서버 관리를 하다 보면 SSH 클라이언트가 없는 환경에서 급하게 터미널에 접근해야 할 때가 있습니다. 또는 여러 서버의 터미널을 한 화면에서 모니터링하고 싶을 때, 모바일에서 빠르게 명령 하나만 실행하고 싶을 때.

기존에도 웹 터미널 솔루션은 있지만, 대부분 무겁거나 설정이 복잡하거나, Node.js 생태계에 의존합니다:

  • ❌ ttyd: C 기반이지만 단일 명령만 실행 가능, 멀티탭 없음
  • ❌ Wetty: Node.js 의존성, SSH 터널링 방식
  • ❌ GoTTY: 유지보수 중단, 읽기 전용이 기본
  • ❌ code-server: 훌륭하지만 터미널만 필요할 때는 오버스펙

그래서 만들었습니다. 단일 Go 바이너리로 설치 없이 실행하고, 브라우저만 열면 끝나는 터미널 서버.

🔗 rc.huny.dev 에서 자세한 내용을 확인하세요!

✨ Key Features

1. 🖥️ 단일 바이너리, 제로 의존성

Go로 작성되어 크로스 컴파일된 단일 바이너리입니다. Linux, macOS, Windows 모두 지원하며, 다운로드 받아 실행하면 끝입니다.

Node.js도, Python도, Docker도 필요 없습니다. 바이너리 하나면 충분합니다.

2. 📑 멀티탭 & 분할 패널

여러 명령을 동시에 실행하고 브라우저 탭처럼 관리할 수 있습니다.

  • 🏷️ 드래그 앤 드롭으로 탭 순서 변경
  • ✏️ 더블클릭으로 탭 이름 변경
  • ⧉ 분할 패널로 여러 터미널을 동시에 보기
  • ⌨️ Alt+1~9, Alt+←/→ 키보드 단축키
  • 📌 새로고침해도 보던 탭 유지 (localStorage)
  • 🔗 ?tab=N 쿼리 파라미터로 특정 탭 딥링크

3. 🌐 에이전트 모드 — 분산 터미널

가장 강력한 기능입니다. 여러 서버의 터미널을 하나의 허브에 모을 수 있습니다.

브라우저에서 hub:8000에 접속하면 허브의 로컬 탭과 에이전트들의 원격 탭이 모두 보입니다.

💡 에이전트 IP가 탭 hover 시 표시되어 어떤 서버인지 바로 확인 가능합니다.

4. 🔑 토큰 기반 Attach

에이전트를 붙일 때 허브 비밀번호를 직접 알려주기 어려울 때, Attach Token 기능을 사용합니다.

  1. 허브 웹 UI의 탭 메뉴에서 'Attach token' 클릭
  1. 5분간 유효한 일회용 토큰이 생성됨
  1. 해당 토큰을 --password 값으로 사용하여 에이전트 attach
  1. 토큰으로 인증되면 허브가 실제 Bearer 토큰을 발급

토큰 모달에는 OS별 rc 설치 명령도 포함되어 있습니다.

5. 🔒 보안

웹 터미널은 보안이 생명입니다. rc는 다음을 지원합니다:

  • ✅ Bearer 토큰 인증 (--password)
  • ✅ URL route prefix (--route /secret-path)
  • ✅ CORS origin 체크
  • ✅ 보안 헤더 및 역방향 프록시 지원

6. 📤 파일 업로드 & 📱 모바일 지원

--upload 플래그로 브라우저 파일 업로드. 모바일에서는 플로팅 키보드 패널로 Ctrl+C, 방향키 등 입력 가능.

7. 🔄 자동 업데이트 (Safe Restart)

웹 UI에서 원클릭 업데이트. 새 바이너리 검증 → 포트 해제 → 새 프로세스 시작 → 실패 시 자동 복구.

💡 업데이트에 실패해도 서버가 죽지 않습니다. 자동으로 복구합니다.

🚀 Technical Stack

Why Go?

  • ⚡ 단일 바이너리 크로스 컴파일: GOOS=linux GOARCH=arm64 go build
  • 🔧 PTY 핸들링: creack/pty 라이브러리
  • 🌐 내장 HTTP/WebSocket 서버: Go 표준 라이브러리만으로
  • 📦 //go:embed로 프론트엔드를 바이너리에 내장

Frontend

  • 🖥️ 순수 HTML/CSS/JS — 빌드 도구 없음, 프레임워크 없음
  • 📟 xterm.js: 실제 터미널 에뮬레이션
  • 🎨 Catppuccin Mocha 테마

Architecture

모든 통신은 WebSocket으로 이루어지며, 에이전트는 허브에 자동 재연결됩니다.

💡 Use Cases

Scenario 1: 서버 모니터링

⏱️ 세팅 시간: 서버당 30초

Scenario 2: 모바일에서 긴급 대응

노트북 없이도 핸드폰 브라우저로 터미널 접속 가능

Scenario 3: 팀원에게 서버 접근 공유

Attach Token으로 5분간 유효한 일회용 토큰 전달

🆚 다른 웹 터미널과 비교

  • vs ttyd: rc는 멀티탭, 에이전트 모드, 파일 업로드 지원
  • vs Wetty: Node.js 불필요, SSH 의존 없음
  • vs code-server: ~10MB 바이너리, 터미널에 특화
  • vs Teleport: 설치 30초, 설정 파일 없음

⚡ Quick Start

 
💡 서버에 터미널 접근이 필요할 때, SSH 클라이언트가 없을 때, 모바일에서 긴급 대응해야 할 때 — rc 하나면 충분합니다!

추천 글