npm install 과 npm link 의 차이점

개요

Node.js로 전역 CLI 도구를 개발하다 보면 npm install -g .npm link를 같은 “전역 설치” 명령으로 오해하기 쉽다.

둘 다 CLI 명령어를 전역에서 실행할 수 있게 만들어 주지만, 실제로는 의도, 사용 시점, 그리고 개발 흐름 자체가 완전히 다르다.

이 차이를 이해하지 못하면 전역 CLI 개발 과정에서 다음과 같은 혼란을 겪게 된다.

  • 왜 npm link로 실행하면 코드 수정이 즉시 반영되는가?
  • 왜 npm install -g . 는 CLI를 수정할 때마다 다시 설치해야 하는가?

npm install 은 “설치”다

npm install패키지를 설치하는 명령이다.

중요한 점은 출처와 상관없이 동작 방식이 동일하다는 것이다.

  • 원격 npm registry
  • 로컬 파일 시스템
  • 현재 디렉토리 (.)

어디서 가져오든, npm install은 항상 다음과 같이 동작한다.

파일을 복사해서 node_modules
고정된 상태로 설치

그래서:

  • 설치 시점의 코드만 반영되고
  • 이후 원본 소스를 수정해도
  • 설치된 패키지는 변하지 않는다

이 때문에 전역 CLI를 개발하면서
npm install -g . 를 사용하면 매번 재설치가 필요하다.

이건 불편함이나 버그가 아니라,
npm이 패키지 관리자로서 정상적으로 동작하는 결과다.


npm link는 성격이 완전히 다르다.

이 명령은 패키지를 설치하지 않는다.
대신:

현재 로컬 디렉토리를
전역 또는 다른 프로젝트에 연결한다.

구현 방식은 단순하다.

  • 파일을 복사하지 않고
  • 전역 node_modules
  • 심볼릭 링크(symlink) 를 만든다

즉, 실행 시점마다 항상 현재 작업 중인 소스 파일을 직접 참조한다.

그래서:

  • 코드를 수정하면
  • 저장 즉시
  • 다음 실행부터 바로 반영된다

로컬 / 원격 관점에서의 결정적 차이

두 명령을 가장 명확하게 구분하는 기준은 범위(scope) 다.

npm install

  • 로컬 패키지 가능
  • 원격 패키지 가능
  • 배포·소비 관점의 명령
  • 로컬 파일 시스템 전용
  • 원격 개념 없음
  • 내 컴퓨터에서만 의미 있음

그래서 다음 문장이 정확하다.

npm install은 로컬과 원격 모두를 다루는 패키지 관리자 동작이고,
npm link는 로컬 작업 환경에서만 쓰는 개발 편의 기능이다.


개발 관점에서의 의미 차이

npm install을 사용하는 순간,
개발자는 npm에게 이렇게 말하는 것과 같다.

“이 코드는 지금 이 상태로
고정된 결과물이다.”

반대로 npm link를 사용하는 순간의 의미는 다르다.

“이 코드는 계속 바뀌는 개발 중인 소스이며,
지금 이 디렉토리를 그대로 실행하고 싶다.”

그래서 npm link는:

  • 배포와 거의 무관하고
  • CI / 서버 환경에서는 거의 쓰이지 않으며
  • 로컬 개발 중에만 가치가 있다

한 줄 요약

npm install은 패키지를 설치(복사)하는 명령이고,
npm link는 로컬 작업 디렉토리를 연결해
개발을 편하게 하기 위한 명령이다.


최종 정리

npm install

  • 로컬·원격 모두 가능
  • 항상 복사
  • 결과 고정
  • 배포 / 소비자 관점
  • 로컬 전용
  • 심볼릭 링크
  • 항상 최신 상태
  • 개발자 로컬 편의용

이렇게 이해하면
두 명령의 모든 동작과 제약이 자연스럽게 설명된다.