Node.js의 특징을 찾아보면 단일 스레드, 논 블로킹, 이벤트 기반이라는 말과 함께 콜백 지옥이 언급됩니다.
지옥까지 빠뜨리다니 얼마나 위험한 녀석일까요?😱
지피지기 백전불태! 조금만 친해져볼까요?
다른 함수에 매개 변수로 전달되는 함수를 콜백 함수라고 합니다.
💡비동기에서 빼놓을 수 없는 콜백!
비동기 처리란 두 개 이상의 작업을 병렬로 처리하는 것을 의미합니다.
비동기 처리는 요청에 대한 응답을 기다리지 않기 때문에 문제가 생길 수 있습니다.
function getNumber() {
let number;
setTimeout(() => {
number = 1;
}, 1000);
return number;
}
이 코드는 반환하는 값이 1일 것 같지만, undefined를 반환합니다.
1초를 기다리는 동안 다음 작업을 실행하기 때문입니다.
function getNumber(callback) {
let number;
setTimeout(() => {
number = 1;
callback(number);
}, 1000);
}
function printNumber(number) {
console.log(number);
}
getNumber(printNumber); // 1 출력
이런 문제를 해결하기 위해 콜백 함수를 사용합니다.
위 코드는 실행 순서를 보장받아서 제대로 된 값을 출력할 수 있습니다.
But, 작업량이 많아지면... 🤯
순서대로 처리하는 작업이 늘어날수록 남발하여 사용하면 앞서 말한 콜백 지옥에 빠지게 됩니다.
이러한 문제점을 막기 위해서 Promise와 async/await가 등장하게 됩니다.
콜백을 알아가면서 '싱글 스레드인데, 어떻게 멀티 스레드처럼 병렬 처리가 가능한가...'라는 의문이 더 생겨버렸네요😂
배우는 단계에서 작성한 글이라서 잘못된 내용이 있다면 지적 부탁드립니다.
봐주셔서 감사합니다!
'JavaScript' 카테고리의 다른 글
구조 분해 할당! 나도 이제 중간 변수(temp) 없이? (0) | 2024.09.02 |
---|---|
Node.js의 생태계 (0) | 2024.08.30 |
Express - 단순하게 API 제작하기 (0) | 2024.08.30 |
Node.js로 웹 서버 구축하기 (0) | 2024.08.22 |
JavaScript 알아보기 (0) | 2024.08.21 |