왜 나는 lsof를 Rust 기반 'Sniper' 버튼으로 교체했는가
Source: Dev.to
모든 개발자에게는 “가장 좋아하는” 번거로운 워크플로우가 있습니다. 저는 로컬 개발 포트를 해제하지 않는 좀비 프로세스를 잡아내는 작업이 그랬습니다.
한 시간에 다섯 번째로 터미널에 다음과 같이 입력해 본 적이 있다면 그 고통을 잘 아실 겁니다:
lsof -i :3000
kill -9 <PID>
이 불편함을 자동화하기 위해 Recoil이라는 macOS용 전술 시스템 모니터를 만들었습니다. 이제 시스템 트레이에서 직접 프로세스를 “스나이프”할 수 있습니다.
목표: 높은 성능, 낮은 오버헤드
하루 종일 열려 있는 시스템 유틸리티를 만들 때 Electron은 선택지에서 제외되었습니다. 프로세스를 죽이기 위해 150 MB짜리 보조 앱을 원하지 않았습니다.
Tauri v2를 선택한 이유는 다음과 같습니다:
- 시스템 Webview 활용 – 약 5 MB 크기의 번들 생성.
- 시스템 작업을 Rust로 구현 – 텔레메트리와 프로세스 관리를 위해 시스템 API와 직접 연동.
- UI는 React – 인터페이스를 현대적이고 “전술적”으로 유지.
기술 깊이 파고들기: Rust 코어
Recoil에서는 포트를 스캔하는 무거운 작업을 Rust로 처리합니다. 아래는 시스템 명령어와 인터페이스해 포트‑점유 PID를 찾는 간소화된 코드 예시입니다:
// A peek into the command logic
#[tauri::command]
pub fn get_active_ports() -> Vec {
// We use a combination of sysinfo and lsof logic
// to map ports to process names and IDs safely.
let mut system = System::new_all();
system.refresh_all();
// ... logic to filter and return active listeners
}
스캔 로직을 Tauri 앱의 Rust “백엔드”에 두면, 시스템 부하가 높을 때도 UI가 반응성을 유지합니다.
결과: “스나이퍼” 경험
Recoil의 핵심은 Sniper Button—환경을 되찾아 주는 시각적 도구입니다.
주요 기능
- 실시간 포트 모니터링 – 새로운 리스너를 자동으로 감지.
- 전술적 텔레메트리 – 실시간 CPU 및 메모리 추적.
- 최소한의 발자국 – 유사한 Electron 기반 모니터에 비해 거의 무시할 수준의 RAM 사용량.
Tauri v2로 개발하면서 얻은 교훈
Tauri v2는 특히 개선된 플러그인 시스템 덕분에 큰 도약을 이뤘습니다. 시스템 트레이 지원 및 윈도우 그림자 처리 구현이 v1보다 훨씬 매끄러웠습니다. 웹 개발 배경을 가지고 “진짜” 시스템 도구를 만들고 싶다면 이 스택을 주목하세요.
오픈 소스 및 피드백
Recoil은 오픈 소스이며 현재 Windows와 Linux 최적화를 도와줄 기여자를 찾고 있습니다.
- Repository:
- Live site:
여러분은 일상적인 워크플로우에서 포트 충돌을 어떻게 해결하고 계신가요? 아직도 kill -9 순수주의자이신가요, 아니면 GUI 도구로 전환하셨나요?