패키지와 의존성
아무도 앱 전체를 처음부터 다 쓰지 않습니다. 어렵고 흔한 문제들 — 날짜 형식 맞추기, 결제 처리하기, 달력 그리기 — 은 이미 다른 사람들이 해결해서 묶어 놓았습니다. 패키지는 여러분이 직접 쓰는 대신 프로젝트에 끌어와 쓰는, 재사용 가능한 코드 덩어리입니다. 프로젝트의 의존성은 그 프로젝트가 의지하는 패키지들의 목록입니다.
JavaScript 세계에서 이것을 관리하는 도구가 npm(Node Package Manager)입니다. 두 개의 파일이 장부 역할을 합니다:
package.json— 프로젝트에 무엇이 필요한지를 사람이 읽을 수 있게 적은 목록에, 실행 명령어까지 더한 것입니다. 여러분(또는 AI)이 이 파일을 편집합니다.- 잠금 파일(lockfile) (
package-lock.json같은 것) — 모든 패키지와 그 정확한 버전을 기계가 생성한 그대로 기록한 것입니다. 그래서 여러분의 컴퓨터에서든, 동료의 컴퓨터에서든, 서버에서든 앱이 똑같이 빌드됩니다. 이 파일은 손으로 편집하지 않고, 도구가 관리하도록 맡깁니다.
{
"name": "my-app",
"scripts": {
"dev": "next dev",
"build": "next build"
},
"dependencies": {
"next": "16.0.0",
"react": "19.0.0"
}
}
왜 신경 써야 할까요? AI가 "이걸 위해 라이브러리를 하나 추가하자"고 할 때, 그것은 package.json을 편집하는 것이고 여러분은 남의 코드를 믿는 겁니다 — 잘 알려진 의존성이 적을수록, 정체불명의 의존성이 잔뜩 쌓인 것보다 안전합니다. 그리고 빌드가 영문도 모르게 망가질 때, 버전이 어긋난 의존성이 흔한 용의자이고, "패키지를 지우고 다시 설치한다"가 실제로 자주 통하는 해결책입니다.