Post

(TIL) 2024-11-21

정영훈 튜터님의 숙제. 간단하게 설명을 하자면 Post method를 호출하여 데이터를 처리할 때 app.js에서 app.use(express.json()); 주석처리하여 강제로 req의 데이터를 구분할 수 없게 만들어 강제 로 오류를 발생 시켰다.

1
2
3
4
5
6
7
8
9
10
11
12
//생략
try {
    const {
      body: {
        todo: { value },
      },
    } = req;
    
    //생략
  } catch (error) {
    throw Error('서버 에러 발생');
  }

예외 처리를 하였지만 왜 서버가 종료가 되는가? 에 대한 숙제이다.

예외처리 try-catch


프로그램에서 오류가 발생하면 프로그램이 종료된다. 이를 막기 위해 try-catch문(예외처리)를 사용한다.

1
console.log(aaa); //ReferenceError: aaa is not defined 발생
  • try-catch문 사용
1
2
3
4
5
try {
  console.log(aaa); //미출력
} catch (error) {
  console.log('에러 발생'); //출력
}

try구문에서 오류가 발생하면 바로 catch 구문이 호출(실행) 된다. 이를 통해 강제 종료 되는 것을 막을 수 있다.

throw


MDN 문서를 보면 throw는 ‘throw 문은 사용자 정의 예외를 발생(throw)할 수 있습니다. 예외가 발생하면 현재 함수의 실행이 중지되고 (throw 이후의 명령문은 실행되지 않습니다.), 제어 흐름은 콜스택의 첫 번째 catch 블록으로 전달됩니다. 호출자 함수 사이에 catch 블록이 없으면 프로그램이 종료됩니다.’ 라고 적혀있다.

결론


즉 풀어서 설명하자면 catch문 안에서 throw를 통해서 또 다른 오류를 발생 시켰다. 그래서 throw에 대한 예외처리는 안되어 있는 상태라 강제종료가 되었던 것. 해결을 위해서는 throw에 대한 예외처리를 다시 한번 해줘야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//생략
try {
    const {
      body: {
        todo: { value },
      },
    } = req;
    
    //생략
  } catch (error) {
    try{
      throw Error('서버 에러 발생');
    }catch(error){
      console.log(`throw Error('서버 에러 발생') 에 대한 예외 처리`)
    }
  }
This post is licensed under CC BY 4.0 by the author.