npm(Node Package Manager)에서 짧은 패키지 이름을 등록하려는 개발자들이 예상치 못한 장벽에 부딪히고 있습니다. 최근 한 개발자가 자신의 CLI(명령줄 인터페이스) 도구 이름을 'estee'로 등록하려 했으나, 기존 패키지인 'testem' 및 'espree'와 유사하다는 이유로 npm의 타이포스쿼팅 방지 시스템에 의해 차단되었습니다. 이는 악성 패키지 유포를 막기 위한 조치이지만, 개발자 커뮤니티에서는 과도한 제한이라는 불만이 터져 나오고 있습니다.
npm의 차단 규칙은 주로 '레벤슈타인 거리(Levenshtein distance)'를 기반으로 합니다. 이는 한 문자열을 다른 문자열로 바꾸는 데 필요한 최소 편집(삽입, 삭제, 교체) 횟수를 의미하는데, npm은 이 거리가 2 이하인 이름을 금지하는 것으로 추정됩니다. 문제는 이 고정 임계값이 문자열 길이가 짧을수록 허용 가능한 이름의 상당 부분을 차단한다는 점입니다. 예를 들어, 4글자 이름은 전체 후보 중 극히 일부만으로도 거리 2 이내의 모든 이름을 막을 수 있어, 사실상 짧은 이름을 새로 만드는 것이 거의 불가능해집니다. 'hoid' 같은 대안 이름 역시 'hono', 'uuid' 등 10개 패키지와 유사하다는 이유로 차단되어, 실제 오타로 보기 어려운 이름까지 걸러지는 상황입니다.
이러한 npm의 정책은 악성 패키지로부터 사용자를 보호하려는 중요한 목적을 가지고 있습니다. 실제로 타이포스쿼팅은 인기 패키지의 오타를 이용해 악성 코드를 배포하는 흔한 수법입니다. 그러나 현재의 자동화된 유사성 검사는 짧은 이름의 혁신과 편의성을 저해하고 있습니다. 과거에는 npm 지원팀이 수동으로 예외 처리를 해주기도 했지만, 최근에는 보안 취약점 방지 기능이라며 자동 차단을 우회할 수 없다는 답변을 내놓고 있습니다. 이는 개발자들이 짧고 직관적인 CLI 이름을 사용하기 어렵게 만들며, 결국 'estie'처럼 유사성 검사를 피하는 다른 이름을 찾아야 하는 상황으로 이어지고 있습니다. 악성 패키지 방지의 필요성은 인정하지만, 정교하지 못한 규칙과 수동 예외 처리 부재는 개발자들의 불편을 가중시키고 있습니다.