예외 처리

김무연·2023년 12월 13일

Backend

목록 보기
24/49

예외(Exception) : 처리하지 못한 에러

  • 노드 스레드를 멈춤
  • 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것
  • 에러 처리는 필수
  • try / catch, then / catch...
  • JS 는 예외와 에러가 거의 동일한 의미

try / catch

기본적으로 try catch문으로 예외를 처리

  • 에러가 발생할 만한 곳을 try catch로 감쌈
setInterval(() => {
  console.log("시작")
  try {
    throw new Error("서버를 고장내주마");
  } catch (err) {
    console.error(err);
  }
}, 1000)

위 코드를 보면 throw new Error을 만들어서 에러를 일부러 만들어서 테스트하고 있다. 이 때 에러는 catch의 인자로 잡혀져서 console로 출력해준다

callback함수의 에러

하지만 모든 구문에서 다 try catch를 할 경우 가능은 하지만 조금 없어보임, 그래서 콜백 함수에서 여러 객체를 제공 해주는데 여기서 에러를 사용

const fs = require('fs');

let count = 0

const timer = setInterval(() => {
  fs.unlink('./abcdefg.js', (err) => {
    if (err) {
      console.error(err)
    }
  })

  count++;
  if (count >= 5) {
    clearInterval(timer)
  }
}, 500)

promise의 에러

프로미스도 try catch를 붙여야 한다. 아래처럼 안 붙일시 프로세스가 바로 종료 됨

const fs = require('fs').promises;

const timer = setInterval(() => {
  fs.unlink('./asdfasd.js')
}, 1000)

최후의 수단으로 사용

  • 콜백 함수의 동작이 보장되지 않음
  • 따라서 복구 작업용으로 쓰는 것은 부적합
  • 에러 내용 기록 용으로만 쓰는 게 좋음

process.on('uncaughtException', (err)...)

위를 사용하면 일어나는 모든 에러는 위의 process.on으로 다 모여진다. 하지만 보장이 안되기 때문에 기록 용으로만 쓰는 게 좋음

process.on('uncaughtException', (err) => {
  console.error('예기치 못한 에러', err);
});

setInterval(() => {
  throw new Error('서버를 고장내주마!');
}, 1000);

setTimeout(() => {
  console.log('실행됩니다');
}, 2000);

프로세스 종료하기

프로세스 아이디 : process.pid

profile
Notion에 정리된 공부한 글을 옮겨오는 중입니다... (진행중)

0개의 댓글