-
try-catch와 비동기 작업에 대하여Programming/javascript 2022. 7. 24. 22:58
try catch문은 자바스크립트에서 예외처리에 사용된다.
이는 발생한 예외를 throw 했을 시 함수를 호출한 상위로 전파가 되는데 이 과정에서 예외처리를 하지 않는다면 컴파일러가 중단되며 만약 배포 서버에서 실행 중인 프로세스라면 중단될 수도 있기 때문에 반드시 이에 대비하여 예외 처리를 해둬야 한다.
하지만 이러한 예외처리 또한 아무때나, 아무 곳에서나 하면 곤란한 상황이 발생 할 수 있는데,
어떠한 Side Effect가 발생 할 수 있는 지 고려해 보자면 바로, 흔히 싱글 스레드인 자바스크립트에서 효율적인 작업 처리를 위하여 사용하는 비동기 시스템이다.
이는 동기 처리에서는 전혀 문제 없지만 비동기 처리는 앞서 말한 발생한 예외는 호출한 상위로 전파가 된다고 하였는데, 비동기 작업을 감싼 예외처리 문은 비동기 함수의 상위가 아니기 때문에 발생한 예외를 처리하지 못하고 문제가 발생 할 수 있다.(호출된 비동기 함수의 상위는 await을 통하여 호출한 비동기 함수기 때문.)
이러한 에러 핸들링에 대한 해결 방법은 의외로 간단하다. 바로 await을 통하여 호출한 비동기 함수의 catch문을 적극 활용하는 것이다.
await testFunc().catch((err) => { // return "handled error"; });
와 같은 형태로 말이다.
요즘 백엔드로 많이 사용하는 노드와 그 프레임워크들(Express.js, nest.js)등 에서는 서비스 단에서 예외 처리를 하는 것 보단 컨트롤러 단에서 발생한 비동기 함수의 에러를 예외처리를 통하여 핸들링하고 클라이언트에는 그에 따른 http status 응답을 주는 것이 코드의 가독성과 유지보수 측면에서 낫고 그리고 컴퓨팅 자원 낭비 측면에서도 약간 낫다고 본다.
'Programming > javascript' 카테고리의 다른 글
Generator에 대하여 (0) 2022.04.24 Closure에 대하여 (0) 2022.02.10 Execution Context에 대하여 (0) 2022.02.10 일반 함수와 생성자 함수의 차이점 (0) 2022.02.10 function과 arrow function의 차이점 (0) 2022.02.10