Node.js Async/Await 사용법: 비동기 프로그래밍 쉽게 배우기
Node.js Async/Await 사용법: 비동기 프로그래밍 쉽게 배우기
Node.js는 비동기 프로그래밍을 위한 다양한 방법을 제공합니다. 그 중에서도 Async/Await
는 코드의 가독성을 높여주고, 콜백 지옥(callback hell)을 피할 수 있는 훌륭한 도구입니다. 이 글에서는 Async/Await
의 개념부터 시작해, 실제로 어떻게 사용하는지 그리고 몇 가지 예제를 통해 비동기 프로그래밍을 보다 쉽게 처리하는 방법을 배워보겠습니다.
Async/Await의 기본 개념
비동기 프로그래밍은 많은 현대 애플리케이션에서 필수적으로 사용됩니다. 하지만 콜백 함수나 Promise
만을 사용하면 코드가 복잡해지고 유지보수가 어려워질 수 있습니다. Async/Await
는 이러한 문제를 해결하기 위해 등장한 문법입니다.
Async/Await
의 기본적인 동작 방식은 다음과 같습니다:
async
함수는 항상Promise
를 반환합니다. 함수 안에서await
키워드를 사용할 수 있게 해줍니다.await
키워드는Promise
를 기다립니다. 이때await
는 비동기 함수의 실행을 일시 중지시키고,Promise
가 해결(resolved)될 때까지 기다립니다.- 코드가 동기 처리되는 것처럼 보이게 하지만, 실제로는 비동기적으로 처리됩니다.
Async/Await 사용법
async 함수 선언
먼저, async
함수는 일반 함수처럼 선언할 수 있습니다. 단, 함수 앞에 async
키워드를 붙여야 합니다.
javascriptasync function fetchData() { // 비동기 작업 처리 }
또는 함수 표현식으로도 선언할 수 있습니다.
javascriptconst fetchData = async () => { // 비동기 작업 처리 };
await 사용
await
키워드는 async
함수 내부에서만 사용할 수 있습니다. await
키워드는 Promise
가 해결될 때까지 기다리며, 해결된 Promise
의 결과를 반환합니다.
javascriptasync function fetchData() { const response = await fetch('https://api.example.com/data'); const data = await response.json(); return data; }
위의 코드에서 fetch
함수는 네트워크 요청을 보내는 Promise
를 반환합니다. await fetch(...)
는 이 Promise
가 해결될 때까지 기다린 후 response
변수를 반환합니다. 같은 방식으로 response.json()
도 Promise
를 반환하며, await
를 사용해 이를 기다리면 JSON 데이터가 data
변수에 할당됩니다.
Error Handling(에러 처리)
Async/Await
를 사용할 때는 try...catch
구문을 통해 에러를 처리할 수 있습니다.
javascriptasync function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); return data; } catch (error) { console.error('Error fetching data:', error); } }
try
블록 안에서 await
키워드를 사용하면, Promise
가 거부(rejected)될 경우 catch
블록에서 에러를 처리할 수 있습니다.
실제 예제
이번에는 실제로 Async/Await
를 사용해 간단한 예제를 만들어 보겠습니다. 사용자 정보를 가져오는 API가 있다고 가정해보겠습니다.
javascriptconst fetch = require('node-fetch'); // Node.js 환경에서는 fetch 모듈 필요 async function getUserData(userId) { try { // 사용자 정보 API 호출 const response = await fetch(`https://api.example.com/users/${userId}`); if (!response.ok) { throw new Error('Network response was not ok'); } const userData = await response.json(); return userData; } catch (error) { console.error('Error fetching user data:', error); } } // 함수 호출 getUserData(1).then(userData => { console.log(userData); });
위의 예제는 사용자 정보를 가져오는 getUserData
라는 async
함수를 사용합니다. 이 함수는 주어진 userId
를 받아 API 호출을 통해 사용자 정보를 받아옵니다. 여기서도 try...catch
구문을 사용해 에러를 처리하고 있습니다.
여러 비동기 작업의 처리
때로는 여러 개의 비동기 작업을 순차적으로 처리해야 할 때가 있습니다. 예를 들어, 여러 사용자 정보를 순차적으로 가져오고자 할 때 Async/Await
를 사용할 수 있습니다.
javascriptasync function getMultipleUsers(userIds) { const users = []; for (const id of userIds) { const user = await getUserData(id); users.push(user); } return users; } getMultipleUsers([1, 2, 3]).then(users => { console.log(users); });
위 코드에서는 for
루프를 사용해 주어진 userIds
배열의 각 아이디에 대해 getUserData
함수를 호출하고, 결과를 리스트에 추가합니다. 이렇게 하면 순차적으로 각 사용자의 데이터를 가져올 수 있습니다.
결론
Async/Await
는 Node.js에서 비동기 프로그래밍을 보다 직관적이고 쉽게 해주는 강력한 도구입니다. Promise
와 콜백 함수로 작성된 복잡한 비동기 코드를 단순하고 가독성 좋게 바꿔줍니다. 이 글에서는 Async/Await
의 기본 개념부터 사용법, 에러 처리, 그리고 실제 예제까지 다루어 보았습니다. 앞으로 비동기 프로그래밍을 할 때 Async/Await
를 활용해 코드를 더욱 효율적으로 작성해보세요.