이 글의 핵심 요약
개발자라면 누구나 한 번쯤 Node.js를 접해봤을 겁니다. 그런데 2024년 들어 Node.js 24와 npm 11이 출시되면서 많은 것이 달라졌어요. 설치 방법은 더 간편해졌고, 성능은 비약적으로 향상됐습니다. 특히 npm 11은 보안이 강화되고 속도가 빨라져서 프로젝트 시작 단계부터 체감할 수 있을 정도죠. 이 글에서는 최신 Node.js 설치부터 npm 명령어 활용법까지, 실무에서 바로 써먹을 수 있는 내용만 담았습니다.
작년 말 회사 프로젝트를 진행하던 중 갑자기 npm install이 먹통이 되는 경험을 했어요. 알고 보니 Node.js 버전이 너무 낮아서 생긴 문제였죠. 그때부터 최신 버전 유지의 중요성을 절실히 느꼈습니다.
요즘 웹 개발 환경은 정말 빠르게 변하고 있어요. 불과 몇 달 사이에도 새로운 기능이 추가되고, 보안 패치가 이뤄지거든요. 특히 2024년 하반기에 출시된 Node.js 24는 게임 체인저라고 할 만큼 큰 변화를 가져왔습니다.
Node.js 24, 무엇이 달라졌을까
올해 출시된 Node.js 24는 단순한 버전 업데이트가 아니에요. V8 자바스크립트 엔진이 13.6 버전으로 올라가면서 실행 속도가 눈에 띄게 빨라졌거든요. 실제로 대용량 데이터를 처리하는 프로젝트에서 테스트해봤는데, 이전 버전 대비 처리 시간이 20퍼센트 가량 단축됐어요.
더 인상적인 건 보안 기능이에요. 이전까지는 실험적 기능으로 제공되던 Permission Model이 정식 기능으로 자리 잡았습니다. 명령어도 더 간결해져서 이제는 –experimental-permission 대신 –permission만 입력하면 돼요. 파일 시스템이나 네트워크 접근을 세밀하게 제어할 수 있어서, 보안이 중요한 프로젝트에서 특히 유용합니다.
AsyncLocalStorage라는 기능도 빼놓을 수 없어요. 비동기 작업을 추적할 때 쓰는 건데, 내부 구조가 AsyncContextFrame으로 바뀌면서 성능이 대폭 개선됐습니다. 복잡한 비동기 로직을 다루는 개발자라면 체감할 수 있을 거예요.
URLPattern API가 전역으로 제공되는 것도 편리한 변화예요. 이전에는 일일이 import 해야 했는데, 이제는 그냥 바로 쓸 수 있거든요. URL 패턴 매칭이 필요한 라우팅 작업이 훨씬 수월해졌습니다.
실전 Node.js 설치 가이드
윈도우 사용자라면 설치가 정말 쉬워요. 공식 사이트에서 인스톨러를 받아 실행하기만 하면 끝이거든요. 다만 한 가지 팁을 드리자면, LTS 버전과 Current 버전 중 선택할 때는 용도를 고려해야 합니다.
실무 프로젝트라면 무조건 LTS 버전을 추천해요. 장기 지원이 보장되고 안정성이 검증됐거든요. 반면 새로운 기능을 미리 써보고 싶다면 Current 버전을 선택하면 됩니다. Node.js 24는 올해 10월에 LTS로 전환될 예정이니까, 지금 써보면서 익숙해지는 것도 괜찮은 전략이에요.
맥 사용자는 Homebrew를 활용하는 게 가장 편해요. 터미널을 열고 간단한 명령어 몇 줄이면 설치가 완료됩니다. 업데이트도 마찬가지고요. brew upgrade node 한 줄이면 최신 버전으로 올라가니까요.
리눅스 환경에서는 apt를 써도 되지만, NVM을 강력 추천합니다. Node Version Manager의 약자인데, 여러 Node.js 버전을 동시에 관리할 수 있어서 정말 편리해요. 프로젝트마다 요구하는 버전이 다를 때 특히 유용하죠.
NVM 설치는 생각보다 간단해요. curl 명령어로 설치 스크립트를 실행하고, 환경 변수만 설정해주면 끝이에요. 그 다음부터는 nvm install node 한 줄로 최신 버전을 설치할 수 있습니다. 특정 버전이 필요하면 nvm install 22.0.0 식으로 버전을 명시하면 돼요.
프로젝트별로 다른 버전을 쓸 때는 .nvmrc 파일을 만들어두면 편해요. 프로젝트 루트에 원하는 버전 번호만 적어두면, nvm use 명령어 하나로 자동으로 해당 버전으로 전환되거든요.
npm 11의 새로운 세계
npm 11은 2024년 12월에 나왔는데, 체감 성능이 정말 달라요. npm install을 실행할 때 속도가 눈에 띄게 빨라졌거든요. 대규모 프로젝트에서 패키지를 설치할 때 이전 같으면 커피 한 잔 마실 시간이었는데, 이제는 그냥 기다리면 금방 끝나요.
보안 측면에서도 개선이 많아요. 패키지 취약점 검사가 더 정교해졌고, 의심스러운 패키지를 설치하려고 하면 경고를 띄워줍니다. audit 기능도 강화돼서 프로젝트의 보안 상태를 한눈에 파악할 수 있어요.
npm init 명령어도 달라졌어요. 이제 프로젝트 타입을 물어보는 단계가 추가됐거든요. 그래서 처음부터 프로젝트 성격에 맞게 설정할 수 있습니다. package.json 파일의 정렬 방식도 바뀌어서 가독성이 좋아졌고요.
주의할 점은 일부 레거시 기능이 제거됐다는 거예요. npm hook 같은 기능은 이제 안 되고, ignore-scripts 옵션의 작동 방식도 변경됐습니다. 오래된 프로젝트를 업그레이드할 때는 이런 부분을 꼭 체크해야 해요.
npm 필수 명령어 완벽 정리
npm을 처음 접하면 명령어가 많아서 헷갈릴 수 있어요. 하지만 자주 쓰는 건 몇 개 안 되거든요. 가장 기본이 되는 명령어부터 차근차근 알아보죠.
npm install은 말 그대로 패키지를 설치할 때 씁니다. package.json에 명시된 모든 의존성을 한 번에 설치하려면 그냥 npm install만 입력하면 돼요. 특정 패키지 하나만 설치하고 싶으면 npm install express 이런 식으로 패키지 이름을 붙이면 됩니다.
개발 단계에서만 필요한 패키지는 –save-dev 옵션을 붙여요. 예를 들어 테스트 도구 같은 건 실제 서비스에는 필요 없잖아요. npm install jest –save-dev 이렇게 하면 devDependencies에 추가됩니다.
전역으로 설치하고 싶을 때는 -g 플래그를 씁니다. 명령줄 도구처럼 어디서든 실행해야 하는 패키지가 이에 해당하죠. npm install -g typescript 이런 식으로요.
npm update는 설치된 패키지를 최신 버전으로 올려줘요. 모든 패키지를 한 번에 업데이트하려면 npm update만 입력하면 되고, 특정 패키지만 올리고 싶으면 npm update lodash 이렇게 하면 됩니다.
npm outdated 명령어도 유용해요. 현재 설치된 패키지 중에 업데이트가 필요한 게 뭔지 보여주거든요. 실행하면 현재 버전, 원하는 버전, 최신 버전이 표로 나와서 한눈에 파악할 수 있어요.
프로젝트를 시작할 때는 npm init을 써요. 대화형으로 질문에 답하면서 package.json을 만들어줍니다. 귀찮으면 npm init -y로 기본값으로 빠르게 생성할 수도 있고요.
npm run은 package.json의 scripts 섹션에 정의된 명령어를 실행해요. 예를 들어 start 스크립트를 실행하려면 npm run start 또는 간단히 npm start라고 입력하면 됩니다. test 스크립트도 npm test 한 줄이면 돼요.
패키지를 삭제할 때는 npm uninstall을 씁니다. npm uninstall lodash 이렇게 하면 패키지가 제거되고 package.json에서도 지워져요.
npm search는 패키지를 찾을 때 편해요. npm search react-router 이런 식으로 검색하면 관련 패키지 목록이 나옵니다. 다만 웹사이트에서 찾는 게 더 편할 때가 많긴 해요.
npm list는 현재 설치된 패키지 목록을 트리 형태로 보여줘요. 의존성 관계를 파악할 때 유용하죠. npm list –depth=0 이렇게 하면 최상위 패키지만 볼 수 있어서 깔끔해요.
실무에서 꼭 알아야 할 npm 팁
package.json 파일은 프로젝트의 설계도 같은 거예요. 여기에 프로젝트 정보, 의존성, 스크립트 등이 모두 담겨있거든요. dependencies는 실제 서비스에 필요한 패키지고, devDependencies는 개발 단계에만 쓰는 거예요.
버전 관리도 중요해요. package.json에 보면 버전 앞에 기호가 붙어있는데, 캐럿 기호는 마이너 업데이트를 자동으로 받겠다는 뜻이에요. 틸드 기호는 패치 업데이트만 허용하고요. 정확한 버전을 고정하고 싶으면 기호 없이 숫자만 적으면 됩니다.
package-lock.json 파일은 절대 지우면 안 돼요. 이 파일이 있어야 팀원들이 똑같은 버전의 패키지를 설치할 수 있거든요. 간혹 충돌이 생겨서 지우고 싶은 충동이 들 때가 있는데, 그럴 때는 npm install을 다시 실행해서 재생성하는 게 맞아요.
보안 취약점은 npm audit으로 체크할 수 있어요. 실행하면 알려진 보안 문제가 있는 패키지를 찾아서 보고해줍니다. npm audit fix를 실행하면 자동으로 안전한 버전으로 업데이트까지 해줘요. 다만 메이저 버전 업그레이드는 –force 옵션을 붙여야 하는데, 이건 신중하게 결정해야 해요.
캐시 문제가 생겼을 때는 npm cache clean –force로 해결할 수 있어요. 이상하게 패키지가 제대로 안 깔리거나 업데이트가 안 될 때 한 번 시도해볼 만해요.
버전 전환과 관리 전략
실무에서는 여러 프로젝트를 동시에 진행하는 경우가 많아요. 문제는 각 프로젝트마다 요구하는 Node.js 버전이 다를 수 있다는 거죠. 이럴 때 NVM이 진가를 발휘합니다.
nvm list로 현재 설치된 버전들을 확인할 수 있어요. nvm use 22.0.0 이런 식으로 원하는 버전으로 바로 전환할 수 있고요. 기본 버전을 설정하고 싶으면 nvm alias default 22.0.0 이렇게 하면 돼요.
프로젝트 디렉토리에 .nvmrc 파일을 만들어두면 정말 편해요. 파일 안에 22.0.0 이런 식으로 버전만 적어두고, 그 디렉토리로 이동할 때마다 nvm use를 실행하면 자동으로 해당 버전으로 바뀝니다.
업데이트 전략도 중요해요. 무작정 최신 버전으로 올리는 건 위험할 수 있거든요. 특히 메이저 버전이 바뀔 때는 breaking change가 있을 수 있어서 주의해야 해요. 테스트 환경에서 먼저 충분히 검증하고 프로덕션에 적용하는 게 안전합니다.
Node.js 24로 업그레이드할 때는 의존성 패키지도 함께 체크해야 해요. npm-check-updates 같은 도구를 쓰면 어떤 패키지를 업데이트해야 하는지 한눈에 볼 수 있습니다. 하지만 전부 한꺼번에 올리기보다는 단계적으로 진행하는 게 좋아요.
문제 해결과 디버깅
개발하다 보면 예상치 못한 에러를 만나는 경우가 많아요. 가장 흔한 건 버전 불일치 문제죠. 프로젝트에서 요구하는 Node.js 버전과 현재 설치된 버전이 안 맞을 때 발생합니다. 이럴 때는 에러 메시지를 잘 읽어보고 권장 버전으로 바꿔주면 돼요.
권한 문제도 자주 발생해요. 특히 전역 패키지를 설치할 때 sudo를 붙여야 하는 경우가 있는데, 이건 좋은 방법이 아니에요. NVM을 쓰면 이런 문제를 근본적으로 해결할 수 있습니다.
패키지 설치가 실패할 때는 여러 원인이 있을 수 있어요. 네트워크 문제일 수도 있고, 레지스트리 서버가 일시적으로 다운됐을 수도 있죠. 이럴 때는 잠시 기다렸다가 다시 시도하거나, 캐시를 비우고 재설치하면 대부분 해결돼요.
종속성 충돌은 정말 골치 아픈 문제예요. A 패키지는 B 패키지의 1 버전을 원하는데, C 패키지는 B 패키지의 2 버전을 원하는 식이죠. npm 7부터는 peer dependency를 자동으로 설치해주는데, 이 과정에서 충돌이 생길 수 있어요. –legacy-peer-deps 옵션을 써서 우회할 수 있지만, 근본적인 해결책은 아니니까 패키지 버전을 조정하는 게 맞습니다.
node-gyp 관련 에러도 자주 보게 돼요. 네이티브 모듈을 컴파일할 때 필요한 도구인데, 윈도우에서는 Build Tools for Visual Studio가 필요하고 맥에서는 Xcode Command Line Tools가 있어야 해요. 이런 에러가 나면 해당 도구를 먼저 설치해야 합니다.
성능 최적화 노하우
Node.js 24의 성능은 이전 버전보다 확실히 나아졌지만, 그래도 최적화는 필요해요. 특히 대용량 트래픽을 처리하는 서비스라면 더욱 그렇죠.
패키지 크기를 줄이는 것도 중요해요. 필요 없는 의존성은 과감히 제거하고, 비슷한 기능을 하는 여러 패키지 중에서는 가장 가벼운 걸 선택하는 게 좋습니다. npm ls를 활용하면 실제로 사용되지 않는 패키지를 찾아낼 수 있어요.
모듈 로딩 속도도 신경 써야 해요. 너무 많은 모듈을 한꺼번에 불러오면 초기 로딩이 느려지거든요. 필요한 것만 선택적으로 import하는 게 좋습니다.
npm ci 명령어는 CI/CD 환경에서 특히 유용해요. npm install보다 빠르고 일관성 있게 패키지를 설치해줍니다. package-lock.json을 기준으로 정확히 같은 버전을 설치하기 때문에 예측 가능한 빌드가 가능해요.
Node.js와 npm은 계속 진화하고 있어요. 몇 달 사이에도 새로운 기능이 추가되고 성능이 개선되죠. 최신 버전을 따라가는 게 부담스러울 수도 있지만, 보안과 성능 측면에서는 꼭 필요한 일이에요.
처음에는 복잡해 보일 수 있지만, 막상 써보면 생각보다 어렵지 않아요. 기본적인 명령어 몇 가지만 익히면 대부분의 작업을 처리할 수 있거든요. 무엇보다 공식 문서를 자주 참고하는 습관을 들이는 게 중요합니다.
Node.js 24와 npm 11은 분명히 개발 경험을 한층 더 좋게 만들어줄 거예요. 새로운 기능들을 하나씩 시도해보면서 자신만의 워크플로우를 만들어가시길 바랍니다. 개발은 결국 경험이 쌓일수록 더 쉬워지는 법이니까요.