자바스크립트
콜백 지옥
창고관리장
2024. 7. 24. 22:23
콜백이 중첩될 때의 가독성 저하
콜백지옥(callback hell)은 자바스크립트에서 비동기 작업을 처리할 때 콜백 함수를 중첩해서 사용하는 것을 말한다.
예시 코드를 보면 다음과 같다.
const fetchData = (data) => {
setTimeout(() => {
data(null, "mouse");
}, 1000)
};
const processData = (data, callback) => {
setTimeout(() => {
callback(null, `${data} 진행중`);
}, 1000)
};
const saveData = (data, callback) => {
setTimeout(() => {
data(null, `${data} 저장됨`);
}, 1000)
};
위 코드에는 비동기 작업을 수행하면서 콜백 함수를 인자로 받는 함수 세 개가 있다. 이제 이 함수들로 콜백지옥을 만들어보면 다음과 같다.
fetchData((err, data1) => {
if (err) {
console.error(err);
return;
}
processData((data1, (err, data2) => {
if (err) {
console.error(err);
return;
}
saveData((data2, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result)
});
});
});
위의 각 함수가 꼬리를 물며 실행되고 있다. 그런데 점점 오른쪽으로 밀리고 있다.
이처럼 콜백지옥이 되면 코드가 오른쪽으로 밀리며 가독성이 떨어지게 되고, 한 눈에 보기에도 힘들다.
또, 각 단계마다 에러처리를 할 때 코드가 복잡해지며, 코드 수정이나 확장이 어렵다는 특징이 있다.
이러한 콜백지옥을 방지하기 위해 Promise가 나왔고, 이 Promise를 기반으로 하는 async-await 문법을 사용하여 깔끔한 비동기 코드를 작성할 수 있다.
