node.js를 열심히 배우는 중에 문득 예외 처리를 왜 하는지에 대해 궁금해졌다.
그래서 기본적인 문법과 메커니즘을 정리하고 의의를 탐구해보겠다.
try {
// 예외가 발생할 수 있는 코드
} catch (error) {
// 예외 처리 코드
}
node.js의 try catch는 코드 실행 중에 예외 상황을 캐치하여 실행을 중단시키지 않고 에러 상황을 알려준다.
try 블록 내에서 예외 상황이 발생하면 해당 예외는 catch 블록으로 전달된다.
catch 블록에서 예외 객체를 인수로 전달받아 처리한다.
예시 코드
const fs = require('fs');
try {
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
} catch (error) {
console.error('Error:', error);
}
예시 코드의 fs.readFileSync()에서 예외가 발생하면 catch 블록에서 해당 예외를 인수로 받아 콘솔에 'ERROR'를 출력한다.
WHY? 예외 처리를 하는 메커니즘은 이해하겠는데 왜 사용할까?
예외 처리를 통해 코드의 안정성과 신뢰성을 향상 시킨다.
한마디로 정리하자면 위와 같은데, 어떤 이유로 안정성과 신뢰성이 향상 된다는 건가?
이유를 하나씩 파헤쳐보자면,
1. 프로그램의 비정상 종료 방지
예외 처리는 비정상 종료를 방지할 수 있다. 프로그램의 안정성을 향상 시키는데 큰 역할을 한다.
2. 오류 메세지 제공
예외가 발생하면 해당 예외의 유형과 원인을 설명하는 오류 메세지를 설정해 응답해 준다.
따라서 디버깅과 문제 해결을 돕는데 유용하다.
3. 예외 발생 지점 식별
예외 처리 메커니즘이 작동하면 예외가 발생한 지점이 기록된다. 그래서 코드의 문제를 식별하고 수정하는데 유용하다.
4. 예외 처리 블록을 이용한 복구 작업
예외가 발생했을 경우 catch 블록을 통해 복구 작업을 수행할 수 있는 기회를 제공한다.
그래서 예외가 발생해도 복구하여 프로그램의 실행이 계속될 수 있다.
복구 작업의 예시
const fs = require('fs');
try {
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
} catch (err) {
if (err.code === 'ENOENT') { // ENOENT: No such file or directory
console.log('파일이 존재하지 않습니다.');
fs.writeFileSync('file.txt', '새로운 파일을 생성합니다.', 'utf8');
} else {
console.log(err);
}
}
readFileSync() 메서드를 통해 파일을 읽으려고 하는데 파일이 없는 경우 예외 처리가 된다.
그래서 새로운 파일을 생성하여 프로그램이 중지되지 않고 계속 실행될 수 있도록 한다.
5. 코드 유지 보수 용이
예외 처리 메커니즘이 실행되면 오류 메세지와 예외 발생 지점이 기록되므로, 이 정보를 활용하여 코드의 문제점을 식별하고 수정할 수 있다.
새삼 try catch를 통한 에러 핸들링의 중요성을 실감하였다.
세상에 완벽한 코드는 없다. 항상 예외 상황을 상정하고 발생할 에러에 대비해야겠다.
나의 코드가 더 안정적이고 믿을 수 있게 되길 희망해본다.
'Development > TIL' 카테고리의 다른 글
JsonWebToken (0) | 2023.04.23 |
---|---|
내가 만든 Cookie (0) | 2023.04.21 |
schema.virtual (0) | 2023.04.20 |
this에 대하여 (0) | 2023.04.18 |
mongoose objectId와 new 키워드 (0) | 2023.04.18 |