npm과 패키지 완전 정리 - AI가 npm install을 시킬 때 실제로 무슨 일이 일어나는가

npm과 패키지 완전 정리 — AI가 npm install을 시킬 때 실제로 무슨 일이 일어나는가

npm install 할 때마다 궁금했던 것

🤔비개발자가 npm install을 하면서 드는 생각들

Node.js도 설치했고, 터미널에서 npm install도 실행했습니다. 뭔가 엄청 많이 출력됐고 끝났습니다.

"잘 된 건가? 뭘 설치한 건가? 이 파일들은 어디 갔나? 갑자기 폴더가 엄청 무거워졌는데 괜찮은 건가?"

AI가 이번엔 "npm install recharts를 실행하세요"라고 했습니다. 또 실행했습니다. 또 뭔가 출력됐습니다.

"recharts가 뭔지도 모르는데 설치가 된 건가? 다음에 또 다른 걸 설치하면 어떻게 되나?"

npm install을 할 때 정확히 "무슨 파일이 어디에 생기는지"를 알면, 이후 오류가 나거나 폴더가 이상해 보일 때 당황하지 않게 됩니다. 저도 초창기에 그랬었고 전문적인 중급 이상의 글은 많았으나 이런 기초 개념에 대해 정리한 글이 많이 없었던 기억이 있어 이 글에서 그 구조를 한 번에 정리합니다. 현재 게시 중인 기본적인 개념의 글은 다 이와 같이 저와 비슷한 경험을 하고 있는 분들을 위해 작성 되었으니 처음 개발을 하시는 분들은 참고 하시기 바랍니다.

이전 글들에서 npm이 "기능을 설치하는 앱스토어"라는 개념을 잡았고, 터미널에서 npm install을 실제로 실행해봤습니다. 이번에는 그 명령어를 실행하면 내부에서 실제로 무슨 일이 일어나는지를 들여다봅니다.

💡 그런데, 왜 굳이 남이 만든 걸 가져다 쓰나요?

요즘 개발은 모든 기능을 처음부터 직접 만드는 방식이 아닙니다. 로그인, 차트, 날짜 처리, 애니메이션 같은 기능은 이미 전 세계 개발자들이 만들어 공개해둔 패키지를 가져다가 조합하는 방식에 가깝습니다. AI 역시 이런 패키지들을 활용해 앱을 빠르게 구성합니다. npm install은 그 "공개된 기능 상자를 인터넷에서 내려받아 내 프로젝트 안에 넣는 것"입니다. 직접 만들 필요가 없는 것을 직접 만들지 않는 것이 현대 개발의 핵심입니다.

npm install을 하면 실제로 일어나는 일

npm install을 실행하는 순간 세 가지 일이 순서대로 일어납니다.

package.json을 읽는다

npm이 가장 먼저 프로젝트 루트에 있는 package.json 파일을 열어봅니다. "이 프로젝트에 어떤 패키지가 필요한지" 목록이 여기에 적혀 있습니다.

npmjs.com에서 패키지를 내려받는다

목록에 있는 패키지들을 인터넷에서 다운로드합니다. 이때 각 패키지가 의존하는 다른 패키지들도 함께 받아옵니다. 그래서 하나를 설치해도 수십~수백 개가 다운로드됩니다.

💡 처음 설치할 때는 수십 초~몇 분 걸릴 수 있습니다. 영어 로그가 계속 지나가도 대부분 정상입니다. 마지막 줄에 빨간 error가 없으면 성공입니다.

node_modules 폴더에 저장한다

내려받은 파일들을 프로젝트 안의 node_modules 폴더에 저장합니다. 이 폴더가 npm install 후 갑자기 커지는 이유입니다.

% npm install
↑ package.json을 읽고 필요한 패키지 전부 설치
% npm install recharts
↑ recharts 하나만 추가 설치 + package.json에 자동 기록
added 12 packages in 3s
↑ 이 숫자가 크면 의존성 패키지까지 함께 설치된 것 — 정상
npm install 실행 시 내부 흐름 — package.json 읽기 → npmjs.com 다운로드 → node_modules 저장

package.json — 이 프로젝트의 재료 목록

package.json은 프로젝트 루트에 있는 파일로, 이 프로젝트가 어떤 패키지를 쓰는지 기록한 목록입니다. 요리로 비유하면 레시피 재료 목록에 해당합니다.

