개요

TUI(Terminal User Interface) 프레임워크는 터미널 환경에서 인터랙티브 UI를 구축하는 도구입니다. SSH 환경, 리소스 제한 환경, 개발자 도구에서 특히 유용하며, 최근 Go의 Charm 스택을 필두로 르네상스를 맞고 있습니다.

주요 프레임워크

Go — Charm 스택 (Bubble Tea + Lip Gloss + Huh)

항목내용
개발Charm
핵심Go TUI 생태계의 사실상 표준
아키텍처Elm Architecture (Model-Update-View)
GitHubhttps://github.com/charmbracelet/bubbletea

구성:

라이브러리역할
Bubble TeaTUI 프레임워크 (이벤트 루프, 상태 관리)
Lip Gloss스타일링 (색상, 정렬, 테두리, 패딩)
Bubbles재사용 컴포넌트 (테이블, 텍스트 입력, 목록 등)
Huh인터랙티브 폼/프롬프트
WishSSH 앱 서버 (SSH로 TUI 서빙)
Log컬러 로깅
Glow터미널 마크다운 렌더러
package main
 
import (
    tea "github.com/charmbracelet/bubbletea"
    "fmt"
)
 
type model struct { count int }
 
func (m model) Init() tea.Cmd { return nil }
 
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
    switch msg := msg.(type) {
    case tea.KeyMsg:
        switch msg.String() {
        case "q": return m, tea.Quit
        case "up": m.count++
        case "down": m.count--
        }
    }
    return m, nil
}
 
func (m model) View() string {
    return fmt.Sprintf("Count: %d\n\n↑/↓ to change, q to quit", m.count)
}
 
func main() {
    tea.NewProgram(model{}).Run()
}

대표 앱: k9s, lazygit, lazydocker, glow, soft-serve, gh (GitHub CLI)


Python — Textual

항목내용
개발Textualize (Will McGugan, Rich 개발자)
핵심Python TUI의 사실상 표준, CSS 스타일링
GitHubhttps://github.com/Textualize/textual

특징:

  • CSS 기반 레이아웃: 웹 개발 경험 그대로 TUI에 적용
  • 위젯 시스템: Button, DataTable, Tree, Input, ListView 등
  • async 네이티브: asyncio 기반
  • Textual Web: TUI를 브라우저에서도 실행 가능
  • DevTools: 실시간 CSS 수정, 스냅샷 테스트
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Button, Static
 
class CounterApp(App):
    CSS = """
    Screen { align: center middle; }
    #count { text-style: bold; }
    """
 
    count = 0
 
    def compose(self) -> ComposeResult:
        yield Header()
        yield Static(f"Count: {self.count}", id="count")
        yield Button("+1", id="increment")
        yield Footer()
 
    def on_button_pressed(self, event: Button.Pressed):
        self.count += 1
        self.query_one("#count").update(f"Count: {self.count}")
 
CounterApp().run()

관련:

  • Rich: 터미널 리치 텍스트 (테이블, 프로그레스바, 마크다운)
  • Typer/Click: CLI 인자 파서 (TUI가 아닌 CLI)

대표 앱: Dolphie (MySQL 모니터), Trogon, Posting (HTTP 클라이언트)


Rust — Ratatui

항목내용
개발커뮤니티 (tui-rs 포크)
핵심Rust TUI의 사실상 표준, 즉시 모드 렌더링
GitHubhttps://github.com/ratatui/ratatui

특징:

  • 즉시 모드(Immediate mode): 매 프레임 전체 UI 재렌더링
  • 위젯: Table, List, Chart, Gauge, Sparkline, Canvas 등
  • 백엔드: Crossterm(크로스플랫폼), Termion(Unix)
  • 고성능: Rust 특성상 최저 메모리/CPU
use ratatui::{prelude::*, widgets::*};
 
fn ui(frame: &mut Frame) {
    let block = Block::default()
        .title("Counter")
        .borders(Borders::ALL);
    let paragraph = Paragraph::new("Count: 42")
        .block(block)
        .alignment(Alignment::Center);
    frame.render_widget(paragraph, frame.area());
}

대표 앱: gitui, bottom (btm), bandwhich, wiki-tui


JavaScript/TypeScript — Ink

항목내용
개발Vadim Demedes
핵심React로 TUI 구축
GitHubhttps://github.com/vadimdemedes/ink

특징:

  • React 컴포넌트 모델 그대로 터미널에 적용
  • JSX로 TUI 작성
  • Flexbox 레이아웃
  • React hooks 사용 가능
import React, {useState} from 'react';
import {render, Text, Box, useInput} from 'ink';
 
const Counter = () => {
    const [count, setCount] = useState(0);
    useInput((input) => {
        if (input === 'k') setCount(c => c + 1);
        if (input === 'j') setCount(c => c - 1);
    });
    return <Box><Text>Count: {count}</Text></Box>;
};
 
render(<Counter />);

대표 앱: Pastel (Prettier CLI), create-ink-app


기타

프레임워크언어특징
ncursesC원조 TUI 라이브러리, 저수준
BrickHaskell선언적 TUI, Elm 아키텍처
tviewGo위젯 기반, Bubble Tea보다 전통적
CursiveRustncurses 스타일 Rust TUI
FTXUIC++함수형 터미널 UI
prompt_toolkitPython고급 프롬프트/입력 (IPython 기반)
blessedNode.jsncurses 대안 (레거시)

비교

프레임워크언어아키텍처스타일링학습 곡선생태계성능
Bubble TeaGoElm (MVU)Lip Gloss중간최대높음
TextualPython이벤트 기반CSS낮음중간
RatatuiRust즉시 모드코드높음성장 중최고
InkJS/TSReactFlexbox낮음 (React 경험 시)중간중간
tviewGo위젯코드낮음중간높음
ncursesC저수준코드높음레거시최고

대표 TUI 앱

프레임워크용도
k9sBubble TeaKubernetes 관리
lazygitBubble TeaGit TUI
lazydockerBubble TeaDocker 관리
gituiRatatuiGit TUI (Rust)
bottom (btm)Ratatui시스템 모니터
DolphieTextualMySQL 모니터
Midnight Commanderncurses파일 매니저
htopncurses프로세스 모니터

AI + TUI

  • Claude Code, Codex CLI, Gemini CLI 등 AI 코딩 에이전트가 TUI 기반
  • LLM으로 TUI 코드 생성이 쉬워짐 (Hatchet 사례: 2일 만에 TUI 완성)
  • Claude Code가 tmux로 TUI 테스트 자동화 수행

선택 가이드

상황추천
Go 프로젝트Bubble Tea
Python 프로젝트Textual
Rust 프로젝트Ratatui
React 경험자Ink
CSS로 스타일링Textual
최고 성능Ratatui
가장 큰 생태계Bubble Tea
SSH 앱 서빙Bubble Tea + Wish

관련 항목