터미널에서 마법처럼 Rust 코드를 탐색하는 TUI, Oracle!

by DD
3개월 전
조회수 18

Rust 코드 검사를 위한 터미널 기반 TUI 도구인 Oracle을 개발, 5만 라인 이상의 코드베이스에서 DeserializeOwned 구현 위치를 찾는 어려움에서 시작됨

GitHub Copilot CLI를 활용하여 코드 분석, 검토, 최적화, UI 구현 등 전반적인 개발 과정을 단 3일 만에 완료, 개발 생산성을 극대화함

Fuzzy matching 기반의 지능형 검색, 의존성 시각화, 다양한 테마, 부드러운 애니메이션 등 사용자 친화적인 기능들을 구현

syn crate를 이용한 Rust 코드 파싱, Ratatui를 활용한 TUI 레이아웃 구성, fuzzy-matcher를 이용한 검색 기능 구현 등 기술적 난제 해결

GitHub Copilot CLI를 활용하여 syn crate 사용법, Ratatui 레이아웃, 비동기 패턴, 이징 함수(Easing Function) 등 다양한 기술적 문제 해결

향후 심볼 참조, 정의로 이동, 매크로 확장 뷰어, 호출 그래프 시각화 등 기능 추가 계획 발표

Oracle의 핵심 아키텍처: Rust 코드 파싱과 TUI 렌더링

Oracle은 Rust 코드 파싱(Parsing)을 위해 syn crate를 사용하며, TUI(Terminal User Interface) 렌더링은 Ratatui 라이브러리를 기반으로 한다. syn은 Rust 코드를 AST(Abstract Syntax Tree)로 변환하여 구조체(Struct), 열거형(Enum), 트레이트(Trait) 등 다양한 코드 요소를 분석한다.

Lazy Loading: 초기 렌더링 속도를 향상시키기 위해, 화면에 보이는 항목만 파싱

캐싱(Caching): 파싱 결과를 캐싱하여 중복 파싱 방지

백그라운드 스레드(Background Threads): 무거운 작업을 백그라운드 스레드로 처리하여 UI 응답성 유지

Ratatui는 터미널 UI(Terminal UI)를 구축하기 위한 라이브러리로, 레이아웃 관리, 위젯 렌더링, 사용자 입력 처리를 담당한다. Oracle은 Ratatui의 레이아웃 시스템을 활용하여 패널, 테마, 애니메이션을 구현했다.

GitHub Copilot CLI를 활용한 개발 생산성 향상

GitHub Copilot CLI는 Oracle 개발 과정에서 다양한 문제 해결에 기여했다. syn crate 사용법, Ratatui 레이아웃 구성, 비동기 패턴, 이징 함수(Easing Function) 등 어려운 문제에 대한 코드 제안(Code Suggestion)설명(Explanation)을 제공했다.

syn crate: 구조체 필드 추출, 가시성 처리 등 syn crate 사용에 대한 도움을 받아 개발 시간 단축

Ratatui 레이아웃: 복잡한 TUI 레이아웃을 구성하는 데 필요한 팁과 예제를 제공

검색 기능: fuzzy-matcher를 활용한 검색 기능 구현에 대한 도움을 받아 사용자 경험 개선

Copilot CLI는 개발자가 문서 검색(Documentation Search)에 소요하는 시간을 줄이고, 문제 해결에 집중할 수 있도록 지원했다.

TUI 성능 최적화: 60fps 애니메이션과 빠른 검색

Oracle은 사용자 경험을 향상시키기 위해 다양한 성능 최적화를 적용했다. 특히, 부드러운 애니메이션과 빠른 검색 속도를 구현하는 데 중점을 두었다.

애니메이션: 60fps의 부드러운 스크롤을 위해 이징 함수(Easing Function)를 활용한 스크롤 인터폴레이션(Scroll Interpolation) 적용

검색: fuzzy-matcher를 활용한 빠른 검색(Fast Search), 활성 탭 내 검색, 검색 결과 제한, 캐싱, 렌더링 최적화

병렬 처리: 대규모 코드베이스 파싱 시 터미널이 멈추는 문제를 해결하기 위해 백그라운드 스레드(Background Thread)를 활용

이러한 최적화를 통해 Oracle은 터미널 환경에서도 쾌적한 사용자 경험을 제공한다.

의존성 관리 및 외부 API 연동

Oracle은 Cargo.toml 파일을 파싱하여 의존성 정보를 시각화하고, crates.io API를 통해 crate 정보를 제공한다. 이를 위해 cargo_metadata crate를 사용하여 의존성 트리를 구축하고, reqwest를 사용하여 crates.io API와 GitHub API를 호출한다.

Cargo.toml 파싱: cargo_metadata crate를 사용하여 의존성 트리 구축

crates.io API 연동: reqwest를 사용하여 crate 정보 및 GitHub 별점, 라이선스 정보 표시

GitHub API 연동: GitHub API를 호출하여 crate의 GitHub 정보를 표시, API 호출 횟수 제한 문제 해결을 위해 GITHUB_TOKEN 환경 변수 지원

이러한 기능을 통해 Oracle은 Rust 프로젝트의 의존성 정보를 쉽게 파악하고, 관련 정보를 빠르게 확인할 수 있도록 돕는다.

터미널 환경에서의 사용자 경험 개선

Oracle은 터미널 환경에서 사용성을 극대화하기 위해 다양한 기능을 제공한다. Vim 스타일의 키 바인딩, 다양한 테마, SSH 환경에서의 원활한 작동 등을 지원한다.

Vim 스타일 키 바인딩: j/k 키를 이용한 스크롤, / 키를 이용한 검색 등

테마 지원: 기본 Dark, Nord, Catppuccin Mocha, Dracula 등 4가지 테마 제공

SSH 환경 지원: SSH 환경에서도 문제없이 작동하도록 설계

GitHub API Rate Limit: GitHub API Rate Limit 문제 해결을 위해 GITHUB_TOKEN 환경 변수 지원

이러한 기능들을 통해 Oracle은 터미널 환경에서도 편리하고 직관적인 코드 탐색 경험을 제공한다.

향후 기능 개선 및 확장 계획

Oracle 개발자는 향후 기능 개선 및 확장을 위한 다양한 계획을 가지고 있다. 이러한 계획들은 Oracle의 활용성을 더욱 높이고, 사용자 경험을 향상시킬 것으로 기대된다.

심볼 참조(Symbol References): 함수/타입이 사용되는 위치 표시

정의로 이동(Jump to Definition): 특정 코드 요소의 정의로 바로 이동

매크로 확장 뷰어(Macro Expansion Viewer): 매크로 확장 결과 확인

호출 그래프 시각화(Call Graph Visualization): 함수 호출 관계 시각화

Git 통합: 코드 변경 이력 표시

JSON/HTML Export: 정적 문서 생성

LSP 통합: rust-analyzer 연동을 통한 더 깊은 분석

이러한 기능들이 추가되면 Oracle은 더욱 강력한 Rust 코드 검사 도구로 발전할 것이다.

I Built a TUI That Makes Rust Code Inspection Feel Like Magic ✨