터미널에서 스포츠를 본다는 발상
개발자들이 좀 별난 면이 있죠. 브라우저 켜면 되는 일을 굳이 터미널에서 해결하려고 하잖아요. Spotify를 터미널에서 듣는 spotify-tui, GitHub 이슈를 터미널에서 보는 gh-dash, 도커를 터미널에서 다루는 lazydocker 같은 도구들이 그렇게 만들어졌고요. 이번에 소개할 Faceoff도 같은 계보의 신박한 도구입니다. 한 줄로 말하면 "터미널에서 NHL(북미 아이스하키 리그) 경기를 따라가는 TUI(텍스트 사용자 인터페이스) 앱" 이에요.
물론 한국에서 NHL 보는 분이 많지는 않을 거예요. 그런데 이 프로젝트가 흥미로운 진짜 이유는 NHL 자체가 아니라, 터미널 안에서 어디까지 풍부한 사용자 경험을 만들 수 있는지를 잘 보여주는 사례라는 점입니다. 점수 현황, 경기 진행 상황, 선수 통계, 슛 차트 같은 정보가 ASCII 그래픽과 색상으로 깔끔하게 표현되거든요. "GUI 아니면 정보 시각화 못 한다"는 편견을 깨주는 작품이에요.
TUI가 다시 뜨는 이유
요즘 GitHub 트렌딩에 TUI 프로젝트가 부쩍 자주 올라와요. 그 배경을 좀 풀어보면, 터미널이라는 공간이 개발자에게는 집 같은 곳이거든요. VSCode를 켜놓고도 터미널 탭을 항상 띄워둔 분들 많으실 거예요. 그런 환경에서는 브라우저로 넘어가서 스코어보드를 확인하거나 알림을 보는 것보다, 같은 터미널 창 안에서 정보를 받는 게 훨씬 흐름을 안 끊습니다. 이걸 "컨텍스트 스위칭 비용을 줄인다"고 표현하기도 해요.
기술적으로는 Ratatui(러스트), Bubble Tea(고), Textual(파이썬), blessed/ink(자바스크립트) 같은 TUI 프레임워크들이 성숙해진 게 큽니다. 예전에는 ncurses라는 C 라이브러리를 직접 다뤄야 해서 진입장벽이 높았는데, 이제는 React 컴포넌트를 짜듯이 "상태(State)와 뷰(View)" 모델로 TUI를 만들 수 있어요. Faceoff도 보아하니 모던 TUI 프레임워크로 만들어진 것 같고, 키보드 단축키로 경기를 넘기고, 패널을 분할하고, 실시간으로 데이터를 갱신하는 등 현대적인 GUI 앱과 거의 비슷한 인터랙션을 제공합니다.
어떻게 동작할까
이런 류의 스포츠 TUI는 보통 공식 통계 API를 폴링(polling) 하는 구조로 만들어져요. NHL은 다행히 비교적 잘 정리된 공개 API를 제공하는 걸로 알려져 있고, 경기 ID를 기반으로 실시간 점수, 슛 정보, 페널티, 라인업 등을 JSON으로 받아올 수 있어요. Faceoff는 이걸 일정 주기로 호출해서 화면을 갱신하는 식이겠죠. 만약 WebSocket을 지원하는 데이터 소스가 있다면 더 부드럽게 만들 수도 있고요.
화면 구성을 짤 때는 보통 그리드 레이아웃으로 영역을 나누고, 각 영역에 위젯(점수판, 통계 테이블, 이벤트 로그 등)을 배치합니다. 색상은 ANSI 컬러 코드로 표현하고, 차트 같은 건 유니코드 블록 문자(▁▂▃▄▅▆▇█)를 활용해서 막대 그래프를 그려요. 박스 그리기는 ┌─┐│└┘ 같은 박스 드로잉 문자를 쓰고요. 이런 작은 도구들의 조합으로 의외로 풍부한 시각적 표현이 가능합니다.
한국 개발자에게 주는 영감
Faceoff 자체를 한국 개발자가 그대로 쓸 일은 많지 않을 거예요. 그런데 이 프로젝트의 접근 방식은 굉장히 따라 해볼 만합니다. 예를 들어 KBO나 K리그 점수를 터미널에서 보는 도구, 롤(LoL) e스포츠 경기 일정을 알려주는 TUI, 코인 시세를 보는 ticker, 회사 내부 지표 대시보드 같은 걸 같은 패턴으로 만들 수 있어요.
실제로 사이드 프로젝트로 TUI를 만들어보는 건 학습 효과가 좋습니다. 첫째, API 설계와 데이터 폴링·캐싱을 자연스럽게 배우게 되고요. 둘째, 상태 관리(어느 화면을 보여줄지, 키 입력에 따라 어떻게 전환할지)를 다뤄야 해서 React 같은 프레임워크 경험과도 연결됩니다. 셋째, 러스트나 고처럼 평소 잘 안 쓰던 언어를 가벼운 동기로 입문해볼 좋은 핑곗거리가 되기도 해요. 무엇보다 결과물이 "내 터미널에서 멋지게 동작"하니까 만드는 재미가 큽니다.
그리고 실무에서도 의외로 쓸 데가 있어요. 사내에서 자주 보는 모니터링 정보 — 배포 상태, CI 결과, 에러 발생 추이, 알림 — 같은 걸 가벼운 TUI로 만들어 두면 Grafana나 Datadog 페이지를 매번 열지 않아도 되거든요. 특히 SSH로 서버에 접속해서 운영하는 환경에서는 GUI가 아예 불가능하니 TUI가 사실상 유일한 시각화 수단이 되기도 하고요.
마무리
Faceoff는 "터미널에서 NHL 본다"는 작고 귀여운 컨셉이지만, 그 뒤에는 TUI 생태계의 성숙과 개발자 경험에 대한 진지한 고민이 깔려 있어요. 작은 도구 하나가 영감을 주는 좋은 사례라고 생각합니다.
여러분이 만약 TUI를 하나 만든다면 어떤 주제로 만들고 싶으세요? 매일 들여다보는 정보 중에 "이거 터미널에 있으면 진짜 편할 텐데" 싶은 게 뭐가 있으신가요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공