node.js로 서버 구축을 한 후, 이를 띄우기 위해서 pm2를 사용했다. ec2 내부에 docker 띄우려고 했었는데 시간상 어려워서 일단 pm2로 띄워둔 상태고 나중에 docker 사용하게 되면 그때 또 포스팅할 예정이다.
pm2를 사용하던 중 프론트 팀에서 서버 쪽에서 연결이 끊긴 것 같다는 소식을 전했다. 그래서
pm2 logs
를 찍어서 로그 찍힌 내용을 확인해보니
/home/ubuntu/.pm2/logs/app-error.log last 15 lines:
0|app | /home/ubuntu/Server/node_modules/mysql2/node_modules/lru-cache/dist/cjs/index.js:359
0|app | #initializeTTLTracking() {
0|app | ^
0|app |
0|app | SyntaxError: Unexpected token '('
0|app | at wrapSafe (internal/modules/cjs/loader.js:915:16)
0|app | at Module._compile (internal/modules/cjs/loader.js:963:27)
0|app | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
0|app | at Module.load (internal/modules/cjs/loader.js:863:32)
0|app | at Function.Module._load (internal/modules/cjs/loader.js:708:14)
0|app | at Module.require (internal/modules/cjs/loader.js:887:19)
0|app | at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
0|app | at require (internal/modules/cjs/helpers.js:74:18)
0|app | at Object.<anonymous> (/home/ubuntu/Server/node_modules/mysql2/node_modules/lru-cache/dist/cjs/index-cjs.js:5:36)
0|app | at Module._compile (internal/modules/cjs/loader.js:999:30)
이와 같은 오류가 발생했다. 당연하지만 puppeteer 을 사용했는데 모듈을 설치하지 않아서 난 오류였다. 그래서
npm install --save
를 실행해서 모듈을 설치하려고 했지만
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@puppeteer/browsers@1.4.0',
npm WARN EBADENGINE required: { node: '>=16.0.0' },
npm WARN EBADENGINE current: { node: 'v12.22.9', npm: '8.5.1' }
npm WARN EBADENGINE }
이와 같은 오류가 꽤 많이 떠있는 것을 볼 수 있었고 로그를 다시 찍어봐도 설치가 안된 것을 확인할 수 있었다. 프론트 팀께 여쭤보니 역시나 연결이 안된 게 맞았고 관련 오류를 찾아보니 요구하는 node의 버전과 맞지 않아서 생긴 문제였다.
Node.js 버전 변경하기
1. npm 캐시 제거하기
npm cache clean --force
npm cache verify
npm cache verify는 cache 폴더의 내용을 확인하고, 가비지 데이터들을 삭제하고 무결성을 확인하는 명령어라고 한다.
2. n 설치하기 (sudo 안하면 오류남)
sudo npm install -g n
3. node 버전 업데이트 하기 (sudo 안하면 오류남)
sudo n lts
4. npm 버전 확인하기
npm -v
근데 오류가 났다..
Error: Cannot find module 'semver'
Require stack:
- /usr/share/nodejs/npm/lib/utils/unsupported.js
- /usr/share/nodejs/npm/lib/cli.js
- /usr/share/nodejs/npm/bin/npm-cli.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Module.require (node:internal/modules/cjs/loader:1141:19)
at require (node:internal/modules/cjs/helpers:110:18)
at Object.<anonymous> (/usr/share/nodejs/npm/lib/utils/unsupported.js:2:16)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Module.require (node:internal/modules/cjs/loader:1141:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/usr/share/nodejs/npm/lib/utils/unsupported.js',
'/usr/share/nodejs/npm/lib/cli.js',
'/usr/share/nodejs/npm/bin/npm-cli.js'
]
}
Node.js v18.16.0
node.js 버전이 먹히기는 했는데 도대체 어떤 module이 없다는 건지.... 그래서 해당 오류를 찾아봤더니 node를 재설치하라고 되어있어서 node를 아예 지우고 재설치하기로 했다.
node/npm 재설치 하기
1. node.js 제거: 디렉터리와 bash에 있는 내용을 모두 삭제
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/node_modules/ ~/.npm
sudo rm -rf /usr/local/include/node*
sudo rm -rf /usr/local/bin/node*
sudo apt-get purge nodejs npm
마지막 줄의 purge 명령어가 뭔지 찾아봤는데 purge의 경우, 패키지와 그 패키지의 환경설정을 모두 삭제하는 기능이었다. apt-get remove와 차이점은 remove의 경우, 패키지만 삭제하고 환경설정은 삭제하지 않는데 apt-get purge(= apt purge)를 사용하게 되면 환경설정도 삭제한다.
2. node.js 설치
sudo apt install -y nodejs npm
sudo npm cache clean -f
3. node / npm 업데이트
sudo npm install npm
sudo npm install -g n
sudo n stable
4. node / npm 버전 확인
node -v
npm -v
이렇게 하고 나니까 제대로 출력되는 것을 확인할 수 있었고
다시 모듈 설치를 위해
npm install
명령어를 사용하니까 제대로 실행이 되며 모듈이 오류 없이 설치되는 것을 확인할 수 있었다. 이때 서버를 키기 위해
pm2 start app.js
를 실행하였지만 pm2 명령어를 찾을 수 없다는 오류가 나서 다시 pm2를 설치해주고 시작을 해줬더니 제대로 실행되고 있는 것을 확인할 수 있었다. 여기서 만약 pm2 로 돌아가는 프로세스 상태들을 보고 싶다면
pm2 status
를 사용하면 된다.
출처
https://mine-it-record.tistory.com/664
https://codechacha.com/ko/linux-apt-purge-vs-remove/
https://code-hoon.tistory.com/97
https://amkorousagi-money.tistory.com/entry/Error-Cannot-find-module-semver
'프로젝트 > node.js' 카테고리의 다른 글
[프로젝트] 네이버 클라우드로 서버 구축(2) (0) | 2023.06.19 |
---|---|
[프로젝트] 네이버 클라우드로 서버 구축하기(1) (0) | 2023.06.19 |
[프로젝트] node.js에서 params로 id 받기 (0) | 2023.06.18 |
[프로젝트] puppeteer 사용 오류 해결 (0) | 2023.06.17 |
[프로젝트] ec2에서 node.js 연결하기 (0) | 2023.06.14 |