Doorplate
열려 있는 포트마다 어느 프로젝트의 서버인지 이름표를 붙여 주는 macOS 메뉴바 앱

- Homebrew Cask와 서명된 자동 업데이트(Sparkle)로 배포
- 영어 · 한국어 · 일본어 · 중국어 간체 지원
문제
개발자는 거의 매일 port 3000 is already in use를 봅니다. 보통 lsof -i :3000으로 pid를 찾고 kill을 치지만,
그 pid가 어느 프로젝트의 서버인지는 다시 따로 알아봐야 합니다.
만든 것
메뉴를 열면 5173 @acme/web vite처럼 포트, 프로젝트 이름, 실행 도구가 한 줄로 보입니다.
package.json,Cargo.toml,pyproject.toml, Gradle, Maven,go.mod,.git중 가장 가까운 표식으로 프로젝트 이름을 찾습니다.- Docker Compose 컨테이너는 서비스 이름으로 보여 줍니다. Docker Desktop, OrbStack, Colima를 지원합니다.
- 디버거, inspector, LiveReload 같은 보조 포트는 대표 서버 아래로 묶어 목록을 짧게 유지합니다.
- 행에서 바로 브라우저 열기, Finder에서 보기, 터미널 열기, 서버 종료를 할 수 있습니다.
내린 결정과 이유
- 경쟁 앱을 먼저 조사했습니다. 비슷한 앱 7개의 README, 릴리스, 공개 소스를 비교한 뒤, 아무도 제대로 하지 않는 세 가지(JVM 서버 구분, 보조 포트 묶기, Compose 서비스 이름)를 차별점으로 정했습니다.
- 종료는 조심스럽게. 확인을 받은 뒤 SIGTERM을 보내고, 10초 뒤에도 살아 있으면 기다릴지 강제 종료할지 다시 묻습니다. 사용자가 고르지 않은 프로세스를 끄는 일은 0건이어야 한다는 기준을 먼저 세웠습니다.
- 로컬에서만, 관리자 권한 없이. 포트에 직접 접속하지 않고
sudo나 헬퍼 도구도 쓰지 않습니다. 네트워크 요청은 업데이트 확인 하나뿐이고 사용 통계는 수집하지 않습니다. - 이전 프로젝트에서 배운 점을 반영했습니다. Repot은 유용했지만 새 기기를 살 때만 쓰여서 사용 빈도가 낮았습니다. Doorplate는 매일 생기는 계기(포트 충돌)에 붙도록 주제를 골랐습니다.
결과
- Homebrew Cask(
brew install --cask junjuny0227/tap/doorplate)와 서명된 자동 업데이트(Sparkle)로 배포하고 있습니다. - 영어, 한국어, 일본어, 중국어 간체를 지원합니다.