05. errno–13

Node.js(노드제이에스) 환경에서 npm(엔피엠: Node Package Manager) 패키지를 전역으로 설치하거나 업데이트할 때 errno -13 오류가 발생할 수 있다. 이 오류는 운영체제에서 보호하는 시스템 디렉터리에 새로운 파일을 기록할 권한이 부족하여 나타나는 허가 거부(EACCES) 현상이다. 본 교안에서는 해당 오류가 발생하는 구조적 원인을 분석하고, 관리자 권한 실행 및 디렉터리 소유권 수정을 통해 안전하게 문제를 해결하는 과정을 다룬다.

1. 오류 발생 상황 및 원인 분석

npm 업데이트 시도 중 아래의 오류 발생

위 화면의 터미널 로그에서 주목해야 할 부분은 npm ERR! code EACCES 및 npm ERR! errno -13 메시지이다. errno -13은 운영체제에서 지정한 파일 접근 권한이 없음을 뜻하는 오류 번호이다. 일반 사용자 계정으로 패키지를 전역(Global) 영역에 설치하려 할 때, 전역 디렉터리가 최고 관리자(root) 권한으로 잠겨 있어 쓰기 작업이 차단되면서 설치 작업이 중단된다.

2. 해결 방법: 관리자 권한 실행과 디렉터리 권한 수정

관리자 권한으로 명령어를 실행해야 함
아래의 명령어를 복사하여 실행하거나
sudo npm install -g npm
NPM 디렉터리의 권한을 수정하면 된다.

첫 번째 방법인 sudo npm install -g npm은 최고 관리자 권한(sudo: SuperUser DO)을 일시적으로 빌려 명령어를 실행하는 방식이다. 그러나 이 방식을 사용하면 새로 생성되는 패키지 파일 역시 관리자 소유로 생성되므로, 이후 일반 사용자로 패키지를 관리할 때 동일한 권한 오류가 반복될 수 있다.

따라서 권장되는 근본적인 해결책은 npm이 사용하는 전역 디렉터리의 소유권을 현재 로그인된 사용자 계정으로 변경하는 것이다. 디렉터리 소유권을 사용자 계정으로 이전해 두면 이후부터는 관리자 권한 없이도 전역 패키지를 자유롭게 설치 및 업데이트할 수 있다.

3. npm 디렉터리 소유권 일괄 변경 명령어

터미널에 아래 명령어를 입력하여 npm 전역 디렉터리와 하위 구성 요소의 소유권을 현재 사용자로 전환한다.

**sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
**

위 명령어의 각 구성 요소와 옵션은 다음과 같이 동작한다.

  • sudo: 디렉터리 소유자 정보를 변경하기 위해 시스템 관리자 권한을 호출한다.
  • chown: 체인지 오너(Change Owner)의 약어로, 파일이나 디렉터리의 소유자를 변경하는 명령어이다.
  • -R: 재귀(Recursive) 옵션으로, 지정한 디렉터리뿐만 아니라 그 내부의 모든 하위 디렉터리와 파일까지 소유권을 일괄 변경한다.
  • $(whoami): 현재 터미널 세션에 로그인되어 있는 사용자 계정명을 조회하여 소유자로 지정한다.
  • $(npm config get prefix): npm이 전역 패키지를 설치하는 기본 기준 경로(접두사 경로)를 자동으로 탐색하여 반환한다.
  • {lib/node_modules,bin,share}: 중괄호 확장 문법으로, 전역 모듈이 위치하는 lib/node_modules, 실행 파일이 위치하는 bin, 공유 데이터가 위치하는 share 폴더를 한 번에 지정한다.

명령어 실행 시 관리자 비밀번호를 묻는 프롬프트가 나타나면 컴퓨터 로그인 비밀번호를 입력한다. 소유권 변경이 완료된 후에는 sudo 없이 일반 npm install -g <패키지명> 명령어를 실행해도 errno -13 오류 없이 정상적으로 설치가 진행된다.

댓글 남기기