Node.js 16.x 버전 설치
1. 이슈 내용
Node.js
에서 mongoose
를 사용하여 간단한 API를 만드는 개인 프로젝트를 진행 중입니다. 로컬 환경에서 모든 기능 개발이 끝난 이후에는 Oracle Cloud의 인스턴스에 배포해 보았습니다. 아직 CI/CD 환경은 구축하지 않았기 때문에 git pull
로 소스코드를 다운로드 받아 테스트를 진행하였습니다. 그런데, 서버 애플리케이션을 실행하자, 다음과 같은 오류 문구가 출력된 것을 확인하였습니다.
ReferenceError: TextEncoder is not defined Node.js with mongoose
오류가 발생한 원인은 mongoose
에 TextEncoder
라는 것이 없기 때문이라는 내용을 찾았고, mongoose
6.x 버전을 사용하기 위해서는 최소 Node.js
의 12.x버전이 설치되어 있어야 한다는 글[1]을 발견하였습니다.
Actually mongoose 6 requires Node 12 or higher, so this is expected behavior. Mongoose 6 does not support Node 10.So updating Node version will fix the issue. It also fix the problem by downgrading mongoose version to 5.
위의 내용을 참고하여 다음과 같이 두 가지 해결 방법을 알 수 있었습니다.
nodejs
를 12.x 이상으로 업데이트하거나,mongoose
를 5.x 버전으로 낮추어야 한다.
2. 해결 내용
인스턴스에 설치된 nodejs
버전을 확인해본 결과 10.x 버전으로 설치된 것을 확인하였습니다. 로컬 환경에서 개발할 때를 고려하여 mongoose
버전을 낮추기보다는 nodejs
의 버전을 업그레이드하기로 하였고, 구글링한 자료[2]를 참고하여 nodejs 16.x 버전으로 재설치하였습니다. 먼저, apt를 최신 버전으로 업데이트 및 업그레이드 합니다.
$ sudo apt update
$ sudo apt upgrade
Ubuntu, Debian 및 파생 모듈에 대한 바이너리 패키지를 제공하는 NodeSource에서 설치 스크립트를 다운로드 받기 위해 curl
을 설치합니다.
$ sudo apt install -y curl
curl
이 설치되었다면 아래 명령어를 통해 설정 스크립트를 다운로드합니다.
$ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
위의 스크립트가 다운로드되면, apt 소스에 추가되고, 해당 스크립트로 인해 apt가 업데이트 됩니다. 이어서 아래 명령어를 입력하여 nodejs
16.x 버전을 설치합니다.
$ sudo apt install -y nodejs
설치된 nodejs
의 버전을 확인해보면 다음과 같이 16.14.2 버전(작성일자 기준)이 설치된 것을 확인할 수 있습니다.
$ node --version
v16.14.2
최신 버전의 nodejs
가 설치된 후에 express 서버를 실행시켜보니 정상적으로 동작하는 것을 확인할 수 있었습니다.