📄 package.json 실제 모습 (핵심 부분만)
{
"name": "my-todo-app", ← 프로젝트 이름
"dependencies": { ← 필요한 패키지 목록
"react": "^18.2.0",
"next": "14.2.0",
"recharts": "^2.12.0"
},
"devDependencies": { ← 개발할 때만 필요한 패키지
"typescript": "^5.0.0"
}
}

버전 번호 앞의 ^ 기호는 뭔가요?

버전 번호 앞에 ^(캐럿) 기호가 붙어 있는 경우가 많습니다. "이 버전 이상의 호환되는 버전이면 OK"라는 뜻입니다. 지금 단계에서 이 기호의 의미를 깊이 알 필요는 없습니다. 직접 수정하지 않는 것이 안전합니다. AI가 자동으로 관리해줍니다.

💡 package.json에서 비개발자가 알아야 할 것

새 패키지를 npm install로 설치하면 package.json에 자동으로 추가됩니다. 삭제하면 자동으로 빠집니다. 직접 손대지 않아도 AI가 패키지를 추가·제거할 때 자동으로 관리합니다. 이 파일이 있으면 어떤 컴퓨터에서든 npm install 한 번으로 같은 환경을 복원할 수 있습니다.

node_modules — 왜 이렇게 크고 GitHub에 올리면 안 되나

npm install을 실행하고 나면 프로젝트 폴더 안에 node_modules라는 폴더가 생깁니다. 열어보면 수백 개의 폴더가 있고, 용량이 100MB~수백 MB에 달하는 경우도 있습니다. 왜 이렇게 클까요?

📁 npm install 후 프로젝트 구조
📁 my-todo-app/
├── 📄 package.json ← 재료 목록 (작음, GitHub에 올림 ✅)
├── 📁 node_modules/ ← 실제 재료 창고 (크고 무거움)
│ ├── 📁 react/
│ ├── 📁 next/
│ └── 📁 ... (수백 개) ← GitHub에 올리지 않음 ❌
├── 📁 src/ ← 실제 앱 코드
└── 📄 .gitignore ← node_modules 제외 설정 포함

node_modules가 수백 개인 이유가 있습니다. recharts 하나를 설치했는데 recharts가 내부적으로 의존하는 다른 패키지들이 줄줄이 딸려옵니다. 그것들이 또 다른 패키지에 의존하고… 이 연쇄가 반복되면서 수백 개가 됩니다. 이것을 의존성(dependency)이라고 합니다.

node_modules는 필요하면 언제든 다시 다운로드할 수 있습니다. 폴더가 커서 불안하다면 삭제해도 됩니다. package.json만 있으면 npm install 한 번으로 완전히 복원됩니다. 그래서 GitHub에도 올리지 않습니다.

왜 GitHub에 올리지 않나요?

이유 1 — 용량

수백 MB를 매번 GitHub에 올리고 받으면 저장소가 무거워지고 속도가 느려집니다.

이유 2 — 불필요

package.json만 있으면 어디서든 npm install 한 번으로 node_modules를 다시 만들 수 있습니다.

💡 .gitignore가 자동으로 처리합니다

AI가 프로젝트를 생성할 때 .gitignore 파일에 node_modules/가 자동으로 포함됩니다. 별도로 설정하지 않아도 GitHub에 올릴 때 node_modules는 자동으로 제외됩니다. 다른 컴퓨터에서 프로젝트를 clone한 후 npm install을 실행하면 node_modules가 다시 만들어집니다.

package.json(레시피)은 GitHub에 올리고 node_modules(창고)는 올리지 않는 이유 비교 일러스트

바이브 코딩에서 자주 만나는 패키지 카테고리

AI가 npm install을 시킬 때 어떤 종류의 패키지를 설치하는 건지 알면, 낯선 이름이 나와도 "아, 이런 역할이구나"로 분류할 수 있습니다. 외울 필요는 없습니다. 이름만 봐도 카테고리가 떠오를 정도면 충분합니다.

🎨

UI · 스타일링

tailwindcss, shadcn/ui

화면 디자인과 레이아웃을 담당합니다. AI가 보기 좋은 UI를 만들 때 주로 씁니다.

📊

차트 · 시각화

recharts, chart.js

데이터를 그래프로 보여줄 때 씁니다. 대시보드나 통계 화면에 자주 등장합니다.

🗄️

데이터베이스 연결

@supabase/supabase-js

