
터미널에서 낯선 사람과 대화할 수 있다면? RandomChat은 이 독특한 아이디어를 실현한 프로젝트다. GitHub OAuth로 인증하고, WebSocket으로 랜덤 매칭, 그리고 Go CLI와 Cloudflare Workers의 조화까지. 개발자 취향을 저격하는 이 프로젝트를 딥다이브해본다.
왜 이 프로젝트가 흥미로운가
터미널은 개발자의 작업 공간이자 놀이터다. 그런데 채팅 앱이라니? 보통 채팅은 브라우저나 앱에서 한다. RandomChat은 이 관습을 깬다.
더 흥미로운 건 기술 스택이다:
- Go + Bubble Tea: 터미널 UI 프레임워크로 풍부한 인터페이스 구현
- Cloudflare Workers + Durable Objects: 서버리스 웹소켓 매칭 시스템
- D1 + KV: 서버리스 데이터베이스와 세션 스토리지
이 조합은 “요즘 개발자가 배워야 할 스택”을 거의 다 담았다.
핵심 기능
랜덤 매칭 시스템
WebSocket을 통해 접속한 사용자들을 큐에 넣고, 두 명이 모이면 매칭한다. Matchmaker Durable Object가 이 로직을 담당한다.
GitHub 프로필 카드
상대방의 GitHub 프로필을 터미널에 렌더링한다:
- 아바타 (24-bit 트루컬러 + 유니코드 하프블록)
- Bio, Top Repo, 주 사용 언어
- 12주 Contribution 히트맵
터미널에서 이 정도 UI가 나온다는 게 놀랍다.
타이핑 인디케이터
상대가 입력 중인지 실시간으로 보여준다. WebSocket의 양방향 통신을 활용한 디테일.
채팅 명령어
- /skip - 다음 사람으로 건너뛰기
- /quit - 종료
- /help - 도움말
- /status - 연결 상태 확인
아키텍처 분석
┌─────────────┐ WebSocket ┌──────────────────────┐
│ Go CLI │◄──────────────────────────►│ Cloudflare Workers │
│ (Bubble Tea│ HTTPS │ │
│ TUI) │◄──────────────────────────►│ ├─ Matchmaker (DO) │
└─────────────┘ │ ├─ ChatRoom (DO) │
│ ├─ D1 (profiles) │
│ └─ KV (sessions) │
└──────────────────────┘
Durable Objects의 활용
Cloudflare Durable Objects는 상태를 가지는 서버리스 컴퓨팅이다. RandomChat은 이를 두 가지 용도로 쓴다:
- Matchmaker: 매칭 큐 관리. 싱글톤으로 동작하며 전역 큐 유지
- ChatRoom: 매칭된 두 유저 간 메시지 릴레이. 각 채팅방이 독립적인 DO 인스턴스
이 설계는 서버 없이도 실시간 채팅 서버를 구축할 수 있음을 보여준다.
D1과 KV의 역할
- D1 (SQLite): 사용자 프로필, 밴, 신고 등 영구 데이터
- KV: 세션 토큰 (TTL로 자동 만료)
서버리스 환경에서 RDBMS와 Key-Value를 적재적소에 사용한 좋은 예다.
설치와 실행
원라인 설치 스크립트로 설치 후 randomchat 명령어로 실행한다. 처음 실행하면 브라우저가 열리고 GitHub 로그인을 한다. 이후부터는 터미널에서 바로 매칭 큐에 진입한다.
Go가 설치되어 있다면 go install로도 설치 가능하다.
셀프 호스팅 가이드
자신의 서버에서 운영할 수 있다:
- GitHub OAuth App 생성
- Cloudflare Workers 배포
- 환경변수 설정
Worker 배포 후 환경변수 RANDOMCHAT_SERVER를 설정하면 자신의 인스턴스를 가리킬 수 있다.
프라이빗한 커뮤니티용 인스턴스를 운영할 수 있다는 점이 매력적이다.
기술적 하이라이트
Bubble Tea TUI
Go의 Bubble Tea는 Elm 아키텍처 기반 TUI 프레임워크다. RandomChat은 이를 활용해 입력 필드, 스크롤 가능한 채팅 히스토리, 프로필 카드 렌더링, 타이핑 인디케이터 등 복잡한 UI를 선언적으로 구현했다.
터미널 컬러 렌더링
아바타를 유니코드 하프블록으로 렌더링하고 24-bit 트루컬러를 적용한다. Contribution 히트맵도 마찬가지. 터미널의 한계를 창의적으로 극복했다.
마치며: 터미널의 새로운 가능성
RandomChat은 터미널에서 할 수 있는 일의 경계를 넓혔다. 채팅, 특히 랜덤 채팅은 GUI의 영역이라고 생각했는데, Go와 Cloudflare Workers의 조합으로 충분히 구현 가능하다.
이 프로젝트가 시사하는 점:
- 서버리스로 실시간 앱 구축 가능 - Durable Objects가 상태 관리
- 터미널 UI의 가능성 - Bubble Tea로 충분히 풍부한 경험 제공
- 셀프 호스팅의 가치 - 자신만의 채팅 서버 운영 가능
프로젝트는 2026년 3월에 시작된 신생 프로젝트다. 앞으로 어떻게 발전할지 기대된다.
관련 정보
- GitHub: https://github.com/Hyeong-soo/randomChat
- 개발자: Henry Kim (Hyeong-soo)
- 기술 스택: Go, Cloudflare Workers, D1, KV, Bubble Tea
- 라이선스: MIT