
비동기 프로그래밍은 사용자 경험을 향상시키지만, 코드의 실행 흐름이 순차적이지 않아 몇 가지 어려움이 따른다.
step1(function (value1) {
step2(value1, function (value2) {
step3(value2, function (value3) {
step4(value3, function (value4) {
// value4를 사용하는 로직...
// 코드가 너무 깊어져 이해하기 어렵다.
});
});
});
});
문제점: 일반적인 try...catch 문은 동기 코드에서는 잘 동작하지만, 콜백 기반의 비동기 코드에서는 에러를 잡아내지 못한다.
해결법: Promise의 .catch()나 async/await과 try...catch를 사용
Node.js의 기준입니다.
async/await & try...catch+) 비동기 코드를 동기 코드처럼 만들어 논리 흐름 파악이 쉽다
+) 동기 코드처럼 Breakpoint를 설정하고 한 줄씩 실행하며 디버깅하기 매우 편함
-) 코드 패턴일 뿐, 디버깅 도구는 아님
-) await 키워드를 빠뜨리는 등의 실수를 하면 예기치 않게 동작할 수 있음
+) Breakpoint를 걸어 코드 실행을 멈추고 단계별로 실행(Step Over, Step Into)할 수 있음
+) Call Stack 패널에서 비동기 작업의 시작점(e.g. setTimeout을 호출한 곳)까지 추적해줘 문제의 근원을 찾기 쉬움
+) API 요청 상태나 Promise 객체의 현재 상태를 직접 확인
-) 모든 기능을 효과적으로 쓰려면 러닝 커브가 커짐
-) Breakpoint를 설정하고 코드를 다시 실행하는 과정이 필요
+) 서버 사이드 디버깅이 가능함
+) Chrome 개발자 도구와 연동하여 디버깅 가능
-) --inspect 플래그를 붙여 서버를 실행하고, 개발자 도구에 연결하는 과정이 필요