mogee.
<< BACK
#againworld#레트로#채팅#터미널#TUI#Firebase#TypeScript#오픈소스#사이드프로젝트

againworld 개발기 — 레트로 채팅 서비스를 npx 한 줄로

DATE: 2026년 3월 29일TIME: 4분 읽기VIEWS: 10
Apple 맥북 네오 — A18 Pro칩

// RECOMMENDED GEAR

Apple 맥북 네오 — A18 Pro칩

입문 개발자를 위한 경제형 맥북. Flutter, React 개발에 충분한 성능.

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

againworld 개발기 — 레트로 채팅 서비스를 npx 한 줄로

시작은 향수에서

90년대 PC통신 서비스를 아시나요? 나우누리, 천리안, 하이텔…

모뎀 연결음과 함께 접속하면, 텍스트로 가득 찬 화면에 전국의 사람들이 한 방에 모여 대화하던 그 시절. 방도 없고, 프로필도 없고, 그냥 접속하면 모두가 거기 있었습니다.

그 감성을 2026년에 다시 만들어보고 싶었습니다.

컨셉

규칙은 단순합니다.

  • 접속하면 랜덤 닉네임이 생성됩니다
  • 방이 없습니다 — 전 세계가 하나의 채팅방
  • 입장하면 본인에게만 hello again, world. 가 출력됩니다
  • 터미널을 닫으면 끝

현대의 채팅 서비스처럼 읽음 표시, 알림, 프로필 사진 같은 건 없습니다. 그냥 흘러가는 대화입니다.

기술 스택

TUI 클라이언트: Node.js + TypeScript + Ink (React for CLI)
백엔드: Firebase Realtime Database + Anonymous Auth
배포: npm 패키지 (npx)

처음엔 Firestore를 고려했지만, 채팅처럼 순서가 중요한 데이터는 Realtime Database의 child_added 이벤트가 훨씬 자연스럽습니다. Firestore는 문서 단위 과금이라 메시지가 많아질수록 비용이 증가하지만, RTDB는 전송량 기준이라 단순 채팅에 유리합니다.

TUI 라이브러리는 Ink를 선택했습니다. React 문법 그대로 사용할 수 있어서 러닝커브가 거의 없고, TypeScript 지원도 훌륭합니다.

배포 방식

npx 를 선택한 이유는 단 하나입니다.

진입 장벽을 0에 가깝게

Node.js만 설치되어 있으면 누구나 아래 한 줄로 입장할 수 있습니다:

npx againworld

설치, 설정, 회원가입 — 아무것도 필요 없습니다.

아키텍처 — 확장성을 고려한 설계

MVP는 단순하지만, 백엔드를 처음부터 분리해서 설계했습니다.

Firebase 백엔드 (Realtime Database + Auth)
    ↓
TUI 클라이언트 (현재)
Web 클라이언트 (추후)
MCP 서버 (추후)

Firebase 하나로 어떤 프론트엔드든 붙일 수 있는 구조입니다. 나중에 웹 버전을 추가하거나, AI가 MCP로 접속하는 것도 가능합니다.

프로젝트 구조

src/
├── core/
│   ├── firebase.ts    # Firebase 초기화
│   ├── session.ts     # 세션 관리 (~/.againworld/session.json)
│   ├── chat.ts        # 메시지 송수신
│   └── nickname.ts    # 랜덤 닉네임 생성
└── cli/
    ├── App.tsx         # 메인 앱
    ├── Header.tsx      # 상단 헤더
    ├── ChatArea.tsx    # 메시지 영역
    └── InputArea.tsx   # 입력 영역

파일당 100줄 이하로 유지하면서, 각 파일이 하나의 역할만 담당하도록 설계했습니다.

세션 유지

npx 로 실행할 때마다 새로운 프로세스가 생성됩니다. 하지만 닉네임과 인증 정보는 유지되어야 합니다.

~/.againworld/session.json 에 Firebase UID와 닉네임을 저장해서, 재접속 시에도 같은 사용자로 인식됩니다.

Firebase 프로젝트 준비

원래 전용 Firebase 프로젝트를 새로 만들려 했지만, GCP 프로젝트 할당량 초과로 막혔습니다. 사용하지 않는 기존 프로젝트를 againworld 로 이름을 바꿔서 재활용했습니다.

Anonymous Auth와 Realtime Database를 활성화하고, 보안 규칙도 설정했습니다:

  • 인증된 사용자만 읽기/쓰기 가능
  • 메시지 작성자 UID 검증
  • 닉네임 212자, 메시지 1500자 제한

앞으로

  • 접속자 수 실시간 표시
  • Rate limit (Cloud Functions, Phase 2)
  • 웹 버전
  • MCP 지원

지금 당장 한 번 들어와보세요.

npx againworld

GitHub: https://github.com/smy383/againworld

이 글 공유하기

[X] X에 공유

// SPONSORED

[>]댓글

아직 댓글이 없어요. 첫 댓글을 남겨보세요!