← 최신 논문
💻 컴퓨터 과학

Dormant at the core: Inactivity, dependence and exit among the most downloaded npm packages

이 연구는 가장 많이 다운로드된 npm 패키지들 사이에서 휴면 상태가 널리 퍼져 있으며 주로 조용히 진행되고 있음을 밝히며, 휴면 패키지들이 알려진 취약점을 거의 보유하고 있지 않음에도 불구하고 유지 관리자에 의한 명시적인 지원 중단(deprecation)이 의존 프로젝트들로 하여금 이러한 비활성 의존성을 제거하도록 유도하는 주요 신호가 된다는 점을 드러낸다.

원저자: Revanth Krishna Maddula

게시일 2026-11-05
📖 4 분 읽기☕ 가벼운 읽기

원저자: Revanth Krishna Maddula

원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. ✨ 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

현대적인 소프트웨어는 거의 처음부터 직접 만들어지지 않습니다. 대신, 누군가가 작성한 작은 코드 조각인 사전 제작된 부품들로 이루어진 거대한 구조물처럼 조립됩니다. 자바스크립트의 세계에서 이러한 부품들을 하나로 묶어주는 시스템을 npm이라고 부르며, 이는 개발자들이 웹사이트부터 모바일 앱까지 모든 것을 구축하기 위해 코드 패키지를 다운로드하는 디지털 창고와 같습니다. 이 부품들 대부분은 여가 시간에 작업하는 자원봉사자들에 의해 유지 관리됩니다. 한 자원봉사자가 특정 부품에 대한 작업을 중단하면, 그 코드 조각은 휴면 상태가 됩니다. 즉시 고장 나는 것은 아니지만, 업데이트, 버그 수정 또는 보안 패치를 더 이상 받지 못하게 됩니다. 이는 숨겨진 위험을 초래합니다. 만약 널리 사용되는 부품이 업데이트를 멈추면, 그 부품에 의존하는 수천 개의 프로젝트는 문제가 발생했을 때 수리할 수 없는 구성 요소를 떠안게 됩니다. 문제는 단순히 이 부품들이 업데이트를 멈추느냐가 아니라, 실제로 얼마나 많은 부품이 휴면 상태인지, 얼마나 많은 사람이 그것을 사용하고 있는지, 그리고 사용하는 사람들이 사용을 중단해야 한다는 사실을 알고 있는지입니다.

레반트 크리슈나 마둘라(Revanth Krishna Maddula)라는 연구자는 이 시스템에서 가장 인기 있는 부품들을 조사하기 위해 나섰습니다. 그는 매주 최소 100만 회 이상 다운로드되는 약 16,000개의 패키지를 살펴보았습니다. 이것들은 자바스크립트 생태계의 핵심 구성 요소이자 가장 큰 비중을 차지하는 부품들입니다. 그는 2026년 10월까지의 이 패키지들의 전체 이력을 연구함으로써, 얼마나 많은 패키지가 새로운 버전을 출시하는 것을 멈췄는지, 여전히 얼마나 많은 사람이 사용하고 있는지, 그리고 어떤 부품이 침묵할 때 시스템이 어떻게 반응하는지를 확인하고자 했습니다. 연구는 '휴면'에 대해 구체적인 정의를 내렸는데, 지난 2년 동안 안정적인 완성 버전을 발표하지 않은 패키지를 의미합니다. 이 기간은 단순히 작업이 완료된 것과 방치된 것을 구분하기 위해 선택되었습니다.

연구 결과는 휴면 상태가 예상보다 훨씬 더 흔하다는 것을 보여줍니다. 연구 종료 시점에, 이 상위 패키지 중 약 35%가 2년 동안 새로운 버전을 출시하지 않았습니다. 이러한 침묵은 이름 없는 도구나 드물게 사용되는 도구에 국한되지 않고 시스템의 심장부까지 도달했습니다. 가장 많이 다운로드되는 100개의 패키지 중 26%가 휴면 상태였습니다. 실제로 일부 침묵하는 패키지들은 8년 넘게 업데이트되지 않았습니다. 이러한 광범위한 비활성 상태에도 불구하고, 침묵은 거의 항상 깨지지 않은 채로 유지되었습니다. 연구자가 패키지에 첨부된 공개 노트인 README 파일을 확인했을 때, 휴면 상태인 패키지 중 단 3%만이 더 이상 유지 관리되지 않는다고 명시적으로 밝히고 있음을 발견했습니다. 대부분의 경우 코드는 단순히 변화를 멈췄으며, 사용자들은 프로젝트가 완성된 것인지 아니면 잊힌 것인지 추측할 수밖에 없었습니다.

