백엔드 개발자(node.js)가 되는 과정

npm global 설치와 환경 변수

soopy 2023. 5. 24. 09:00
728x90

nodemon 패키지 설치 과정에 대한 학습 과정에서 npm의 글로벌 설치와 환경 변수에 대해 이해한 내용을 정리했습니다.

nodemon 패키지 설치

node와 Express만 사용하면 코드를 수정한 뒤 웹 상에서 확인하기 위해 서버를 껐다가 다시 켜야 하는 번거로움이 있는데 이를 해결해주는 패키지가 nodemon이다. (사실 처음 node main.js를 실행했을 때 Flask에서도 지원해주는 서버 재실행 기능을 node는 왜 안해주지? 라는 생각이 들었다.)
nodemon은 코드가 변하면 이를 감지하여 자동으로 서버를 재실행 해주는 기능을 제공한다.
설치는 아래와 같이 터미널에 입력한다.

sudo npm install -g nodemon

위 명령어에서 -g 옵션은 global 설치를 의미한다. 글로벌 설치를 하는 이유는 nodemon 실행을 앞으로 node나 npm처럼 경로 상관 없이 항상 실행할 수 있는 환경에 놓기 위해서이다.
정리하자면 앞으로 기존에 웹 서버를 돌리기 위해 node main.js를 입력하는 대신 nodemon main.js을 입력하여 서버를 돌릴 예정이기 때문에 글로벌 설치를 진행했다고 볼 수 있다.

글로벌 설치와 환경 변수

글로벌(전역) 설치가 의미하는 바는 간단히 말해서 현재 디렉토리의 node_modules에 설치되는 것이 아닌 MacOS 기준으로 usr/local/lib/node_modules경로에 설치함을 뜻한다. 여기서 usr 폴더는 시스템 레벨 폴더이므로 설치하기 위해 sudo 권한이 요구된다.

또한 해당 경로 내 /nodemon/bin/nodemon.js파일을 실행하기 위한 symbolic link(바로가기) nodemon 파일을 usr/local/bin 폴더에 설치한다. 위 두가지는 npm config list --json을 통해 전역 설치 경로인 prefix의 설정과 nodemon의 package.json 내 bin 필드의 설정을 따른다.

위에서 언급한 usr/local/bin은 MacOS에서 $PATH 환경 변수로 등록된 경로에 해당하는데, 환경 변수는 터미널에서 특정 프로그램을 실행할 때 (가령 node, npm, pip, python 명령어 입력 등) 가장 먼저 뒤지는 경로는 뜻한다. 쉽게 말해 우리가 터미널에 'node'라고 입력하면 OS는 $PATH 경로에 가서 'node'라는 파일이 있는지 찾는다. 그런데 usr/local/bin에는 대부분 심볼릭 링크 파일(바로가기)를 넣어두어 특정 프로그램의 실행이 간편하도록 하는 용도로 쓴다.

💡 Tip
echo $PATH 명령어를 입력하면 환경변수로 등록된 디렉토리의 목록을 확인할 수 있다.

결론적으로 터미널 창의 어떤 위치에서든지 nodemon을 입력하면 nodemon이라는 심볼릭 링크를 환경 변수 내에서 찾기 시작하고 이를 찾으면 심볼릭 링크가 가리키는 원본 파일의 경로를 따라가 해당 파일을 실행하는 순서이다. (추가적으로 nodemon.js 원본 파일을 열어보면 코드 상단에 node로 실행해야 한다는 코드가 있어 사실상
node /usr/local/lib/node_modules/nodemon/bin/nodemon.js명령을 실행하는 것과 같다.)

환경 변수 응용

가령 내가 만든 뉴스 스크랩 파이썬 코드를 심볼릭 링크로 만들어 환경변수에 아래와 같이 저장할 수 있다.

ln -s /my-project/project01/newscrape.py /usr/local/bin/newscrape

ln은 링크 생성 명령어이며 옵션으로 -s를 주면 심볼릭 링크 생성을 명령한다. 이를 통해 심볼링 링크 참조 대상과 링크 파일 저장 위치를 순차적으로 입력하면 된다.

이후 실행시킬 newscrape.py파일에 실행권한을 부여한다. 이 과정을 하지 않으면 Permission Denied를 보게 된다.

chmod 755 /my-project/project01/newscrape.py

마지막으로 newscrape.py을 열어 최상단에 #!/usr/bin/env python를 입력한다. 이는 해당 파일을 python으로 실행한다는 의미이다.

이렇게 하면 newscrape.py 파일의 심볼릭 링크인 newscrape 파일이 $PATH 환경변수로 등록된 usr/local/bin 경로에 생성되고, 앞으로 터미널에서 newscrape만 입력해도 newscrape.py파일을 실행시킬 수 있게 된다.

728x90
728x90