node_modules는 npm으로 설치한 코드 부품이 전부 쌓이는 창고 폴더이고, package.json만 있으면 언제든 다시 만들 수 있어서 지워도 됩니다. 2026년 7월 기준으로, AI가 짜준 코드를 처음 돌려보다 이 폴더를 열면 파일 수천 개에 용량은 수백 MB라 당황하기 쉽습니다. 이 글을 읽고 나면 이게 왜 이렇게 무거운지, 그리고 왜 마음 놓고 지워도 되는지가 정리됩니다.

node_modules는 설치한 코드 부품이 실제로 쌓이는 창고입니다. 무거운 건 부품이 또 다른 부품에 줄줄이 기대고 있어서고, package.json과 잠금 파일만 있으면 통째로 다시 만들 수 있어서 지워도 됩니다.
먼저 npm부터 짧게 짚고 갑니다.
npm은 코드 부품을 받아오는 앱스토어 같은 곳이고, 터미널에 npm install이라고 치면 필요한 부품이 내 컴퓨터로 내려옵니다.
그 부품들이 실제로 쌓이는 자리가 바로 node_modules 폴더입니다.
비유하자면 npm install은 "장바구니 담고 주문"이고, node_modules는 주문한 물건이 도착해 쌓이는 창고입니다.
그래서 프로젝트 폴더를 열면 보통 package.json이라는 주문서와 node_modules라는 창고가 나란히 놓여 있습니다.
주문서에는 "이 프로젝트는 이런 부품이 필요하다"는 목록만 적혀 있고, 실물은 전부 창고 쪽에 들어갑니다.
node_modules가 무거운 이유는 부품이 혼자 오지 않기 때문입니다.
부품 하나를 설치하면 그 부품이 돌아가려고 또 다른 부품을 데려오고, 그 부품이 다시 다른 부품을 데려옵니다.
이렇게 "기대고 또 기대는" 관계를 의존성이라고 부르는데, 이건 다음 편에서 따로 다룹니다.
부품 몇 개만 적었는데 창고에 물건이 수천 개 쌓이는 게 바로 이 때문입니다.

개발자들 사이에서는 node_modules를 두고 "우주에서 제일 무거운 폴더"라는 농담이 돌 정도입니다.
물론 진짜 그렇다는 건 아니고, 그만큼 용량이 잘 불어난다는 걸 웃으며 인정하는 표현입니다.
결론부터 말하면 지워도 됩니다.
node_modules는 언제든 다시 만들 수 있는 폴더거든요.
프로젝트에 package.json과 잠금 파일(package-lock.json 같은 파일)만 남아 있으면, 터미널에 npm install을 한 번 더 치는 것만으로 창고가 통째로 다시 채워집니다.
주문서가 남아 있으니 창고는 얼마든지 다시 배송받으면 되는 셈입니다.
개인적으로는 뭔가 설치가 꼬여서 에러가 날 때, node_modules를 지우고 다시 설치하는 게 가장 빠른 해결책인 경우가 많다고 봅니다.
용량이 부담될 때 지워도 프로젝트 자체는 망가지지 않는다, 이 점만 기억하면 됩니다.
헷갈리지 않게 '지워도 되는 것'과 '지우면 안 되는 것'을 나눠보면 이렇습니다.
| 지워도 되는 것 | 지우면 안 되는 것 |
|---|---|
| node_modules 폴더 (다시 만들 수 있음) | package.json (부품 목록) |
| 설치가 꼬였을 때 통째로 삭제 후 재설치 | 잠금 파일 (package-lock.json 등) |
다시 만들 수 있는 성질 때문에, node_modules는 보통 깃허브에 올리지 않습니다.
어차피 받는 사람이 npm install 한 번이면 똑같이 채우는데, 굳이 수백 MB를 통째로 올릴 이유가 없습니다.
그래서 "이건 올리지 마"라고 지정하는 .gitignore라는 파일에 node_modules가 거의 항상 들어갑니다.
이 .gitignore도 초보가 자주 만나는 파일이라 다음 편에서 따로 정리합니다.
AI로 만든 프로젝트를 다른 사람에게 넘기거나 옮길 때 이 이야기가 바로 쓸모가 있습니다.
폴더를 통째로 압축해서 보내려는데 용량이 수백 MB라면, 십중팔구 node_modules 때문입니다.
이때 node_modules만 빼고 package.json은 남긴 채로 보내면, 받는 쪽에서 npm install 한 번으로 똑같은 환경을 만듭니다.
압축 용량은 확 줄고, 공유는 훨씬 가벼워집니다.
AI가 코드를 짜주는 시대라도 이 폴더의 정체를 알아두면, 프로젝트를 복사하고 공유하는 일이 한결 수월해집니다.

node_modules는 npm으로 받은 코드 부품이 쌓이는 창고입니다.
부품이 서로 줄줄이 기대는 탓에 용량이 크게 불어나고, package.json과 잠금 파일만 있으면 언제든 다시 채울 수 있습니다.
그래서 지워도 되고, 깃허브에도 올리지 않으며, 프로젝트를 공유할 때는 빼고 보내는 게 정석입니다.
대부분 다시 설치를 안 해서 그렇습니다.
프로젝트 폴더에서 터미널을 열고 npm install을 한 번 실행하면 창고가 다시 채워지면서 정상으로 돌아옵니다.
단, package.json 파일까지 같이 지웠다면 주문서가 사라진 셈이라 복구가 까다로워지니, 그 파일은 건드리지 않는 게 좋습니다.
package.json이 훨씬 중요합니다.
node_modules는 언제든 다시 만드는 창고지만, package.json은 그 창고를 다시 채우는 주문서라서 이게 없으면 무엇을 얼마나 받아와야 하는지 알 수 없습니다.
그래서 백업하거나 공유할 때 반드시 챙겨야 하는 쪽은 package.json입니다.
npm 공식 문서(docs.npmjs.com)와 MDN 웹 문서를 참고했습니다. 명령어와 파일 이름은 발행 전 공식 문서 확인이 필요합니다.

| 자바스크립트(js) vs 타입스크립트(ts) — 뭐가 다르고 왜 쓸까 (0) | 2026.07.21 |
|---|---|
| 의존성(dependency)이 뭐야 — 내 코드가 기대고 있는 남의 코드 (0) | 2026.07.21 |
| package.json이 뭐야 — 프로젝트의 신분증이자 재료 목록 (0) | 2026.07.21 |
| Node.js가 뭐야 — 브라우저 밖에서도 도는 자바스크립트 (0) | 2026.07.21 |
| npm이 뭐야 — 자바스크립트 코드 부품 앱스토어 (0) | 2026.07.20 |
댓글 영역