Node.js 인터뷰 질문 10
질문: package.json 파일이란 무엇인가요?
답변:
package.json 파일은 Node.js 프로젝트의 핵심 구성 파일로, 프로젝트에 대한 메타데이터와 의존성 정보를 JSON 형식으로 저장합니다. 이 파일은 프로젝트의 루트 디렉토리에 위치하며, npm(Node Package Manager)이 프로젝트를 관리하는 데 필수적입니다.
package.json 파일의 생성
# 대화형으로 생성
npm init
# 기본값으로 빠르게 생성
npm init -y
주요 필드와 역할
기본 메타데이터:
{
"name": "my-node-app", // 패키지 이름 (필수)
"version": "1.0.0", // 버전 (필수, 시맨틱 버전 형식)
"description": "My Node.js application", // 프로젝트 설명
"main": "index.js", // 메인 진입점 파일
"private": true, // true면 npm에 배포 방지
"author": "홍길동 <hong@example.com>", // 작성자 정보
"license": "MIT", // 라이선스 정보
"repository": {
// 소스 코드 저장소 정보
"type": "git",
"url": "https://github.com/username/repo.git"
}
}
의존성 관리:
{
"dependencies": {
// 프로덕션 의존성
"express": "^4.17.1",
"mongoose": "^6.0.12"
},
"devDependencies": {
// 개발 의존성
"jest": "^27.3.1",
"nodemon": "^2.0.14"
},
"peerDependencies": {
// 피어 의존성
"react": "^17.0.0"
},
"optionalDependencies": {
// 선택적 의존성
"fsevents": "^2.3.2"
},
"engines": {
// 필요한 Node.js/npm 버전
"node": ">=14.0.0",
"npm": ">=6.0.0"
}
}
스크립트:
{
"scripts": {
"start": "node index.js", // npm start로 실행
"dev": "nodemon index.js", // npm run dev로 실행
"test": "jest", // npm test로 실행
"build": "webpack --mode production", // npm run build로 실행
"lint": "eslint src/**/*.js" // npm run lint로 실행
}
}
설정:
{
"config": {
// 환경 설정 값
"port": "3000"
},
"browserslist": [
// 지원할 브라우저
"> 1%",
"not dead"
]
}
package.json의 중요성
- 의존성 추적: 프로젝트에 필요한 모든 패키지와 버전을 기록합니다.
- 재현 가능한 빌드: 다른 환경에서도 동일한 의존성으로 프로젝트를 설정할 수 있습니다.
- 스크립트 자동화: 일반적인 작업을 npm 스크립트로 자동화할 수 있습니다.
- 버전 관리: 프로젝트의 버전을 체계적으로 관리할 수 있습니다.
- 배포 관리: 패키지 배포 시 필요한 정보를 제공합니다.
package-lock.json과의 관계
package.json
이 의존성의 "허용 가능한 버전 범위"를 정의한다면,package-lock.json
은 실제로 설치된 "정확한 버전"을 기록합니다.package-lock.json
은 모든 개발자에게 정확히 동일한 의존성 트리를 보장합니다.
버전 관리
package.json은 시맨틱 버전 관리(Semantic Versioning)를 따릅니다:
^4.17.1
: 호환되는 최신 업데이트 허용 (4.x.x)~4.17.1
: 패치 업데이트만 허용 (4.17.x)4.17.1
: 정확한 버전만 사용>=4.17.1
: 해당 버전 이상 사용*
: 최신 버전 사용
package.json 파일은 Node.js 프로젝트의 '매니페스트'로, 프로젝트 설정의 중심점이자 협업과 배포의 기반이 됩니다.