자바스크립트 async 함수의 에러 핸들링

자바스크립트에서 비동기 함수 를 작성할 때, 에러 핸들링은 중요한 부분입니다. async/await 문법을 사용하면 비동기 코드를 작성하고 동기식으로 실행할 수 있습니다. 하지만, async 함수에서 에러 처리를 해주지 않으면 발생한 예외가 무시되고 애플리케이션의 안정성이 저하될 수 있습니다.

이 글에서는 자바스크립트 async 함수에서 발생하는 에러를 어떻게 핸들링하는지 알아보겠습니다.

1. try/catch 문 사용하기

가장 일반적인 방법은 try/catch 문 을 사용하는 것입니다. async 함수 내에서 예외가 발생하면 catch 블록으로 제어가 이동합니다. 이 때, catch 블록에서 예외를 처리하거나 적절한 로깅을 수행할 수 있습니다.

다음은 try/catch 문을 사용하여 async 함수의 에러를 처리하는 예제입니다.

async function getData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('An error occurred:', error);
    throw error; // 예외를 다시 던져서 다른 곳에서도 처리할 수 있도록 합니다.
  }
}

위 예제에서는 fetch 함수를 사용하여 비동기적으로 데이터를 가져오고, response.json() 메서드를 호출하여 JSON 데이터를 파싱합니다. 만약 비동기 요청이 실패하거나 JSON 파싱이 실패하면 예외가 발생하게 됩니다. 이런 경우 catch 블록에서 예외를 처리하고 필요에 따라 다시 던져줄 수 있습니다.

2. Promise의 catch 메서드 사용하기

await 키워드를 사용하지 않고 Promise 객체를 반환하는 경우에는 try/catch 문을 사용할 수 없습니다. 대신, Promise의 catch 메서드 를 사용하여 에러 핸들링을 할 수 있습니다.

다음은 catch 메서드를 사용하여 async 함수의 에러를 처리하는 예제입니다.

async function fetchData() {
  return fetch('https://api.example.com/data')
    .then(response => response.json())
    .catch(error => {
      console.error('An error occurred:', error);
      throw error;
    });
}

위 예제에서는 fetch 함수를 호출한 후, then 메서드를 사용하여 응답 데이터를 처리합니다. 만약 요청이 실패하면 catch 메서드에서 예외를 처리하고 필요에 따라 다시 던져줍니다.

3. 예외를 반환하는 방식으로 처리하기

async 함수에서 예외를 던지는 대신에, 에러 객체를 반환하는 방식으로도 처리할 수 있습니다. 이 방식은 일반적으로 throw 키워드 대신 return 키워드 를 사용하여 예외 객체를 반환하는 것을 의미합니다.

다음은 예외 객체를 반환하여 async 함수의 에러를 처리하는 예제입니다.

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  if (!response.ok) {
    const error = new Error('Request failed');
    error.statusCode = response.status;
    throw error;
  }
  return response.json();
}

위 예제에서는 fetch 함수를 사용하여 데이터를 가져온 후, 응답 상태 코드를 확인합니다. 만약 요청이 실패하면 새로운 에러 객체를 생성하고 필요한 정보를 추가한 다음 예외로 던집니다.

이 방식을 사용하면 catch 블록이나 catch 메서드를 사용하지 않아도 됩니다. 대신, async 함수를 호출하는 곳에서 발생한 예외를 처리할 수 있습니다.

결론

자바스크립트 async 함수에서 발생하는 예외를 적절히 핸들링하는 것은 애플리케이션의 안정성을 유지하기 위해 필요한 작업입니다. 이 글에서는 try/catch 문, Promise의 catch 메서드, 예외를 반환하는 방식 세 가지의 에러 핸들링 방법을 알아보았습니다. 이 중에서 어떤 방식을 선택하든, 중요한 것은 예외를 무시하지 않고 적절히 처리하는 것입니다.

에러 핸들링은 비동기 코드의 안정성을 높이는 중요한 요소이므로 개발자는 이를 고려하여 코드를 작성해야 합니다.