1. Use Async-Await or promises for async error handling
비동기식 콜백 오류를 다루는것은 매우 어려운 일이므로 reputable promise library를 사용하거나 async-await 에 try-catch 와 같이 친숙한 구문을 사용하는 것이 좋다.
2. Use only the built-in Error object
error object는 내장객체만을 사용하는것이 통일성이 향상되고 정보손실을 방지할 수 있어 좋다. custom 객체를 사용하는경우 상호 운용성이 복잡해진다. ( ex: stack trace 정보가 손실될 수 있음 )
3. Distinguish operational errors vs programmer errors
운영상의 오류와 프로그래머가 내는 오류를 분류한다.
운영상의 오류는 프로그래머가 이해할 수 있는 내의 범위의 오류를 말한다.
프로그래머 오류는 알 수 없는 코드장애로 응용프로그램을 다시 시작하는 오류를 말한다.
( 알려지지 않은 오류로 응용프로그램을 다시 시작해야한다면 다중사용자에 대응도가 매우 떨어지기 때문에 상황에 대한 대처법을 적용해야 한다. )
4. Handle errors centrally, through but not within middleware
모든엔드포인트의 에러는 캡슐화를 잘해서 메일 또는 로그로 중앙에서 관리할 수 있도록 해주어야 한다.
5. Document API errors using Swagger
스웨거에 에러에 대한 가이드를 명시한다. 사용자가 에러에 대한 대처를 작성할 수 있다.
6. Shut the process gracefully when a stranger comes to town
알 수 없는 오류가 발생할 경우. 애플리케이션 운영 상태에 대한 보장을 할 수 없으므로 Forever 나 PM2 같은 restarter를 사용하여 프로세스를 다시 시작한다.
7. Use a mature logger to increase errors visibility
Winston, Bunyan, Log4J 와 같은 로깅 도구를 사용하면 오류 발견을 쉽게할 수 있다.
console.log를 사용하는 것보다 오류 디텍팅 비용을 아낄수 있다.
8. Test error flows using your favorite test framework
코드가 작성자가 의도한 시나리오를 충족하는지, 올바른 오류를 처리하고 있는지 확인한다.
9. Discover errors and downtime using APM products
모니터링 및 성능측정 제품을 사용하여 오류 및 다운타임을 검색한다.
10. Catch unhandled promise rejections
unhandled promise rejections을 catch 한다. 오류에 대해 기록을 남기고 처리할 수 있는 방법을 생각해 본다.
11. Fail fast, validate arguments using a dedicated library
arguments에 대해 검증할 수 있는 library를 사용한다.
'백엔드 > Node.js' 카테고리의 다른 글
Node.js 핵심개념정리 (0) | 2019.10.15 |
---|