
최근 Node.js는 단순한 런타임을 넘어, 웹과 서버 개발의 핵심 플랫폼으로 자리 잡고 있습니다. 특히 최신 버전(v18~v22)으로 넘어오면서 과거에는 반드시 npm 패키지를 설치해야만 사용할 수 있던 기능들이 점차 런타임에 통합되고 있습니다.
이 변화는 단순한 편의성 개선을 넘어, 보안 강화, 의존성 최소화, 코드 이식성 향상이라는 큰 변화를 이끌고 있습니다. 이제 Node.js 하나만으로도 모던 웹 애플리케이션을 충분히 개발할 수 있는 시대가 열린 셈입니다.
이 글에서는 Node.js가 새롭게 내장한 주요 기능들과, 그로 인해 대체된 인기 npm 패키지들을 정리하고, 왜 이러한 변화가 중요한지 구체적으로 살펴봅니다.
1. Node.js의 진화: npm 의존성 줄이기
그동안 Node.js 개발자들은 다양한 npm 패키지를 통해 기능을 확장해왔습니다. 하지만 패키지 의존성이 많아질수록 보안 위험, 업데이트 충돌, 빌드 속도 저하 등 여러 문제가 발생했습니다.
이를 해결하기 위해 Node.js 팀은 점진적으로 핵심 기능들을 런타임에 직접 포함하기 시작했습니다. 그 결과, 최신 Node.js 버전에서는 별도의 패키지 없이도 대부분의 필수 기능을 바로 사용할 수 있습니다.
이러한 변화는 다음과 같은 이점을 제공합니다.
- 공급망 보안 리스크 감소: 외부 패키지 취약점이나 악성 코드 유입 위험이 줄어듭니다.
- 의존성 관리 단순화: node_modules가 가벼워지고, 설치 및 업데이트 과정이 단축됩니다.
- 코드 이식성 향상: 프로젝트를 다른 환경으로 옮겨도 버전 충돌 없이 동작합니다.
- 유지보수성 향상: 패키지 버전 관리 대신 Node.js 업데이트만으로 최신 기능 사용 가능.
2. Node.js 내장 기능으로 대체된 주요 npm 패키지
Node.js 18~22 버전 사이에서 많은 기능이 새롭게 추가되었습니다. 그중 실제로 널리 사용된 패키지를 대체하는 내장 기능들을 살펴보겠습니다.
2.1 node-fetch → Global fetch()
Node.js 18부터는 브라우저와 동일한 fetch() API가 전역 함수로 제공됩니다.
이제 node-fetch 패키지를 설치하지 않아도 간단한 HTTP 요청을 처리할 수 있습니다.
- Node.js 18.0.0부터 안정화
- Node 18 미만 버전에서는 여전히 node-fetch 필요
2.2 ws → Global WebSocket
Node.js 21부터는 글로벌 WebSocket 클래스를 지원합니다.
이제 클라이언트 측 웹소켓 연결을 표준 Web API처럼 구현할 수 있습니다.
현재는 실험적 단계이지만, 향후 안정화되면 클라이언트용 ws 패키지를 완전히 대체할 수 있을 것으로 예상됩니다.
2.3 mocha / jest → node:test
Node.js 18부터 내장 테스트 러너인 node:test가 포함되었습니다.
기본적인 단위 테스트나 통합 테스트는 이제 별도의 프레임워크 없이 작성할 수 있습니다.
- Node.js 18에서 실험적으로 도입
- Node.js 20에서 안정화
- 스냅샷, 모킹, 리포터 확장 등은 여전히 jest나 mocha가 유리
2.4 fs 관련 유틸리티 (glob, rimraf, mkdirp)
파일 시스템 관련 npm 패키지들도 점점 내장 기능으로 대체되고 있습니다.
glob → fs.glob()
Node.js 22부터 파일 패턴 검색 기능이 기본 제공됩니다.
rimraf → fs.rm({ recursive: true })
디렉토리를 재귀적으로 삭제할 수 있습니다.
mkdirp → fs.mkdir({ recursive: true })
중첩된 디렉토리를 한 번에 생성할 수 있습니다.
이제는 별도의 패키지 설치 없이도 모든 파일 작업을 처리할 수 있습니다.
2.5 chalk / kleur → util.styleText()
콘솔 텍스트 스타일링을 위한 chalk 패키지도 더 이상 필수가 아닙니다.
Node.js 20.12.0부터 util.styleText() 함수가 추가되어 색상, 굵게, 밑줄 등 기본 스타일을 적용할 수 있습니다.
2.6 uuid → crypto.randomUUID()
Node.js 14.17.0 이후부터는 안전한 UUID를 내장 함수로 생성할 수 있습니다.
별도의 uuid 패키지 없이도 안전하고 빠르게 고유 ID를 만들 수 있습니다.
2.7 dotenv → --env-file
Node.js 20.10.0부터는 .env 파일을 로드할 수 있는 --env-file 실행 플래그가 추가되었습니다.
이 기능은 아직 실험 단계지만, 환경 변수 로딩을 위해 dotenv를 사용하지 않아도 됩니다.
3. 아직 실험 단계인 기능들
몇몇 내장 모듈은 여전히 실험적으로 제공됩니다.
- node:sqlite : SQLite 데이터베이스 접근용 기본 모듈 (성능 테스트 중)
- URLPattern : 라우트 매칭용 표준 Web API
- TypeScript 실행 (--experimental-strip-types) : .ts 파일 직접 실행 기능
이들은 모두 향후 안정화될 가능성이 높지만, 현재는 보조적인 수준으로 사용하는 것이 좋습니다.
4. Node.js의 내장화가 중요한 이유
Node.js가 점차 npm 패키지를 런타임 내부로 통합하는 이유는 명확합니다.
- 보안 강화 – 외부 패키지를 통한 공급망 공격 위험이 줄어듭니다.
- 성능 개선 – 네이티브 코드 수준의 최적화가 가능해집니다.
- 유지보수 단순화 – 패키지 업데이트 대신 Node.js 버전만 관리하면 됩니다.
- 호환성 향상 – 브라우저와 동일한 Web API 지원으로 프런트엔드·백엔드 코드 공유가 용이해집니다.
이러한 변화는 단순히 기술적 편리함을 넘어, 운영 환경의 안정성과 생산성 향상이라는 실질적인 이점을 제공합니다.
Node.js는 이제 단순한 JavaScript 런타임을 넘어, 표준 Web API를 완벽히 지원하는 현대적인 개발 플랫폼으로 진화하고 있습니다.
최신 LTS 버전(v22)에서는 이미 대부분의 필수 기능이 내장되어 있으며, 이는 보안·성능·유지보수성 모두에서 큰 개선을 의미합니다.
앞으로는 패키지를 덜 설치하고, 더 빠르고 안전하게 애플리케이션을 구축할 수 있습니다.
Node.js의 발전 방향은 명확합니다.
“더 적은 의존성으로, 더 완전한 플랫폼으로.”
https://nodesource.com/blog/nodejs-features-replacing-npm-packages
15 Recent Node.js Features that Replace Popular npm Packages
Many Node.js features that once required third-party packages are now built into the runtime itself.
nodesource.com:443

'잡학다식 > IT 컬럼' 카테고리의 다른 글
| JSON 시각화 도구, 왜 직접 만들어야 했을까? – 개발자가 만든 맞춤형 JSON 뷰어 이야기 (0) | 2025.10.14 |
|---|---|
| CLI 환경을 더 멋지고 강력하게 바꿔줄 5가지 도구 소개 (0) | 2025.10.12 |
| OpenAI, 기술회사를 넘어 시장을 움직이는 기업이 되다 — AMD 거래의 숨은 구조 (0) | 2025.10.09 |
| 2025년 프로그래밍 언어 인기 순위와 AI가 불러올 코드 작성의 미래 (0) | 2025.09.29 |
| 퀀트 투자자를 위한 필수 Python 오픈소스: 9가지 추천 GitHub 저장소 (0) | 2025.09.28 |