현대 웹 개발에서 비동기 처리는 필수적인 기술입니다. 자바스크립트는 이러한 비동기 처리를 위한 다양한 도구를 제공합니다. 이 블로그 글에서는 자바스크립트의 비동기 처리 메커니즘인 `async`, `await`, `Promise`, 그리고 `Promise.all()`에 대해 자세히 설명하고, 실용적인 예시를 통해 이해를 해보겠습니다.
1. 비동기 처리란?
비동기 처리란 작업이 시작된 후 그 결과를 기다리지 않고 다음 작업을 수행하는 방식입니다. 자바스크립트는 단일 스레드 언어이기 때문에 비동기 처리를 통해 성능을 최적화할 수 있습니다. 비동기 처리는 주로 네트워크 요청, 파일 읽기, 타이머 등의 작업에서 사용됩니다.
2. Promise
Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다. Promise는 세 가지 상태를 가질 수 있습니다:
- Pending(대기): 초기 상태, 이행도 거부도 되지 않은 상태.
- Fulfilled(이행): 작업이 성공적으로 완료된 상태.
- Rejected(거부): 작업이 실패한 상태.
Promise 객체는 다음과 같은 방식으로 생성할 수 있습니다:
const promise = new Promise((resolve, reject) => { // 비동기 작업 수행 let success = true; if (success) { resolve("작업 성공"); } else { reject("작업 실패"); } });
Promise는 `then()`과 `catch()` 메서드를 사용해 처리할 수 있습니다:
promise .then(result => { console.log(result); // 작업 성공 }) .catch(error => { console.error(error); // 작업 실패 });
3. async와 await
`async`와 `await`는 ES8(ECMAScript 2017)에서 도입된 문법으로, 비동기 코드를 작성할 때 Promise를 보다 직관적으로 다룰 수 있게 해줍니다.
async 함수
`async` 키워드를 함수 앞에 붙이면 그 함수는 항상 Promise를 반환합니다. 이 함수 내에서 비동기 작업을 수행하고 그 결과를 반환할 수 있습니다.
async function myFunction() { return "Hello, World!"; } myFunction().then(result => console.log(result)); // Hello, World!
await
`await` 키워드는 `async` 함수 내에서만 사용할 수 있으며, Promise가 처리될 때까지 함수의 실행을 일시 정지합니다. Promise가 이행되면 `await`은 그 값을 반환하고, 거부되면 오류를 throw합니다.
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:", error); } } fetchData();
4. Promise.all()
`Promise.all()`은 여러 Promise를 병렬로 처리하고, 모든 Promise가 이행되었을 때 단일 Promise를 반환합니다. 모든 Promise가 이행되면 이행된 값들의 배열을 반환하고, 하나라도 거부되면 거부된 첫 번째 이유를 반환합니다.
const promise1 = Promise.resolve(3); const promise2 = 42; const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'foo'); }); Promise.all([promise1, promise2, promise3]) .then(values => { console.log(values); // [3, 42, "foo"] }) .catch(error => { console.error("Error:", error); });
결론
자바스크립트에서 비동기 처리를 이해하고 활용하는 것은 매우 중요합니다. `Promise`, `async`, `await`, 그리고 `Promise.all()`을 잘 활용하면 더욱 효율적이고 깔끔한 비동기 코드를 작성할 수 있습니다. 이 글에서 소개한 예제들을 통해 자바스크립트의 비동기 처리 메커니즘을 충분히 이해하고, 실무에 적용해 보세요.
이 가이드가 자바스크립트의 비동기 처리를 이해하는 데 도움이 되길 바랍니다. 질문이 있거나 추가 설명이 필요하다면 댓글로 남겨주세요!