Node.js 동기/ 비동기 에러처리
에러 처리에 있어 비동기, 동기 프로미스의 동작을 이해해야한다.
쉽게 이야기한다면 동기적은 위에서 부터 순차적으로 진행되며 각 작업이 완료될때까지 기다린 후에 진행되어지는 걸 말하며
비동기는 순차적으로 진행 되지않으며 각 작업을 기다리지않고 완료되면 다음 작업을 진행하는 것을 말한다.
Promise는 애초에 비동기적으로 처리되며 흔히 말하는 콜백지옥 복잡성을 줄이기 위해 사용되고 프로미스 체이닝을 통해 명시적으로 연속 작업이 가능한 것을 말한다.
따라, 작업의 성공 또는 실패에 따라서 처리할 코드를 지정할 수 있고 가독성과 유지보수성이 매우 향상 되는 결과를 낳는다
이해하기 매우 힘들었음..
동기적 처리 예로
Try Catch문을 사용하여 동기적으로 에러처리가 가능
fs는 비동기적으로 처리되지만 try Ctach로 인해 동기적인 실행이 된다.
때문에 미들웨어는 프로미스를 try catch가 완료될때까지 기다리며 완료 후에 에러처리나 send 한다.
비동기 처리 예시
fsAsnc .then로 비동기처리를 명시 하여 진행
동기적 처리방식과 차이는 여기서 확실하게 드러난다.
fsAsync는 비동기처리로 진행이 되며 get미들웨어는 프로미스보다 먼저 종료가 되어 지고 이후에 fs가 완료됨
(Promise는 fs와 .then 등을 말함)
따라 .catch을 쓰지않으면 에러처리가 안되며 미처리상태로 남게된다.
정리
* 일반적으로 동기적 처리에서는 미들웨어는 프로미스의 처리를 기다린다.
하지만 비동기 처리방식에서는 미들웨어는 먼저 처리되어 프로미스를 기다리지 않고 다음 미들웨어를 실행한다.
그렇기 때문에 에러 또한 미처리상태가 됨.
* 마지막에 app.use()등으로 에러 처리를 한다 한들 비동기에서 catch를 쓰지않으면 미들웨어는 먼저 종료되기 때문에 비동기 에러는 미처리 상태가 된다.
위와 같이 에러를 404면 err.name을 기준으로 클라이언트 요청 문젠지 서버문제인지를 구별하는 에러처리를 해도
무관하다. 다만 비동기에는 무조건 에러를 catch하지 않으면 "미처리" 한다는 것을 유의!
'Node.jstesttset' 카테고리의 다른 글
| [Node] JWT , Login 인증 (0) | 2024.01.16 |
|---|---|
| [Node] - bcrypt (1) | 2024.01.14 |
| Node.js 미들웨어란? (0) | 2023.11.27 |