Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

node.js 여러가지 버전을 교체해 가면서 사용하기

node.js가 작년 Ryan이 발표할때가 0.1.20정도였는데  현재 버전은 0.2.5이고 2010 Q4 로드맵부터는(0.2.4부터) 버전 넘버링은 Stable과 Unstable로 나누어서 릴리즈 하기 시작했습니다. Major.Minor,Patch 방식의 버저닝에서 Minor의 버전이 짝수면 Stable버전이고 홀수면 Unstable을 의미하고 있고 상당히 빠르게 올라가고 있어서 node.js를 가지고 노는 중에 버전을 올려줘야 할 일이 꽤 많이 있는 편입니다.

일단 0.2.4부터는 0.3.x의 unstable 버전도 같이 있기 때문에 여러가지 테스트를 해보려면 버전을 바꿔가면서 해볼 필요가 있었습니다. 버전을 바꾸고 문제가 생긴 경우라면 버전을 다시 내려서 테스트해볼 필요도 있고요. 물론 설치과정을 다시 거치면 되지만 make단계에서 시간도 많이 걸리고 무척이나 귀찮은 작업입니다. 물론 이런 문제를 해결하도록 하는 Node Version Manager인 nvm이나 Virtual Environments for Node인 nave가 있기는 하지만 아직 node.js에 대해서 자세히는 알지 못하는 상태에서 기반 시스템을 자동으로 처리해주는 이런 툴을 사용할 경우 혹 관리툴의 버그로 인해서 문제가 발생할 결우 찾아내기 어려울 것 같기도 해서(위 2개의 툴을 사용해 보고 결정한 것은 아닙니다.) 현재 단계에서는 그냥 심볼릭링크로 버전을 관리하는 방식을 취하고 싶었습니다. 이 부분에 대해서 자료를 찾을수가 없어서 고생을 좀 했습니다.




버전별 Node.js 설치하기

기본적인 설치 방식인 ./configure && make && make install 과정을 거쳐서 설치를 하게 되면 /usr/local/bin/node가 설치되게 됩니다.(일단 제 OSX환경에선 그렇습니다. make install에서 마지막 부분에 설치되는 위치가 나옵니다.) 같은 위치인 /usr/local/bin에 node-repl과 node-waf도 설치가 되지만 이 두 파일은 정확한 용도는 모르겠더군요. 명령어만 이곳에 설치가 되고 빌드파일들은 명령어를 실행하는 node디렉토리 안에 생기게 됩니다.(물론 /usr/local/bin이 PATH에 포함되어 있어야 아무곳에서나 node 명령어를 사용할 수 있습니다.)

기존의 설치된 node.js를 삭제하기 위해서 sudo make uninstall 을 실행하여 node.js를 삭제한 뒤 여러 버전들을 다운받아서 관리하기 쉽게 특정 폴더 아래에 놔둡니다. 예를 들면 $HOME/nodejs/폴더 아래 v0.2.5와 v0.3.1폴더에 각 버전의 파일들을 압축풀어둡니다.


./configure --prefix=$HOME/nodejs/v0.2.5
make
make install

위의 명령어처럼 configure에 prefix를 주면 해당 위치에만 빌드를 하게 됩니다.($HOME/nodejs/v0.2.5부분은 설치를 원하는 폴더로 지정하면 됩니다. 보통은 현재 폴더의 위치를 하는게 편할듯 합니다.) 이렇게 설치하면 /usr/local/bin에는 node가 설치가 안되기 때문에 /usr/local/bin에서 ln -s $HOME/nodejs/v0.2.5/bin/node node 명령어를 실행하여 node실행파일에 대한 심볼릭 링크를 만들어 줍니다.(기본적인 사용은 node만 연결해 주어도 되지만 bin안에 있는 node-repl과 node-waf에 대한 심볼릭 링크도 만들어 주는것이 좋습니다. node-waf는 파이썬 빌드툴인데 node의 모듈설치지 node-waf가 없으면 문제가 생길 수 있습니다.) 이제 아무곳에서나 node --version을 실행하면 0.2.5버전의 node가 실행됨을 알 수가 있고 버전별로 prefix를 주어 설치를 모두 해 놓은뒤에 심볼릭 링크를 v0.3.1을 가리키게 바꿔주면 0.3.1의 node.js를 사용할 수 있기 때문에 간단히 심볼릭 링크의 변경만으로 여러버전의 node.js를 바꿔가면서 사용할 수 있습니다.





npm 관련 경로 문제 해결하기

이하 내용은 npm 0.3.x버전 이하에서만 필요한 부분입니다. 1.x이상 버전의 npm을 사용할 경우에는 아래의 내용이 필요치 않습니다. npm 1.0에 대해서는 별도로 올린 포스팅을 참고해 주세요

이렇게 사용할 경우 node.js의 버전 관리에는 문제가 없지만 npm을 사용(이전 글 참조)할 경우 npm으로 설치한 모듈들을 찾지 못하는 문제가 발생했습니다. npm을 사용하지 않고 각 모듈을 직접 불러서 사용할 경우 경로가 지정되기 때문에 문제가 없겠지만 npm으로 설치한 경우에는 경로지정 없이 바로 사용할 수 있기 때문에 위와 같이 node.js를 설치할 경우에는 제대로 찾지 못했습니다.

일단 이 문제를 해결하기 위해서 npm의 설치환경을 명시하기 위해서 ~/.npmrc 파일에 아래와 같이 입력합니다.


root=/usr/local/lib/node
binroot=/usr/local/bin
manroot=/usr/local/share/man

이 경로는 사실 디폴트설정이나 마찬가지고(아마도?) 다른 경로를 지정하면 npm의 모듈들도 원하는 위치에 따로 관리할 수 있지만 실행을 위해서 PATH에 넣어줘야 한다거나 man페이지의 PATH를 추가해줘야 한다거나 하는 등의 작업이 필요해서 저같은 경우는 편의상 위의 경로를 그대로 사용했습니다. 이렇게 설정하고 npm으로 모듈들을 설치하면 /usr/local/lib/node아래에 모듈들이 설치되게 됩니다.

node.js에서 경로를 지정하지 않은 모듈들의 경우에는 node.js를 빌드한 폴더의 lib/node 폴더 아래에서 찾는것 같습니다. 그래서 앞에서 설치한 위치인 $HOME/nodejs/v0.2.5/lib에서 이미 있는 node폴더를 삭제한 뒤에 ln -s /usr/local/lib/node node를 실행하여 npm의 모듈설치폴더에 대한 심볼릭링크를 생성하면 정상적으로 npm의 모듈들을 사용할 수 있습니다.(기존의 node폴더에는 wafadmin이라는 폴더만 있는데 저같은 경우는 /usr/local/lib/node에도 이 폴더가 있어서 그냥 사용했지만 없을 경우에는 복사해 넣으셔도 무관한듯 합니다.새로운 버전의 wafadmin을 /usr/local/lib/node로 덮어쓰셔야 합니다. Python모듈이 들어있는것 같은데 일부 모듈설치시 없으면 설치가 되지 않습니다.)

npm에 대한 심볼릭 링크를 만드는 건 좀 귀찮기는 하지만 새버전을 설치할 때 한번만 해주면 되기 때문에 버전을 바꿔가면서 작업할 때는 귀찮은 작업은 되지 않을것 같습니다.(아직 많은 테스트는 안해봤지만 큰 문제없이 동작하고 있는것 같습니다.)
2010/12/05 01:47 2010/12/05 01:47