본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (11) - 예외 처리하기 [3] : 흔히 발생하는 에러 유형

node js logo image

 

 



 

Javascript 문법 에러를 제외한 오류의 종류를 살펴보도록 하겠습니다. 

 

  • node: command not found
    - 노드를 설치했음에도 이 에러가 발생하는 경우는 환경 변수 설정의 오류가 발생하는 경우가 대부분입니다. 환경 변수에 노드가 설치된 경로가 포함되어야 합니다.

  • ReferenceError: 모듈 is not defined
    - 모듈을 require했는지 확인이 필요합니다.

  • Error: Connot find module 모듈이름
    - 모듈을 require했지만 설치는 안 한 상태입니다. npm i 명령어를 실행해야 합니다.

  • Error [ERR_MODULE_NOT_FOUND] 
    - 존재하지 않는 모듈을 불러올 때 발생합니다.

  • Error: Can't set headers after they are sent
    - 요청에 대한 응답을 보낼 때, 응답을 두 번 이상 보냈다는 의미입니다. 요청에 대한 응답은 원칙적으로 한 번만 보내야 하므로 res관련 메서드가 중복 사용되었는지 확인합니다.

  • FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
    - 코드 실행 시 메모리가 부족한 경우입니다. 일차적으로 코드 리뷰를 통해 오류가 있는지를 확인합니다. 만일 정상이고 메모리가 부족한 케이스라면, 노드의 메모리를 증가시킬 수 있습니다. node --max-old-space-size=4096 파일명과 같은 명령어를 사용합니다. (4096은 4GB)

  • UnhandledPromiseRejectionWarning: Unhandled promise rejection
    - 프로미스 사용 시 catch를 붙이지 않으면 발생합니다.

  • EADDRINUSE 포트 번호
    - 해당 포트에 이미 다른 프로세스가 연결된 상태입니다(노드일 수도 있고, 아닐 수도 있습니다). 프로세스를 종료하거나 다른 포트 넘버를 사용해야 합니다.
// 윈도우 
$netstat -ano | findstr 포트
$taskkill /pid 프로세스아이디 /f

/* 포트가 300이고 netstat -ano | findstr 3000을 수행한 결과의 
프로세스 아이디가 12345였을 경우 taskkill /pid 12345 /f를 수행하면 해당 프로세스가 종료 */


// 맥, 리눅스
$lsof -i tcp:포ㅓ트
$kill -9 프로세스아이디

/* 포트가 3000이고 lsof -i tcp:3000을 수행한 결과의 프로세스 아이디가 12345였을 경우
kill -9 12345를 실행하면 프로세스가 종료 */



  • EACCES 또는 EPERM
    - 노드 작업에 대한 권한이 충분치 않을 경우입니다. 파일이나 폴더 수정, 삭제, 생성, 권한을 확인해보아야 합니다. 맥이나 리눅스일 경우 명령어 앞에 sudo를 붙입니다.

  • EJSONPARSE
    - package.json 등의 JSON 파일에 문법 오류가 있을 경우에 발생합니다. 

  • ECONNREFUSED
    - 요청을 보냈으나 연결이 성립하지 않을 때 발생합니다. 요청을 받는 서버 주소, 혹은 서버가 꺼졌는지 확인합니다.

  • ETARGET
    - package.json에 기록한 패키지 버전이 존재하지 않을 때 발생합니다. 해당 버전이 존재하는지 확인하세요.

  • ETIMEOUT
    - 요청을 보냈으나 응답이 시간 내에 오지 않을 때 발생합니다. 요청을 받는 서버의 상태를 점검해야 합니다.

  • ENOENT: no such file or directory
    - 지정한 폴더나 파일이 존재하지 않는 경우입니다. 맥이나 리눅스에서는 대소문자도 구분해야 합니다.