이러한 침묵의 위험성은 시스템의 활성 부품들이 이 휴면 부품들과 깊게 연결되어 있다는 점에 있습니다. 연구는 패키지 간의 관계를 매핑했으며, 활발하게 유지 관리되는 패키지의 1/4 이상이 적어도 하나의 휴면 패키지에 직접 의존하고 있다는 것을 발견했습니다. 일부 침묵하는 패키지들은 너무나 중심적이어서, 1,000개 이상의 고트래픽 패키지로부터 의존성 체인을 통해 도달할 수 있었습니다. 이들 중 다수는 몇 년 전에 완료되었을 수도 있는 작고 단순한 도구들이었지만, 다른 것들은 소프트웨어 툴링의 토대를 형성하는 상당한 규모의 모듈들이었습니다. 문제는 사용자들이 도구가 완성된 것인지 아니면 방치된 것인지 쉽게 구별할 수 없다는 점인데, 시스템이 이 둘을 구분할 수 있는 명확한 신호를 제공하지 않기 때문입니다.

의존성이 휴면 상태가 되면 사용자들은 대개 빠르게 반응하지 않습니다. 연구는 업데이트가 중단된 패키지에 대한 의존성을 사용자가 제거하는 데 얼마나 걸리는지 추적했습니다. 2년 동안 사용자들은 휴면 패키지에 대한 의존성을 약 27%만 제거했습니다. 이 비율은 활성 패키지에 대한 의존성을 제거하는 비율보다 약간 높은 수준이었으며, 이는 패키지가 업데이트를 멈췄다는 사실 자체만으로는 행동을 유도하기에 충분하지 않았음을 시사합니다. 연구진은 서로 다른 유형의 경고가 이러한 행동을 바꾸는지 테스트했습니다. 그들은 프로젝트 문서에 적힌 메모가 사용자의 패키지 제거 여부에 감지할 수 있는 영향을 미치지 못한다는 것을 발견했습니다. 사용자가 행동하게 만든 유일한 신호는 레지스트리 자체에서 발행한 공식적인 '사용 중단(deprecation)' 공지였습니다. 패키지가 시스템에 의해 공식적으로 사용 중단 처리되었을 때, 사용자들은 65%의 비율로 의존성을 제거했습니다. 개발자가 소프트웨어를 설치할 때 나타나는 이 공식적인 경고는, 침묵하는 코드를 벗어나도록 생태계를 움직이게 만든 유일한 메커니즘이었습니다.

보안 측면의 문제도 존재합니다. 대부분의 휴면 패키지는 최신 버전에서 알려진 보안 결함이 없었지만, 결함이 있는 패키지들은 매우 위태로운 처지에 놓여 있었습니다. 연구에 따르면 소수의 휴면 패키지들이 알려진 취약점을 보유하고 있었으나, 원래의 관리자에 의해 더 이상 수정될 수 없는 상태였습니다. 코드가 더 이상 업데이트되지 않기 때문에, 이러한 결함은 상단에서 패치될 수 없었습니다. 이 패키지들에 의依赖하는 사용자들은 이를 제거하거나, 다른 도구로 교체하거나, 혹은 스스로 보안 구멍을 직접 고쳐야만 했습니다. 이 상황은 시스템의 결정적인 격차를 강조합니다. 널리 사용되는 부품이 유지 관리를 멈추면, 그 안전에 대한 책임은 전적으로 사용자에게 전가되며, 종종 사용자들은 그 사실조차 알지 못합니다.

연구는 휴면 상태가 소프트웨어 생태계의 상당 부분에서 나타나는 정상적이고도 조용한 상태라고 결론짓습니다. 작은 도구가 완성된 것이라면 그것이 반드시 결함은 아니지만, 소통의 부재는 사용자들이 그 차이를 알 수 없게 만듭니다. 이 연구는 현재의 시스템이 사용자들이 자신의 도구 상태를 추측하는 것에 너무 많이 의존하고 있다고 지적합니다. 이 위험을 관리하는 가장 효과적인 방법은 관리자가 패키지 작업을 중단할 때 공식적인 사용 중단 메커니즘을 사용하여, 가급적이면 사용자에게 대체 도구를 안내하는 것입니다. 생태계가 건강하게 유지되려면, 레지스트리는 휴면 상태와 사용 중단을 더 가시적으로 만들어, 침묵하는 패키지가 문제가 되기 전에 그 신호가 개발자들에게 확실히 전달되도록 해야 합니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →