본문 바로가기
카테고리 없음

[NPM]저장소 비용을 줄이고 앱 속도를 올리는 데 알아야 할 dependencies와 devDependencies 차이

by sighan 2023. 12. 2.
반응형

dependencies와 devDependencies는 JavaScript 프로젝트, 특히 Node.js 환경에서 사용되는 두 가지 주요 종류의 의존성(dependencies)입니다. 이들 간의 차이점을 이해하는 것은 프로젝트 관리와 효율적인 개발 환경 구축에 중요합니다.

dependencies

  • 정의: dependencies는 프로젝트 실행 시 필요한 패키지입니다. 이는 프로덕션 환경(실제 사용자가 사용하는 환경)에서 애플리케이션이 제대로 작동하기 위해 필요한 패키지를 포함합니다.
  • 예시:
    • express : Node.js의 웹 애플리케이션 프레임워크
    • react : 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리
  • 사용 시점: 프로젝트의 최종 사용자에게 서비스를 제공할 때 필요합니다.

devDependencies

  • 정의: devDependencies는 개발 과정에서만 필요한 패키지입니다. 이는 개발 중 테스팅, 문서 작성, 로컬 테스트 실행 등과 같은 작업을 위해 필요하지만, 실제 프로덕션 환경에서는 사용되지 않는 패키지들을 포함합니다.
  • 예시:
    • jest : 자바스크립트 테스팅 프레임워크
    • eslint : 코드 품질과 코딩 스타일을 검사하는 도구
  • 사용 시점: 개발 과정에서 코드를 작성하고, 테스트하며, 디버깅할 때 사용됩니다.

왜 구분하는가?

  • 배포 최적화: dependencies만이 프로덕션 환경에 배포되기 때문에, devDependencies는 배포 과정에서 제외됩니다. 이는 애플리케이션의 크기를 줄이고, 필요 없는 의존성으로 인한 잠재적 보안 문제를 방지하는 데 도움이 됩니다.
  • 명확한 관리: 의존성을 구분함으로써 다른 개발자들이 프로젝트에 참여할 때 어떤 패키지가 실제 애플리케이션에 필요하고, 어떤 것이 개발 과정에서만 필요한지 쉽게 이해할 수 있습니다.

예시를 통한 설명

  • 예를 들어, 웹사이트를 개발하는 경우 react는 실제 웹사이트에 필요한 구성 요소이므로 dependencies에 포함됩니다.
  • 반면, eslint는 코드를 작성하는 동안 코드 스타일을 규제하는 데 사용되지만, 웹사이트를 운영하는 데 직접적으로 필요하지 않기 때문에 devDependencies에 포함됩니다.

이 구분을 통해 개발 효율성을 높이고, 프로덕션 환경에서의 성능을 최적화할 수 있습니다.

 

 

 

 

Node.js 프로젝트에서 dependencies와 devDependencies를 다운로드하는 방법은 npm(Node Package Manager) 또는 Yarn과 같은 패키지 관리자를 사용합니다. 아래는 각각의 의존성을 설치하는 방법에 대한 설명입니다.

dependencies 설치하기

  • dependencies는 프로덕션 환경에서 필요한 패키지입니다.
  • 설치 방법:
    • npm을 사용하는 경우: npm install [패키지명] 명령어를 사용합니다.
    • Yarn을 사용하는 경우: yarn add [패키지명] 명령어를 사용합니다.
  • 예시: express 패키지를 설치하려면,
    • npm: npm install express
    • Yarn: yarn add express
npm install [패키지명]
yarn add [패키지명

 

devDependencies 설치하기

  • devDependencies는 개발 과정에서만 필요한 패키지입니다.
  • 설치 방법:
    • npm을 사용하는 경우: npm install [패키지명] --save-dev 명령어를 사용합니다. --save-dev 옵션은 패키지를 devDependencies로 분류합니다.
    • Yarn을 사용하는 경우: yarn add [패키지명] --dev 명령어를 사용합니다.
  • 예시: jest 테스팅 프레임워크를 설치하려면,
    • npm: npm install jest --save-dev
    • Yarn: yarn add jest --dev
npm install [패키지명] --save-dev
yarn add [패키지명] --dev

 

패키지.json 파일

  • 설치 과정에서 package.json 파일에 해당 의존성이 자동으로 기록됩니다. dependencies는 "dependencies" 섹션에, devDependencies는 "devDependencies" 섹션에 추가됩니다.
  • 이 파일은 프로젝트의 의존성을 관리하고, 다른 개발자가 프로젝트에 참여할 때 필요한 모든 패키지를 쉽게 설치할 수 있도록 도와줍니다.

의존성 일괄 설치

  • 프로젝트 폴더에 package.json 파일이 있을 경우, npm install 또는 yarn install 명령어를 사용하여 모든 dependencies와 devDependencies를 일괄적으로 설치할 수 있습니다.

 

 

devDependencies로 분류되어야 할 패키지를 dependencies에 포함시키면 여러 부정적인 영향이 발생할 수 있습니다. 이러한 영향은 경제적, 성능적, 관리적 측면에서 나타납니다:

1. 배포 크기의 증가

  • 설명: dependencies에 포함된 패키지는 프로덕션 환경에서의 애플리케이션 배포에 포함됩니다. 개발에만 필요한 패키지들이 dependencies에 포함되면 불필요하게 배포 크기가 커집니다.
  • 경제적 영향: 큰 배포 크기는 보관 및 전송 비용 증가로 이어질 수 있으며, 이는 클라우드 스토리지 및 대역폭 비용 증가로 이어집니다.

2. 빌드 및 배포 시간의 증가

  • 설명: 불필요한 패키지를 포함시키면 빌드 및 배포 프로세스에 필요한 시간이 늘어납니다.
  • 경제적 영향: 더 긴 빌드 및 배포 시간은 개발 팀의 시간과 자원을 더 많이 소비하게 하며, 이는 간접적인 비용 증가를 의미합니다.

3. 성능 문제

  • 설명: 불필요한 패키지가 포함되면 애플리케이션의 로딩 시간과 성능에 영향을 줄 수 있습니다.
  • 성능적 영향: 사용자 경험 저하, 특히 모바일 사용자에게 중요한 로딩 시간 증가 등이 발생할 수 있습니다.

4. 보안 리스크

  • 설명: 불필요한 패키지는 잠재적인 보안 취약점을 포함할 수 있습니다.
  • 경제적 영향: 보안 취약점은 해킹 및 데이터 유출 위험을 증가시켜, 잠재적인 법적 비용 및 명성 손실을 초래할 수 있습니다.

5. 유지 관리의 복잡성

  • 설명: dependencies에 포함되어서는 안 되는 패키지가 포함되면, 프로젝트의 유지 관리가 복잡해집니다.
  • 관리적 영향: 프로젝트의 의존성을 관리하고 업데이트하는 데 더 많은 시간과 노력이 소요됩니다.

6. 오픈 소스 라이선스 준수 문제

  • 설명: 일부 개발 의존성은 프로덕션 환경에서 사용할 수 없는 특정 라이선스를 가질 수 있습니다.
  • 경제적 영향: 라이선스 위반은 법적 문제와 관련된 비용을 발생시킬 수 있습니다.

결론

정확한 dependencies와 devDependencies의 분류는 프로젝트의 효율성, 성능, 보안, 유지 관리의 용이성 및 비용 관리에 중요합니다. 이러한 분류를 올바르게 수행함으로써, 프로젝트는 더 안정적이고 효율적으로 운영될 수 있습니다.

반응형