본문 바로가기

JavaScript

Callback Hell? 거기 무서운 곳이야?

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, 작업량이 많아지면... 🤯

순서대로 처리하는 작업이 늘어날수록 남발하여 사용하면 앞서 말한 콜백 지옥에 빠지게 됩니다.

이러한 문제점을 막기 위해서 Promiseasync/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