Supabase 같은 외부 DB와 연결할 때 씁니다. 데이터 저장이 필요한 모든 앱에서 등장합니다.

📅

날짜 · 시간 처리

date-fns, dayjs

날짜 계산, 포맷 변환 등에 씁니다. "3일 전", "2026년 5월 13일" 같은 표시에 필요합니다.

📝

폼 · 입력 처리

react-hook-form, zod

로그인 폼, 입력 유효성 검사에 씁니다. "이메일 형식이 맞는지 확인"도 여기서 처리됩니다.

🤖

AI · API 연결

openai, @anthropic-ai/sdk

OpenAI, Anthropic 같은 AI API를 앱에 연결할 때 씁니다. AI 기능을 추가하는 핵심 패키지입니다.

💡 패키지 이름이 낯설 때

AI가 처음 보는 패키지를 설치하라고 하면 npmjs.com에서 이름을 검색해보세요. 다운로드 수, 마지막 업데이트 날짜, 설명이 나옵니다. 주간 다운로드가 수백만 이상이고 최근에 업데이트됐다면 믿을 만한 패키지입니다.

npm vs npx — AI가 두 가지를 섞어 쓰는 이유

바이브 코딩을 하다 보면 AI가 두 가지 형태의 명령어를 번갈아 씁니다. npm install로 시작하는 것과 npx로 시작하는 것. 둘이 다릅니다.

npm

설치하고 두고두고 쓰는 것

패키지를 node_modules에 저장합니다. 한 번 설치하면 계속 쓸 수 있습니다.

% npm install recharts
→ node_modules에 저장됨
npx

설치 없이 즉시 실행하는 것

패키지를 저장하지 않고 바로 실행합니다. 새 프로젝트 생성 같은 일회성 작업에 씁니다.

% npx create-next-app
→ 저장 없이 바로 실행

정리하면 이렇습니다. 앱 기능으로 계속 쓸 패키지는 npm install로 설치하고, 새 프로젝트를 만들거나 설정 도구를 한 번만 쓸 때는 npx를 씁니다. 어떤 것을 써야 하는지는 AI가 알아서 골라서 알려줍니다. 그대로 복붙하면 됩니다.

AI가 새 Next.js 프로젝트 만들라고 할 때
% npx create-next-app@latest my-app
AI가 차트 기능 추가하라고 할 때
% npm install recharts
둘 다 그냥 AI가 알려주는 대로 복붙하면 됩니다

설치했는데 작동 안 할 때 — 상황별 대처법

npm install을 했는데 앱이 오류가 나거나 패키지가 인식되지 않는 경우가 있습니다. 아래 세 가지가 가장 흔한 원인과 해결법입니다.

🔧 상황 1 — node_modules가 꼬인 경우

여러 번 패키지를 설치·삭제하다 보면 node_modules 안에 충돌이 생길 수 있습니다. 가장 쉬운 해결법은 node_modules를 완전히 지우고 다시 설치하는 것입니다.

# node_modules 폴더 삭제 후 재설치 (Mac/Linux)
rm -rf node_modules && npm install
# Windows PowerShell
Remove-Item -Recurse -Force node_modules; npm install
팁: AI에게 "node_modules 지우고 재설치하는 명령어 알려줘"라고 하면 운영체제에 맞는 명령어를 알려줍니다.

🔧 상황 2 — 패키지를 설치했는데 "Cannot find module" 오류

설치는 됐는데 코드에서 인식을 못 하는 경우입니다. 대부분 세 가지 원인입니다.

원인 A: 패키지 이름 오타 → npm install 패키지명 정확히 재확인
원인 B: npm run dev를 재시작 안 함 → Ctrl+C 후 npm run dev 다시
원인 C: import 경로 오류 → AI에게 에러 메시지 복붙해 물어보기

🔧 상황 3 — 패키지 버전 충돌 (peer dependency warning)

터미널에 노란색 경고로 peer dependency 관련 메시지가 나오는 경우입니다. 바로 해결이 어려운 경우가 많지만 대부분 앱 실행에는 영향이 없습니다.

일단 npm run dev로 실행해보세요 → 정상 작동하면 무시해도 됩니다
팁: 경고(warning)는 즉시 고치지 않아도 됩니다. 오류(error)만 즉시 해결하면 됩니다. 노란색 = 경고, 빨간색 = 오류로 구분하세요.

