Npm (소프트웨어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
npm은 자바스크립트 패키지 관리자이다. 아이작 Z. 슐루터가 개발했으며, 자바스크립트 모듈 패키징의 문제점을 해결하기 위해 펄의 CPAN, PHP의 PEAR와 같은 다른 프로젝트에서 영감을 받았다. 2014년 로리 보스가 공동 창업자로 참여하여 npm Inc.가 설립되었고, 2020년 마이크로소프트의 자회사인 GitHub에 인수되었다. npm은 명령줄 인터페이스를 통해 프로젝트 종속성을 관리하며, package.json 파일을 사용하여 프로젝트의 모든 종속성을 설치할 수 있다. npm 레지스트리는 다양한 JavaScript 모듈을 제공하지만, 보안 문제와 삭제 사건 등으로 인해 여러 차례 논란이 있었다. npm 외에도 Yarn, pnpm, Bun, Deno 등과 같은 대안들이 존재한다.
더 읽어볼만한 페이지
- 아티스틱 라이선스 소프트웨어 - 펄
펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다. - 아티스틱 라이선스 소프트웨어 - 패럿 가상 머신
패럿 가상 머신은 다양한 프로그래밍 언어의 실행 지원 및 언어 간 상호 운용성을 목표로 설계되었으며, 레지스터 기반 구조, 함수형 프로그래밍 기능, 파서 문법 엔진을 포함한 컴파일러 작성 도구 모음을 제공한다. - 명령줄 소프트웨어 - 어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다. - 명령줄 소프트웨어 - FFmpeg
FFmpeg은 오디오 및 비디오 데이터를 다루는 자유 소프트웨어 프로젝트로, 다양한 코덱과 형식을 지원하며 멀티미디어 응용 프로그램에 활용되고 2011년 Libav로 포크되기도 했으나 통합 과정을 거쳤다. - 자유 패키지 관리 시스템 - F-Droid
F-Droid는 2010년 키어런 걸트니엑스가 설립한 안드로이드용 자유 소프트웨어 앱 저장소로, 구글 플레이 스토어에 없는 자유/오픈 소스 소프트웨어 앱을 제공하며 감시, 검열 저항, 개인 정보 보호에 중점을 둔 클라이언트 앱, 저장소 관리 도구, 웹사이트 생성기 등의 하위 프로젝트로 구성된다. - 자유 패키지 관리 시스템 - 어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다.
Npm (소프트웨어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | npm |
종류 | 패키지 관리 시스템 |
개발자 | Isaac Z. Schlueter |
개발 회사 | npm, Inc.(GitHub의 자회사, Microsoft의 자회사) |
출시일 | 2010년 1월 12일 |
최신 버전 | 9.7.0 |
최신 버전 출시일 | 2023년 5월 31일 |
프로그래밍 언어 | 자바스크립트 |
플랫폼 | 크로스 플랫폼 |
라이선스 | Artistic License 2.0 |
웹사이트 | npm 공식 웹사이트 |
2. 역사
npm은 온전히 자바스크립트로 작성되었으며, 아이작 Z 슐루터(Isaac Z. Schlueter)가 펄의 CPAN과 PHP의 PEAR와 같은 다른 유사한 프로젝트의 단점에서 영감을 받아 개발하였다.[44] npm은 셸 스크립트인 pm의 JavaScript 대체물이다.[6]
2. 1. 개발 배경
npm은 모듈 패키징이 엉망으로 완성되는 것을 관찰하고 펄의 CPAN과 PHP의 PEAR와 같은 기타 유사한 프로젝트의 단점에서 영감을 받은 아이작 Z 슐루터(Isaac Z. Schlueter)가 개발하였다.[44]2. 2. npm Inc.
2014년, Laurie Voss는 공동 창업자로 참여하여 미국 캘리포니아주 오클랜드에서 npm Inc.를 설립했다.[7] 2018년 7월, Bryan Bogensberger가 최고 경영자(CEO)로 합류했으나, 2019년 9월에 사임했다.[7] Laurie Voss는 Bryan Bogensberger가 사임하기 전인 2019년 7월에 사임했다.[8]2020년 3월, npm은 마이크로소프트의 자회사인 GitHub에 인수되었다.
3. 사용법 (Usage)
npm은 특정 프로젝트의 지역 종속성 뿐만 아니라 전역으로 설치된 JavaScript 도구도 관리할 수 있다.[9] 지역 프로젝트의 종속성 관리자로 사용될 때, npm은 `package.json` 파일을 통해 한 번의 명령으로 프로젝트의 모든 종속성을 설치할 수 있다.[10] `package.json` 파일에서 각 종속성은 버전의 유효 범위를 시맨틱 버전 관리 체계를 사용하여 지정할 수 있으며, 이를 통해 개발자는 원치 않는 변경 사항을 방지하면서 패키지를 자동 업데이트할 수 있다.[11] npm은 또한 개발자가 특정 버전으로 패키지에 태그를 지정할 수 있도록 버전 증가 도구를 제공한다.[12] npm은 또한 `package-lock.json` 파일을 제공하며,[13] 이 파일에는 `package.json`에서 시맨틱 버전 관리를 평가한 후 프로젝트에서 사용된 정확한 버전의 항목이 포함되어 있다.
4. 클라이언트 (Client)
npm의 명령줄 인터페이스 클라이언트를 통해 사용자는 레지스트리에 있는 JavaScript 모듈을 사용하고 배포할 수 있다.[14]
2018년 2월, 리눅스 시스템에서 `sudo npm`을 실행하면 시스템 파일의 소유권이 변경되어 운영 체제가 영구적으로 손상되는 문제(5.7.0 버전)가 발견되었다.[15]
npm 버전 6에서는 개발자가 설치된 패키지의 보안 취약점을 식별하고 수정하는 데 도움이 되는 감사 기능이 도입되었다.[16] 보안 취약점의 출처는 Node Security Platform (NSP)에서 발견된 보고서에서 가져왔으며, npm이 NSP를 인수한 이후 npm에 통합되었다.[17]
5. 레지스트리 (Registry)
레지스트리의 패키지는 ECMAScript 또는 CommonJS 형식이며, JSON 형식의 메타데이터 파일을 포함하고 있다.[18]
310만 개 이상의 패키지가 메인 npm 레지스트리에서 사용 가능하다.[19]
레지스트리는 제출에 대한 심사 과정을 거치지 않으므로, 레지스트리에서 발견된 패키지는 품질이 낮거나, 안전하지 않거나, 악성일 수 있다.[18] 대신 npm은 사용자의 신고에 의존하여 품질이 낮거나, 안전하지 않거나, 악성인 패키지가 정책을 위반하는 경우 해당 패키지를 삭제한다.[20] npm은 개발자가 패키지의 품질을 판단하는 데 도움이 되도록 다운로드 수 및 종속 패키지 수를 포함한 통계를 제공한다.[21]
내부적으로 npm은 공개적으로 사용 가능한 데이터를 관리하기 위해 NoSQL Couch DB를 사용한다.[22]
6. 보안 및 주요 사건 (Security and disruption)
npm은 방대한 패키지 생태계를 가지고 있지만, 이로 인해 보안 문제와 중단 사태가 발생하기도 했다.
- 2018년 11월, 인기 패키지 `event-stream` 버전 3.3.6의 종속성으로 `flatmap-stream`이라는 악성 패키지가 추가된 사실이 발견되었다.[32] 이 악성 패키지는 암호화된 페이로드를 포함하고 있었고, 특정 애플리케이션에서 비트코인을 탈취했다.[33]
- 2021년 5월, 주당 3백만 건 이상 다운로드된 npm 패키지 `pac-resolver`에서 임의 코드 실행 취약점이 발견되었다.[34] 이 취약점은 패키지가 구성 파일을 처리하는 방식에서 발생했으며, 버전 5 이상에서 수정되었다.[35]
- 2022년 1월, 인기 패키지 `colors`의 관리자는 무한 루프에서 쓰레기 텍스트를 출력하는 변경 사항을 푸시했다.[25] 관리자는 또한 다른 인기 패키지 `faker`의 저장소와 npm의 패키지를 삭제하고, "애런 스워츠에게 무슨 일이 일어났나?"라는 내용을 담은 README로 대체했다.[36]
- 2023년 5월, `bignum`을 포함한 여러 npm 패키지가 악용되어 피해를 입은 기기에서 사용자 자격 증명 및 정보를 탈취한 사실이 발견되었다. 연구자들은 이러한 패키지가 아마존 S3 버킷과 `node-gyp` 명령줄 도구를 사용하는 익스플로잇을 통해 손상되었음을 발견했다.[37]
6. 1. left-pad 사건
2016년 3월, `left-pad`라는 패키지가 개인 소프트웨어 엔지니어인 아제르 코출루와 Kik 사이의 이름 분쟁으로 인해 삭제되었다.[23][24] 이 패키지는 플랫폼에서 큰 인기를 얻었으며, 삭제되기 전까지 1,500만 건의 다운로드를 기록했고 수천 개의 프로젝트에서 의존 관계를 맺고 있었다.[23][25] 바벨 및 Webpack을 포함한 JavaScript 생태계에 중요한 여러 프로젝트가 `left-pad`에 의존했으며, 이로 인해 사용할 수 없게 되었다.[26] 이 패키지는 3시간 후에 다시 게시되었지만,[27] 광범위한 중단을 야기하여 npm은 유사한 사건의 재발을 방지하기 위해 삭제 관련 정책을 변경했다.[28]6. 2. peacenotwar
2022년 3월, `node-ipc` 패키지의 관리자이자 개발자인 브랜든 노자키 밀러는 `peacenotwar`를 패키지의 종속성으로 추가했다. `peacenotwar`는 벨라루스 또는 러시아 IP 주소를 가진 컴퓨터의 하드 드라이브 내용을 하트 이모티콘으로 재귀적으로 덮어쓰는 악성코드를 포함하고 있었다. 이 패키지는 텍스트 파일을 컴퓨터에 남겨 러시아의 우크라이나 침공에 항의하는 메시지를 담고 있었다. `node-ipc`를 종속성으로 사용하는 Vue.js는 종속성을 안전한 버전으로 고정하지 않았기 때문에, 최신 패키지로 종속성이 가져와진 경우 Vue.js의 일부 사용자가 악성 패키지의 영향을 받았다.[29][30] 영향을 받은 종속성은 유니티 허브 3.1 버전에도 잠시 존재했지만, 같은 날 문제 해결을 위한 핫픽스가 출시되었다.[31]6. 3. 기타 주요 사건
2018년 11월, 인기 패키지 `event-stream` 버전 3.3.6의 종속성으로 `flatmap-stream`이라는 악성 패키지가 추가된 사실이 발견되었다.[32] 이 악성 패키지는 암호화된 페이로드를 포함하고 있었고, 특정 애플리케이션에서 비트코인을 탈취했다.[33]2021년 5월, 주당 3백만 건 이상 다운로드된 npm 패키지 `pac-resolver`에서 임의 코드 실행 취약점이 발견되었다.[34] 이 취약점은 패키지가 구성 파일을 처리하는 방식에서 발생했으며, 버전 5 이상에서 수정되었다.[35]
2022년 1월, 인기 패키지 `colors`의 관리자는 무한 루프에서 쓰레기 텍스트를 출력하는 변경 사항을 푸시했다.[25] 관리자는 또한 다른 인기 패키지 `faker`의 저장소와 npm의 패키지를 삭제하고, "애런 스워츠에게 무슨 일이 일어났나?"라는 내용을 담은 README로 대체했다.[36]
2023년 5월, `bignum`을 포함한 여러 npm 패키지가 악용되어 피해를 입은 기기에서 사용자 자격 증명 및 정보를 탈취한 사실이 발견되었다. 연구자들은 이러한 패키지가 아마존 S3 버킷과 `node-gyp` 명령줄 도구를 사용하는 익스플로잇을 통해 손상되었음을 발견했다.[37]
7. 대안 (Alternatives)
npm을 대체하는 오픈 소스 대안으로 `ied`, `pnpm`, `npmd`, Yarn 등이 있으며, 이 중 Yarn은 2016년 10월 페이스북이 공개했다.[45] 이들은 모두 공용 npm 레지스트리와 호환되며 기본적으로 이를 사용하지만, 각기 다른 클라이언트 사이드 경험을 제공한다. 이러한 대안들은 npm 클라이언트에 비해 성능 및 결정론을 개선하는 데 초점을 둔다.[46]
npm의 오픈 소스 대안에는 pnpm, Yarn[38], Bun, Deno가 있다. Deno와 Bun은 자바스크립트 런타임도 제공하는 반면, Deno만이 NPM 레지스트리 또는 모든 중앙 집중식 저장소와 독립적으로 작동한다.[39] 2024년 1월 현재 NPM 레지스트리에 대한 Deno의 지원은 여전히 진행 중이다.[40] 이들은 모두 공개 npm 레지스트리와 호환되며 기본적으로 이를 사용하지만, 일반적으로 npm 클라이언트와 비교하여 성능 및 결정성을 개선하는 데 중점을 둔 다양한 클라이언트 측 경험을 제공한다.[41]
참조
[1]
웹사이트
Microsoft-owned GitHub to acquire JavaScript package manager Npm
https://www.geekwire[...]
2020-03-17
[2]
웹사이트
Earliest releases of npm
https://github.com/n[...]
2019-01-05
[3]
웹사이트
A Beginner's Guide to npm – the Node Package Manager
https://www.sitepoin[...]
2016-03-30
[4]
웹사이트
npm
https://www.npmjs.co[...]
2024-05-15
[5]
웹사이트
Forget CommonJS. It's dead. **We are server side JavaScript.**
https://github.com/j[...]
2013-03-25
[6]
웹사이트
NPM/Cli
https://github.com/n[...]
[7]
웹사이트
Bryan Bogensberger, CEO of JavaScript Package Startup NPM, Resigns
https://www.business[...]
2021-06-30
[8]
웹사이트
NPM Co-Founder and Chief Data Officer Laurie Voss Resigns
https://www.business[...]
2021-06-30
[9]
웹사이트
How To Use npm to Manage Node.js Packages on a Linux Server
https://www.digitalo[...]
2016-10-22
[10]
웹사이트
npm-install
https://docs.npmjs.c[...]
2016-10-22
[11]
웹사이트
semver
https://web.archive.[...]
2016-10-22
[12]
웹사이트
npm-version
https://docs.npmjs.c[...]
2016-10-29
[13]
웹사이트
What is the need of package-lock.json in Node?
https://www.codeproj[...]
2017-08-21
[14]
웹사이트
Ampersand.js – Learn
https://ampersandjs.[...]
2016-07-22
[15]
웹사이트
Critical Linux filesystem permissions are being changed by latest version
https://github.com/n[...]
2018-02-25
[16]
웹사이트
'npm audit': identify and fix insecure dependencies
https://blog.npmjs.o[...]
2018-08-14
[17]
웹사이트
The Node Security Platform service is shutting down 9/30
https://blog.npmjs.o[...]
2018-08-14
[18]
서적
2012 International Conference for Internet Technology and Secured Transactions
IEEE
2016-07-22
[19]
웹사이트
npm {{!}} Home
https://www.npmjs.co[...]
2024-06-27
[20]
웹사이트
npm Code of Conduct: acceptable package content
https://docs.npmjs.c[...]
2017-05-09
[21]
웹사이트
npm-stat: download statistics for NPM packages
https://web.archive.[...]
2016-08-09
[22]
웹사이트
registry {{!}} npm Docs
https://docs.npmjs.c[...]
2021-05-10
[23]
뉴스
How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript
https://www.theregis[...]
The Register
2016-04-17
[24]
웹사이트
How one programmer broke the internet by deleting a tiny piece of code
https://qz.com/64646[...]
2020-12-23
[25]
웹사이트
Protestware on the rise: Why developers are sabotaging their own code
https://techcrunch.c[...]
2024-05-11
[26]
웹사이트
How 17 Lines of Code Took Down Silicon Valley's Hottest Startups
https://www.huffpost[...]
2024-05-11
[27]
웹사이트
kik, left-pad, and npm
http://blog.npmjs.or[...]
2017-05-09
[28]
웹사이트
changes to unpublish policy
http://blog.npmjs.or[...]
npm Blog (Archive)
2022-01-23
[29]
웹사이트
BIG sabotage: Famous npm package deletes files to protest Ukraine war
https://www.bleeping[...]
2022-03-17
[30]
웹사이트
'Protestware' npm package dependency labelled supply-chain attack
https://www.itnews.c[...]
nextmedia
2022-03-17
[31]
웹사이트
JavaScript library updated to wipe files from Russian computers
https://www.theregis[...]
Situation Publishing
2022-03-18
[32]
웹사이트
Widely used open source software contained bitcoin-stealing backdoor
https://arstechnica.[...]
2024-05-11
[33]
웹사이트
Check your repos... Crypto-coin-stealing code sneaks into fairly popular NPM lib (2m downloads per week)
https://www.theregis[...]
2024-05-11
[34]
웹사이트
NPM package with 3 million weekly downloads had a severe vulnerability
https://arstechnica.[...]
2024-05-11
[35]
웹사이트
JavaScript library downloaded 3m times a week exposes apps to hijacking via evil proxy configs
https://www.theregis[...]
2024-05-11
[36]
웹사이트
Dev corrupts NPM libs 'colors' and 'faker' breaking thousands of apps
https://www.bleeping[...]
2022-01-09
[37]
웹사이트
Hijacked S3 buckets used in attacks on npm packages
https://www.theregis[...]
2024-05-11
[38]
웹사이트
Hello, Yarn!
https://blog.npmjs.o[...]
2016-12-17
[39]
웹사이트
Managing Dependencies
https://docs.deno.co[...]
2024-01-06
[40]
웹사이트
Node and npm modules {{!}} Deno Docs
https://docs.deno.co[...]
2024-01-16
[41]
웹사이트
Why I'm working on Yarn
http://yehudakatz.co[...]
2016-12-17
[42]
웹사이트
cli/CHANGELOG.md at latest
https://github.com/n[...]
GitHub
2023-06-05
[43]
웹인용
Earliest releases of npm
https://github.com/n[...]
2016-07-27
[44]
웹인용
Forget CommonJS. It's dead. **We are server side JavaScript.**
https://github.com/j[...]
2013-03-25
[45]
웹인용
Hello, Yarn!
http://blog.npmjs.or[...]
2016-12-17
[46]
웹인용
Why I'm working on Yarn
http://yehudakatz.co[...]
2016-12-17
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com