코딩과 결혼합니다

비동기 | async와 await 본문

2세/Nest.js

비동기 | async와 await

코딩러버 2024. 8. 13. 19:48
728x90

✍동기, 비동기

 

동기란 어떠한 일을 맡겼을 때 그 것이 끝날 때까지 아무것도 하지 않고 기다린다. 때문에 그 사이에 다른 것을 할 수 없다.

비동기란 끝날 때까지 기다리지 않고 병렬로 다른 일을 할 수 있다. 하지만 의뢰한 일이 끝났는지 여부를 확인하고 싶으면 별도의 방법을 이용한다.

 

동기

console.log('Start');
const result = someFunction(); // 작업이 끝날 때까지 기다림
console.log('End'); // 위 작업이 끝난 후에 실행됨

 

비동기

console.log('Start');
setTimeout(() => {
  console.log('This is async');
}, 1000);
console.log('End'); // "End"가 먼저 출력됨

NestJS에서 비동기 작업 처리

 

1. async와 await

async function asyncOperation() {
  const result = await someAsyncFunction();
  console.log(result);
}

 

비동기 작업을 처리하는 함수에서 'async'를 사용하고, 비동기 작업이 완료될 때까지 'await'로 기다릴 수 있다.

 

async :  함수가 비동기로 동작하도록 선언한다. 이 함수는 자동으로 Promise를 반환한다.

await : Promise가 해결될 때까지 함수 실행을 일시 중지하고, Promise가 완료되면 그 결과를 반환한다.

 

await의 동작 방식

1. await을 사용하면 비동기 작업이 완료될 때까지 해당 작업을 기다린다. 이 의미는 해당 작업이 완료될 때까지 함수 실행이 일시 중지된다는 뜻이다.

 

2. 하지만 이 대기동안 JS는 다른 작업을 계속 수행할 수 있다. 즉, 이벤트 루프는 다른 작업들을 처리한다. 예를 들어, 사용자의 입력을 처리하거나 다른 비동기 작업을 실행할 수 있다.

 

2. Promise

function promiseOperation(): Promise<any> {
  return new Promise((resolve, reject) => {
    // 비동기 작업
    if (success) {
      resolve(result);
    } else {
      reject(error);
    }
  });
}

 

비동기 작업의 결과를 promise로 반환하고 .then()과 .catch로 처리할 수 있다.

 

다른 비동기 방법들이 있지만 간단하게만 알아보고자 한다.

가장 일반적으로 사용되는 방법은 첫 번째 방법이고,

promise와 observable을 지원하여 다양한 비동기 작업을 유연하게 처리할 수 있다고 한다.