본문으로 건너뛰기

RandomChat: 터미널에서 낯선 사람과 대화하는 Go + Cloudflare Workers 프로젝트

정석

RandomChat 로고

터미널에서 낯선 사람과 대화할 수 있다면? RandomChat은 이 독특한 아이디어를 실현한 프로젝트다. GitHub OAuth로 인증하고, WebSocket으로 랜덤 매칭, 그리고 Go CLI와 Cloudflare Workers의 조화까지. 개발자 취향을 저격하는 이 프로젝트를 딥다이브해본다.


왜 이 프로젝트가 흥미로운가

터미널은 개발자의 작업 공간이자 놀이터다. 그런데 채팅 앱이라니? 보통 채팅은 브라우저나 앱에서 한다. RandomChat은 이 관습을 깬다.

더 흥미로운 건 기술 스택이다:

이 조합은 “요즘 개발자가 배워야 할 스택”을 거의 다 담았다.


핵심 기능

랜덤 매칭 시스템

WebSocket을 통해 접속한 사용자들을 큐에 넣고, 두 명이 모이면 매칭한다. Matchmaker Durable Object가 이 로직을 담당한다.

GitHub 프로필 카드

상대방의 GitHub 프로필을 터미널에 렌더링한다:

터미널에서 이 정도 UI가 나온다는 게 놀랍다.

타이핑 인디케이터

상대가 입력 중인지 실시간으로 보여준다. WebSocket의 양방향 통신을 활용한 디테일.

채팅 명령어


아키텍처 분석

┌─────────────┐         WebSocket          ┌──────────────────────┐
│  Go CLI     │◄──────────────────────────►│  Cloudflare Workers  │
│  (Bubble Tea│         HTTPS              │                      │
│   TUI)      │◄──────────────────────────►│  ├─ Matchmaker (DO)  │
└─────────────┘                            │  ├─ ChatRoom (DO)    │
                                           │  ├─ D1 (profiles)    │
                                           │  └─ KV (sessions)    │
                                           └──────────────────────┘

Durable Objects의 활용

Cloudflare Durable Objects는 상태를 가지는 서버리스 컴퓨팅이다. RandomChat은 이를 두 가지 용도로 쓴다:

  1. Matchmaker: 매칭 큐 관리. 싱글톤으로 동작하며 전역 큐 유지
  2. ChatRoom: 매칭된 두 유저 간 메시지 릴레이. 각 채팅방이 독립적인 DO 인스턴스

이 설계는 서버 없이도 실시간 채팅 서버를 구축할 수 있음을 보여준다.

D1과 KV의 역할

서버리스 환경에서 RDBMS와 Key-Value를 적재적소에 사용한 좋은 예다.


설치와 실행

원라인 설치 스크립트로 설치 후 randomchat 명령어로 실행한다. 처음 실행하면 브라우저가 열리고 GitHub 로그인을 한다. 이후부터는 터미널에서 바로 매칭 큐에 진입한다.

Go가 설치되어 있다면 go install로도 설치 가능하다.


셀프 호스팅 가이드

자신의 서버에서 운영할 수 있다:

  1. GitHub OAuth App 생성
  2. Cloudflare Workers 배포
  3. 환경변수 설정

Worker 배포 후 환경변수 RANDOMCHAT_SERVER를 설정하면 자신의 인스턴스를 가리킬 수 있다.

프라이빗한 커뮤니티용 인스턴스를 운영할 수 있다는 점이 매력적이다.


기술적 하이라이트

Bubble Tea TUI

Go의 Bubble Tea는 Elm 아키텍처 기반 TUI 프레임워크다. RandomChat은 이를 활용해 입력 필드, 스크롤 가능한 채팅 히스토리, 프로필 카드 렌더링, 타이핑 인디케이터 등 복잡한 UI를 선언적으로 구현했다.

터미널 컬러 렌더링

아바타를 유니코드 하프블록으로 렌더링하고 24-bit 트루컬러를 적용한다. Contribution 히트맵도 마찬가지. 터미널의 한계를 창의적으로 극복했다.


마치며: 터미널의 새로운 가능성

RandomChat은 터미널에서 할 수 있는 일의 경계를 넓혔다. 채팅, 특히 랜덤 채팅은 GUI의 영역이라고 생각했는데, Go와 Cloudflare Workers의 조합으로 충분히 구현 가능하다.

이 프로젝트가 시사하는 점:

  1. 서버리스로 실시간 앱 구축 가능 - Durable Objects가 상태 관리
  2. 터미널 UI의 가능성 - Bubble Tea로 충분히 풍부한 경험 제공
  3. 셀프 호스팅의 가치 - 자신만의 채팅 서버 운영 가능

프로젝트는 2026년 3월에 시작된 신생 프로젝트다. 앞으로 어떻게 발전할지 기대된다.


관련 정보

이전
nanobot: 4,000줄로 구현한 초경량 AI 어시스턴트
다음
World Monitor: AI 기반 실시간 글로벌 인텔리전스 대시보드