웹 프론트엔드 개발에 사용되는 React, Vue 등의 프레임워크를 개발 환경 설정하거나 (create-react-app 등) 빌드할때(Webpack, Babel 등) node.js를 기반으로 하여 동작한다. 더 나아가 next.js같은 서버 사이드 렌더링 프레임워크도 node.js를 기반으로 동작하며 css관리 라이브러리, 각종 상태 관리 라이브러리를 설치할때도 node.js의 패키지 관리자인 npm을 이용해 설치하여 사용한다.
웹을 개발할때는 자연스럽게 매우 많은 노드 모듈이 설치된다. 프로젝트 내에 있는 node_modules 폴더는 설치된 모듈들과 해당 모듈들이 의존하고 있는 모듈 전부를 저장하는 곳이다. 그렇다보니 node_modules 폴더는 보통 용량이 크고 파일의 수가 아주 많다.
개발중인 프로젝트는 협업, 버전관리, 이슈트래킹, 백업 등의 여러가지 이유로 git을 사용하게 되는데 만약 node_modules폴더를 포함한 프로젝트 전체를 git 플랫폼에 통째로 commit 하게될경우 여러가지 문제가 생긴다. 프로젝트를 clone 또는 pull 할때 시간이 오래 걸릴 수 있으며 모듈들이 업데이트되거나 새로운 모듈이 추가될경우 변경사항을 git이 지속적으로 추적하게 되어 git 이력이 복잡해질 수 있다. OS에 따라 호환성 문제가 발생할 수도 있으며 보안문제가 발생할 수도 있다.
package.json 파일과 package-lock.json 파일은 이런 문제가 발생하지 않도록 도와주며 이외에 프로젝트와 관련된 여러가지 정보를 담고 있다.
package.json의 역할
1. 메타데이터 : 프로젝트의 이름, 버전, 작성자, 라이선스 등의 기본적인 정보를 기록한다.
{
"name": "project",
"version": "0.1.0",
"description": "project description",
"author": "author",
"license": "MIT"
}
2. 의존성 관리 : 프로젝트에 필요한 패키지를 기록한다. dependencies는 프로젝트 실행에 필요한 패키지이고 devDependencies는 개발 과정에서만 필요한 패키지이다.(테스트 라이브러리 등)
{
"dependencies": {
"react": "^18.1.0"
},
"devDependencies": {
"jest": "^26.0.1"
}
}
3. 스크립트 : 프로젝트의 시작, 빌드, 테스트 등의 명령어를 정의해둘 수 있다. npm run <명령어> 형식으로 실행된다.
{
"scripts": {
"start": "node app.js",
"test": "jest"
}
}
4. 기타 : Babel, EsLint등의 프로젝트 특정 환경 변수를 설정할 수 있고 각종 url을 지정할 수 도 있다. 이 외 os, cpu, private등 각종 프로젝트 설정을 기록해 둘 수 있다.
package-lock.json의 역할
1. 정확한 의존성 버전 고정 : package-lock.json 파일은 프로젝트에 설치된 모든 패키지의 정확한 버전을 기록한다. package.json에 명시된 버전은 범위의 역할을 하지만 package-lock.json은 패키지의 최초 설치시 선택된 정확한 버전을 기록하여 다른 개발 환경에서도 동일한 의존성이 보장되도록 한다.
2. 완전한 의존성 트리 기록 : 프로젝트에 필요한 패키지와 그 패키지의 의존 패키지 모두를 포함하여 정확한 버전과 해시, 상세한 의존성 트리 정보를 기록한다. 의존성 계산 과정을 단순화할 수 있다.
정리
package.json은 프로젝트에 필요한 기본 정보와 기본 의존성을 명시하여 프로젝트의 설계도 역할을 하고 package-lock.json은 더욱 상세한 패키지 버전과 의존성 트리를 기록하여 설계도를 기반으로 한 건축물의 역할을 한다고 볼 수 있다. 이 두가지 파일 덕분에 모듈을 통째로 git 플랫폼에 올리지 않아도 되며 OS나 환경의 차이에도 동일한 개발환경을 빠르게 구현하도록 도와준다. 프로젝트 협업에서도 다수의 개발환경에 동일한 모듈들과 의존성 트리 정보를 제공함으로써 프로젝트가 일관성있게 개발되고 실행될 수 있도록 도와준다.
'Web > Node.js' 카테고리의 다른 글
주기적으로 api 요청하기 (중간 서버의 역할) (공공데이터포털 기상청 단기예보) (2) | 2024.10.17 |
---|---|
REST API & RESTful (0) | 2024.05.04 |