Settings
디펜던시(Dependency)와 데브 디펜던시(Dev Dependency)
Eppo:)
2025. 4. 12. 23:11
디펜던시(Dependency)의 심층 이해
디펜던시는 애플리케이션이 실행 시점에 필요한 외부 패키지이다.
- 런타임 필수 요소: 애플리케이션이 실행되기 위해 반드시 필요한 코드
- 배포에 포함: 프로덕션 서버에도 설치되어야 함
- 사용자 경험에 직접 영향: 이 패키지들이 없으면 애플리케이션은 정상적으로 작동하지 않음
예를 들어, React로 만든 웹 애플리케이션에서 React는 화면을 렌더링하기 위한 필수 패키지이므로 디펜던시이다. 사용자가 웹사이트를 방문할 때 React 코드가 브라우저에 로드되어야 하기 때문
데브 디펜던시(Dev Dependency)의 심층 이해
데브 디펜던시는 개발 과정에서만 필요한 도구들이다.
- 개발 도구: 코드 작성, 테스트, 빌드 등을 돕는 도구.
- 배포에서 제외: 최종 사용자에게 전달되는 코드에는 포함되지 않음
- 개발 효율성 향상: 개발자의 작업 흐름을 개선하지만, 최종 사용자는 이를 인식하지 못함
예를 들어, ESLint는 개발자가 코드를 작성할 때 문법 오류를 감지하는 도구이지만, 웹사이트가 실행될 때는 필요하지 않는다.
# 데브 디펜던시 설치 방법
npm install 패키지명 --save-dev
# 또는 축약형
npm install 패키지명 -D
차이점 요약
구분디펜던시(Dependency)데브 디펜던시(Dev Dependency)
사용 시점 | 운영 환경 및 개발 환경 | 개발 환경에서만 사용 |
배포 포함 여부 | 배포 시 포함됨 | 배포 시 포함되지 않음 |
설치 명령어(npm) | npm install 패키지명 | npm install 패키지명 --save-dev |
package.json 위치 | "dependencies" 항목 | "devDependencies" 항목 |
의존성 분리의 필요성
왜 디펜던시와 데브 디펜던시를 구분해야 하는가?
- 배포 최적화: 프로덕션 환경에 불필요한 코드를 제거하여 앱 크기 감소 및 로딩 시간 단축
- 빌드 프로세스 명확화: 개발용 도구와 실행용 라이브러리를 명확히 구분하여 관리 용이성 증가
- 팀 협업 강화: 새로운 팀원이 프로젝트에 합류했을 때 어떤 도구가 개발용이고 어떤 패키지가 실행에 필요한지 쉽게 파악 가능
- CI/CD 파이프라인 최적화: 배포 과정에서 --production 플래그 사용 시 빌드 시간 단축
실제 상황에서의 영향:
일반적인 React 프로젝트의 node_modules 크기:
- 모든 의존성 설치 시: ~200-300MB
- 프로덕션 의존성만 설치 시: ~50-100MB
이는 배포 속도와 서버 자원 사용에 직접적인 영향을 미친다.
초보자가 자주 하는 실수
흔한 실수와 해결책:
- 모든 패키지를 dependencies에 설치: 배포 크기가 불필요하게 커지고 보안 위험 증가
- 필요한 패키지를 devDependencies에 설치: 프로덕션 환경에서 애플리케이션 오류 발생
- 해결책: "이 패키지가 런타임에 필요한가?"라는 간단한 질문으로 구분
실무에서 유용한 명령어:
# 현재 설치된 의존성 확인
npm list --depth=0
# 사용하지 않는 의존성 찾기
npx depcheck
# 프로덕션 모드로 설치해 크기 비교하기
npm install --production && du -sh node_modules