본문 바로가기
개발지식

자바스크립트의 비동기 프로그래밍: ASYNC, AWAIT, PROMISE

by hunovator 2024. 2. 28.
반응형

1. 비동기 프로그래밍의 필요성과 해결책


현대 웹 개발에서 사용되는 자바스크립트는 사용자 경험을 향상시키기 위해 비동기적인 작업을 수행해야 합니다. 비동기 작업은 웹 페이지가 사용자와 상호작용할 때 발생하며, 네트워크 요청, 파일 읽기/쓰기, 데이터베이스 쿼리 등과 같은 I/O 작업에 주로 관련됩니다. 이러한 작업은 시간이 오래 걸릴 수 있으므로, 기다리지 않고도 다른 작업을 수행할 수 있는 프로그래밍 방식이 필요합니다. 이를 위해 자바스크립트에서는 Promise, async, await와 같은 기술이 사용됩니다.


2.Promise

Promise는 자바스크립트에서 비동기 작업을 다루는 객체입니다. Promise는 세 가지 상태를 가집니다: 대기(pending), 이행(fulfilled), 거부(rejected). 대기 상태는 작업이 아직 완료되지 않은 상태를 나타내며, 작업이 성공적으로 완료되면 이행 상태가 되고 결과 값을 반환합니다. 작업이 실패하면 거부 상태가 되고 오류를 반환합니다.

const myPromise = new Promise((resolve, reject) => {
  // 비동기 작업 수행
  setTimeout(() => {
    const success = true;
    if (success) {
      resolve('Success!');
    } else {
      reject('Error!');
    }
  }, 2000);
});

myPromise.then((result) => {
  console.log(result); // Success!
}).catch((error) => {
  console.error(error); // Error!
});


위의 예제에서는 2초 후에 비동기 작업이 완료됩니다. 작업이 성공하면 resolve를 호출하여 'Success!'를 반환하고, 실패하면 reject를 호출하여 'Error!'를 반환합니다.

3. Async/Await

Async/Await는 Promise를 기반으로 한 자바스크립트의 비동기 프로그래밍 패턴 중 하나입니다. Async 함수는 항상 Promise를 반환하며, await 키워드는 비동기 작업이 완료될 때까지 기다립니다.

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

fetchData();



위의 예제에서 fetchData 함수는 비동기적으로 데이터를 가져오고, await 키워드를 사용하여 데이터를 가져올 때까지 기다립니다. 데이터를 성공적으로 가져오면 해당 데이터를 출력하고, 오류가 발생하면 오류를 콘솔에 기록합니다.

4. 비동기 코드의 순서 제어

Async/Await를 사용하면 비동기 코드의 순서를 보다 명확하게 제어할 수 있습니다. 이는 Promise 체이닝에 비해 코드의 가독성을 향상시킵니다.

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}

async function processData() {
  try {
    const data = await fetchData();
    console.log('Data fetched:', data);
    // 여기에 추가적인 로직 수행 가능
  } catch (error) {
    console.error('Error:', error);
  }
}

processData();


위의 예제에서 processData 함수는 fetchData 함수를 호출하여 데이터를 가져오고, 그 데이터를 처리합니다. 비동기 코드의 흐름이 명확하게 드러나며, 오류 처리도 간단합니다.

5. 결론

자바스크립트의 Promise, Async/Await는 비동기적인 작업을 효율적으로 다룰 수 있는 강력한 도구입니다. 이를 이용하여 웹 애플리케이션의 성능을 향상시키고 사용자 경험을 향상시킬 수 있습니다. 하지만 비동기 코드를 작성할 때는 항상 오류 처리를 고려하여야 하며, 적절한 방법으로 코드를 구조화하여 가독성을 높이는 것이 중요합니다.

반응형