개발자라면 누구나 겪는 그 문제
로컬에서 개발하다 보면 누구나 한 번쯤 이런 경험을 합니다. npm start를 눌렀는데 "Port 3000 is already in use"라는 에러가 뜨는 순간. 분명 서버를 껐다고 생각했는데 뭔가 좀비 프로세스가 남아 있거나, 다른 프로젝트에서 띄워둔 서버를 깜빡하고 있었거나. 그러면 터미널에서 lsof -i :3000을 치고, PID를 확인하고, kill -9를 날리는 일련의 과정을 반복하게 됩니다.
이 과정이 매번 번거롭다고 느꼈던 개발자가 만든 도구가 바로 Sonar입니다. localhost에서 돌아가고 있는 프로세스들을 한눈에 보여주고, 선택적으로 종료할 수 있는 아주 작은 CLI 도구입니다.
Sonar가 하는 일
Sonar의 핵심 기능은 단순합니다. 터미널에서 sonar를 입력하면 현재 localhost에서 실행 중인 모든 프로세스를 포트 번호, 프로세스 이름, PID와 함께 깔끔하게 보여줍니다. 그리고 거기서 바로 특정 프로세스를 종료할 수 있습니다.
기존에 이 작업을 하려면 운영체제별로 다른 명령어를 기억해야 했습니다. macOS나 Linux에서는 lsof -i -P -n | grep LISTEN 같은 명령어를 쓰고, Windows에서는 netstat -ano | findstr LISTENING을 써야 합니다. 출력 형식도 가독성이 좋지 않아서 원하는 정보를 눈으로 찾아야 하는 불편함이 있었습니다.
Sonar는 이 과정을 하나의 명령어로 통합합니다. 내부적으로 OS의 네트워크 관련 시스템 콜을 활용해 열려 있는 포트를 스캔하고, 해당 포트를 점유하고 있는 프로세스 정보를 매핑해서 보여주는 방식입니다. 특정 포트만 확인하고 싶으면 sonar --port 3000처럼 필터링할 수도 있고, sonar --kill 3000으로 해당 포트의 프로세스를 바로 종료할 수도 있습니다.
비슷한 도구들과의 비교
사실 이 문제를 해결하려는 시도는 Sonar가 처음이 아닙니다. Node.js 생태계에서는 kill-port라는 npm 패키지가 오래전부터 사용되어 왔고, fkill-cli는 프로세스를 인터랙티브하게 종료할 수 있는 도구로 인기를 얻었습니다. macOS 사용자들 사이에서는 GUI 기반의 "Gas Mask"나 시스템 모니터링 도구를 활용하는 경우도 있습니다.
Sonar가 이들과 차별화되는 점은 경량성과 단일 목적 설계입니다. Node.js 런타임에 의존하지 않고, 설치 과정도 간단하며, "localhost에서 뭐가 돌고 있는지 확인하고 필요하면 죽인다"는 하나의 작업에만 집중합니다. 유닉스 철학의 "한 가지 일을 잘 하는 도구"를 그대로 따르고 있는 셈입니다.
다만 기능의 범위가 매우 좁기 때문에, 이미 shell alias로 lsof 명령어를 래핑해서 쓰고 있는 개발자라면 굳이 별도 도구를 설치할 필요가 없을 수도 있습니다. 예를 들어 .zshrc에 alias ports='lsof -i -P -n | grep LISTEN' 한 줄만 추가해도 비슷한 효과를 얻을 수 있으니까요.
실무에서의 활용
이 도구가 특히 빛을 발하는 시나리오가 몇 가지 있습니다. 첫째, 마이크로서비스 아키텍처를 로컬에서 개발할 때입니다. 프론트엔드(3000), API 서버(8080), 데이터베이스(5432), Redis(6379) 등 여러 서비스를 동시에 띄워놓고 작업하다 보면 어떤 포트에 뭐가 물려 있는지 파악하기 어려워집니다.
둘째, Docker 컨테이너와 로컬 프로세스가 혼재할 때입니다. Docker로 띄운 서비스와 로컬에서 직접 실행한 서비스가 같은 포트를 사용하려고 충돌하는 경우, 어느 쪽이 포트를 점유하고 있는지 빠르게 확인할 수 있습니다.
셋째, 페어 프로그래밍이나 온보딩 상황에서 유용합니다. 새로 합류한 팀원이 로컬 환경을 설정하다가 포트 충돌 문제를 만났을 때, lsof 명령어의 복잡한 옵션을 설명하는 것보다 sonar를 알려주는 게 훨씬 직관적입니다.
마무리
Sonar는 대단한 혁신이라기보다는 개발자의 일상적인 불편함을 깔끔하게 해결해주는 작은 유틸리티입니다. "이 정도는 직접 명령어 쳐도 되지 않나?"라는 생각이 들 수도 있지만, 반복되는 마찰을 줄여주는 도구의 가치는 사용해봐야 알 수 있습니다.
여러분은 로컬 개발 환경에서 반복적으로 겪는 작은 불편함을 어떻게 해결하고 계신가요? 직접 스크립트를 만들어 쓰시나요, 아니면 이런 전용 도구를 선호하시나요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공