개발자 성장 로드맵/프론트엔드

비동기가 뭐길래? 자바스크립트 Promise와 async/await 쉽게 풀어보기

프로잉2 2025. 7. 14. 18:08
728x90

비동기, Promise, async/await 확실히 이해하기 — 택배 배달로 비유해 보자!

자바스크립트를 공부하다 보면 꼭 마주치는 말:

비동기(Asynchronous)

그런데 도대체 “비동기”가 뭐길래 개발자들을 이토록 괴롭힐까요?
오늘은 택배 비유로 풀어보겠습니다.


동기(Synchronous)란?

택배 아저씨 올 때까지 문 앞에서 꼼짝 않고 기다리는 것

  • 작업이 순서대로 하나하나 끝나야 다음으로 넘어갑니다.
  • 택배가 늦으면 다른 일은 못 하고 계속 기다림.

코드 예시

 
console.log("주문하기");
console.log("배송 도착");
console.log("택배 개봉");
 

출력:

 
주문하기
배송 도착
택배 개봉

비동기(Asynchronous)란?

택배 시키고 다른 일 먼저 하다가, 택배 오면 다시 처리하는 것

  • 택배가 오는 동안 다른 일을 할 수 있어요.
  • 웹 개발에서 가장 흔한 비동기 작업: API 요청, 파일 읽기, 타이머 등

코드 예시

console.log("주문하기");
setTimeout(() => {
  console.log("배송 도착");
}, 3000);
console.log("다른 일 하기");

출력:

주문하기
다른 일 하기
(3초 후) 배송 도착

비동기 처리 방법 ① — 콜백(callback)

택배기사님이 도착하면 “전화 주시라고” 부탁하는 것

  • 콜백 지옥(callback hell) 문제가 생길 수 있음.
  • 코드가 중첩되어 점점 읽기 어려워짐.

예:

setTimeout(() => {
  console.log("택배 도착!");
  setTimeout(() => {
    console.log("택배 개봉!");
  }, 1000);
}, 2000);

비동기 처리 방법 ② — Promise

택배사에서 ‘배송 추적 번호’를 주는 것

  • “언젠간 올 거”라는 약속을 반환.
  • 성공(fulfilled) 또는 실패(rejected)를 알려줌.

비유

택배사가 “이 송장 번호로 배송 상황 확인하세요.”

코드:

let delivery = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("택배 도착!");
  }, 2000);
});

delivery.then((msg) => {
  console.log(msg);
});

출력:

(2초 후) 택배 도착!

비동기 처리 방법 ③ — async / await

택배를 기다리긴 하되, 기다리는 동안 다른 일도 가능하고, 코드는 동기처럼 깔끔

  • async 함수는 항상 Promise를 반환.
  • await은 Promise가 끝날 때까지 기다려줌.
  • 코드가 동기처럼 읽히니 가독성이 좋음!

비유

택배기사님이 오기 전까지 다른 일하다가,
문 두드리면 바로 문 열러 가는 것

코드:

async function getDelivery() {
  console.log("주문하기");
  let result = await new Promise((resolve) => {
    setTimeout(() => {
      resolve("택배 도착!");
    }, 2000);
  });
  console.log(result);
  console.log("택배 개봉");
}

getDelivery();

출력:

주문하기
(2초 후) 택배 도착!
택배 개봉

정리

  • 동기(Sync) → 택배 올 때까지 아무것도 못함
  • 비동기(Async) → 택배 기다리면서 다른 일 가능
  • 콜백 → 택배기사님 전화
  • Promise → 송장 번호로 배송 추적
  • async/await → 깔끔하게 기다렸다 이어서 진행

자바스크립트에서 비동기 처리는 무조건 마주치게 되는 개념이에요.
헷갈릴 때는 “택배” 비유를 꼭 떠올려 보세요.
이해가 훨씬 수월해질 거예요!

혹시 더 깊이 다루고 싶은 부분이나, 다른 비유로 설명해보고 싶으신가요?

728x90