📌 핵심 정리

  • npm install은 "이미 만들어진 기능 상자를 인터넷에서 내려받아 내 프로젝트에 넣는 것"입니다. 요즘 개발은 모든 기능을 직접 만들지 않고, 전 세계 개발자들이 공개해둔 패키지를 조합합니다. AI도 이 방식으로 앱을 구성합니다.
  • npm install은 package.json을 읽어 필요한 패키지를 npmjs.com에서 내려받아 node_modules에 저장합니다. 수백 개가 설치되는 것은 의존성 패키지들이 함께 오기 때문으로 정상입니다. 영어 로그가 계속 흘러도 마지막에 error가 없으면 성공입니다.
  • package.json은 이 프로젝트의 재료 목록입니다. 직접 수정하지 않아도 패키지 설치·삭제 시 자동으로 업데이트됩니다. 이 파일 하나만 있으면 어디서든 npm install로 환경을 복원할 수 있습니다.
  • node_modules는 필요하면 언제든 다시 다운로드할 수 있습니다. 폴더가 커서 불안해도 삭제하면 됩니다. package.json만 있으면 npm install 한 번으로 완전히 복원됩니다. 그래서 GitHub에 올리지 않습니다.
  • npm은 패키지를 설치해 node_modules에 보관하는 것이고, npx는 설치 없이 즉시 실행하는 것입니다. AI가 어떤 것을 쓸지 알려주므로 그대로 복붙하면 됩니다.
  • 패키지가 작동하지 않을 때 가장 먼저 시도할 것은 node_modules를 삭제하고 npm install을 다시 실행하는 것입니다. 그래도 안 되면 에러 메시지를 AI에게 복붙하세요.

❓ 자주 묻는 질문

node_modules 폴더는 왜 이렇게 크고, GitHub에 올리면 안 되나요?

node_modules는 npm install로 설치된 패키지 파일들이 실제로 저장되는 폴더입니다. 수백 개의 패키지가 담기기 때문에 수백 MB에 달하는 경우도 있습니다. GitHub에 올리지 않는 이유는 두 가지입니다. 첫째, 용량이 너무 커서 저장소가 무거워집니다. 둘째, package.json만 있으면 npm install 한 번으로 언제든 다시 생성할 수 있기 때문입니다. .gitignore에 node_modules/가 자동으로 포함되어 있어서 따로 설정하지 않아도 됩니다.

package.json이 뭔가요? 직접 수정해도 되나요?

package.json은 이 프로젝트가 어떤 패키지를 사용하는지 기록한 목록 파일입니다. 새 패키지를 설치하면 자동으로 여기에 추가됩니다. 직접 수정하는 것은 가능하지만, 바이브 코딩 입문 단계에서는 AI가 수정해주도록 요청하는 것이 안전합니다. 버전 번호를 잘못 수정하면 패키지 충돌이 생길 수 있습니다.

npm과 npx의 차이가 뭔가요?

npm install은 패키지를 내 컴퓨터에 설치해 보관하는 명령어이고, npx는 설치 없이 패키지를 즉시 실행하는 명령어입니다. AI가 'npx create-next-app'처럼 npx로 시작하는 명령어를 알려줄 때가 있는데, 이때는 패키지를 설치하지 않고 바로 실행합니다. 새 프로젝트를 만들거나 일회성 도구를 실행할 때 주로 npx를 씁니다. 어떤 것을 써야 할지는 AI가 알려주므로 그대로 복붙하면 됩니다.

npm install 후 패키지가 작동하지 않을 때 어떻게 하나요?

가장 먼저 터미널 에러 메시지를 복사해 AI에게 붙여넣으세요. 자주 발생하는 원인은 세 가지입니다. 첫째, node_modules 폴더가 꼬인 경우 — node_modules 폴더를 삭제하고 npm install을 다시 실행합니다. 둘째, npm run dev를 재시작하지 않은 경우 — Ctrl+C로 종료 후 npm run dev를 다시 실행합니다. 셋째, 패키지 이름을 잘못 입력한 경우 — npmjs.com에서 정확한 이름을 확인합니다.

이제 package.json을 열어보세요

VS Code 왼쪽 파일 목록에서 package.json을 클릭해 열어보세요.
지금까지 설치한 패키지들이 목록으로 적혀 있습니다.
"아, 이게 재료 목록이구나"가 느껴지면 됩니다.

📦 npmjs.com 방문하기

0 댓글

댓글 쓰기

Post a Comment (0)

다음 이전