본문 바로가기
BE 공부/Node.js

[비동기 처리] return await과 return의 차이

by 꼬질꼬질두부 2024. 12. 26.

동기와 비동기란?

동기비동기는 프로그래밍에서 작업을 처리하는 방식의 차이를 나타냅니다.

  • 동기: 작업이 순차적으로 처리됩니다. 하나의 작업이 끝나야 다음 작업이 실행됩니다. 예를 들어, 식당에서 요리를 하나씩 만들어 순서대로 제공하는 방식입니다.
  • 비동기: 작업이 병렬적으로 처리될 수 있습니다. 하나의 작업이 끝날 때까지 기다리지 않고, 다음 작업을 바로 실행합니다. 예를 들어, 여러 요리를 동시에 준비하고, 준비가 끝난 요리부터 제공하는 방식입니다.

JavaScript에서는 Promise와 async/await를 사용하여 비동기 작업을 처리합니다. 이때 return await와 return은 함수가 비동기 작업을 반환할 때의 동작 방식을 결정합니다.


return await의 동작 방식

return await는 비동기 함수 내부에서 작업의 결과값을 기다린 후 반환하는 방식입니다. 함수가 호출되었을 때, 해당 작업이 완료될 때까지 대기한 다음 결과를 반환합니다.

동작 설명

  • 함수 내부에서 await는 비동기 작업이 완료될 때까지 기다립니다.
  • 함수는 비동기 작업의 결과값을 반환합니다.
  • 비동기 작업 중 에러가 발생하면 함수 내부에서 이를 처리할 수 있습니다.

코드 예제

async function fetchDataWithAwait() {
    try {
        const data = await someAsyncFunction(); // 비동기 작업 완료 대기
        return await data; // 결과 반환
    } catch (error) {
        console.error("에러 발생:", error);
        throw error; // 에러를 호출자에게 전달
    }
}

// 호출
fetchDataWithAwait()
    .then(result => console.log("결과:", result))
    .catch(error => console.error("처리 실패:", error));

주요 특징

  1. 함수가 비동기 작업의 완료된 결과값을 반환합니다.
  2. 함수 내부에서 try...catch를 사용해 에러를 처리할 수 있습니다.
  3. 비동기 작업이 완료될 때까지 함수 실행이 일시적으로 중단됩니다.

return 비동기의 동작 방식

return은 Promise 객체를 그대로 반환하는 방식입니다. 함수는 비동기 작업의 결과를 기다리지 않고, 호출자에게 Promise를 반환합니다.

동작 설명

  • 함수 내부에서 작업의 완료 여부를 기다리지 않고, 즉시 Promise를 반환합니다.
  • 호출자는 반환된 Promise를 처리해야 합니다.
  • 에러가 발생하면 호출자가 이를 처리해야 합니다.

코드 예제

async function fetchDataWithoutAwait() {
    return someAsyncFunction(); // Promise 반환
}

// 호출
fetchDataWithoutAwait()
    .then(result => console.log("결과:", result))
    .catch(error => console.error("처리 실패:", error));

주요 특징

  1. 함수가 Promise 객체를 반환합니다.
  2. 함수 내부에서 에러를 처리하지 않습니다. 호출자가 에러를 처리해야 합니다.
  3. 함수 실행은 작업의 완료 여부와 상관없이 계속 진행됩니다.

return await와 return의 비교 및 정리

특징 return await return
비동기 작업 완료 대기 작업이 완료될 때까지 대기한 후 결과를 반환. Promise를 반환하며, 작업 완료 여부를 기다리지 않음.
에러 처리 함수 내부에서 try...catch로 에러 처리 가능. 에러를 호출자에게 넘기며 호출자가 직접 처리.
코드 간결성 await 사용으로 인해 코드가 약간 복잡해질 수 있음. 간결하고 짧은 코드 작성 가능.
사용 시점 에러를 내부에서 처리하거나, 결과값을 즉시 반환해야 할 때. 호출자가 Promise를 직접 처리하도록 위임할 때.

사용 권장

  1. return await를 사용하는 경우
    • 함수 내부에서 에러를 처리해야 하는 경우.
    • 비동기 작업의 결과를 명시적으로 반환하려는 경우.
  2. return을 사용하는 경우
    • 에러 처리를 호출자에게 위임하려는 경우.
    • 함수가 단순히 비동기 작업의 Promise를 전달하는 역할만 할 때.

예제 비교

return await 예제

async function fetchDataWithAwait() {
    try {
        const data = await someAsyncFunction();
        return await data; // 완료된 결과 반환
    } catch (error) {
        console.error("에러 발생:", error);
        throw error; // 에러를 호출자에게 전달
    }
}

return 예제

async function fetchDataWithoutAwait() {
    return someAsyncFunction(); // Promise 반환
}

결론

  • return await는 함수 내부에서 에러를 처리하거나 결과값을 반환해야 할 때 유용합니다.
  • return은 호출자에게 작업의 책임을 위임하며, 간결한 코드 작성에 적합합니다.
  • 불필요한 await 사용은 피하고, 상황에 맞는 방식을 선택해 효율적인 비동기 처리를 구현하세요!

'BE 공부 > Node.js' 카테고리의 다른 글

NPM 미러링 서버란?  (0) 2025.01.10
[JavaScript] map, flatMap, reduce  (1) 2024.12.30
Middleware란?  (0) 2023.09.01
동기와 비동기란?  (0) 2023.04.06
Callback(콜백) 함수란?  (0) 2023.04.06

댓글