[9주차 03] Node.js 비동기

개발냥이·2025년 3월 19일

데브코스

목록 보기
28/75
post-thumbnail

비동기란?

둘 이상의 객체 또는 이벤트가 동시에 존재하지 않거나 발생하지 않는 경우 이다.
강의에서 나온대로 "라면 끓이기"로 예시를 들자면

현실
1. 물 끓이기 5분
2. 스프 넣기 10초
3. 면 넣기 10초
4. 라면 끓이기 3분
5. 먹기

현실에서는 다음과 같이 순차적으로 라면 끓이기가 진행이 되어
8분 20초에 완료가 된다.

[Node]
하지만 Node에서는 동시에 1~4번 진행되어 => 5분만에 완료가 되었다.

즉 다른 작업들을 기다리지 않고 바로 바로 작업을 실행하였다.
다른 작업들을 기다리지 않기 때문에 빠르게 완료할 수 있다는 장점도 있지만
내가 원하는 시점에 작업을 하지 못하는 경우 위의 라면 끓이기로 예시를 들어보아도
라면이 다 익지도 않았는데 작업이 완료될 수 도 있다.


비동기 처리하는 법

위와 같은 비동기 문제를 해결하기 위해
비동기를 처리하는 방법은 다음과 같다

  1. 콜백함수
  2. promise
  3. then & catch
  4. async & await

이중 JS ES8에 추가된 async/await를 사용해보았다.

const 비동기 = async () => {
  let promise1 = new Promise((resolve, reject) => {
    setTimeout(() => resolve('1번 완료'), 3000);
  });

  let result1 = await promise1;
  console.log(result1);

  let promise2 = new Promise((resolve, reject) => {
    setTimeout(() => resolve('2번 완료'), 3000);
  });

  let result2 = await promise2;
  console.log(result2 + ' + ' + result1);

  let promise3 = new Promise((resolve, reject) => {
    setTimeout(() => resolve('3번 완료'), 3000);
  });

  let result3 = await promise3;
  console.log(result3 + ' + ' + result2 + ' + ' + result1);
};

비동기();

다음과 같은 예시 코드가 있을 때
"비동기"라는 이름의 비동기 함수를 정의하였고
첫번째 promise인 promise1을 생성하고 3초동안 대기 후 완료되게 하였다.
이때 promise1이 완료되기를 기다린 후 완료시키는 것이 await의 역할이다.

이후로는 promise2 ... promise3이 연이어 동일한 과정을 반복하며 앞서 출력된 결과도
가져올 수 가 있다.

async/await의 장점

  • 기존 promise보다 코드를 더 직관적이고 쉽게 만들어 줌
    => async를 사용해 promise 객체를 만들고 await를 사용해 promise가 완료될 때까지 기다리게 할 수 있음
  • 에러 처리 용이
    => 기존에는 .catch()를 사용해야 했으나 try~catch문을 사용해 더 간단하고 명확하게 에러를 처리할 수 있음
profile
웹 개발자가 되고픈

0개의 댓글