2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Node.js에서 API 호출에 대한 오류 처리를 어떻게 하나요?

_____
Q: Node.js에서 API 호출 시 오류 처리는 어떻게 하나요?

A: Node.js에서 API 호출 시 오류 처리는 주로 다음과 같은 방법으로 수행합니다.

1. 콜백 패턴에서의 오류 처리
- 전통적인 비동기 함수들은 콜백 함수의 첫 번째 인자로 오류 객체를 전달합니다.
- 호출 예:
```js
apiCall(params, (err, result) => {
if (err) {
// 오류 처리
console.error('API 호출 오류:', err);
return;
}
// 정상 처리
console.log('API 결과:', result);
});
```

2. Promise 사용 시 `.catch()`로 오류 처리
- API 호출이 Promise를 반환하는 경우, `.catch()`를 이용해 오류를 잡습니다.
```js
apiCall(params)
.then(result => {
console.log('API 결과:', result);
})
.catch(err => {
console.error('API 호출 오류:', err);
});
```

3. async/await와 try/catch 구문으로 처리
- ES2017부터 도입된 async/await 문법을 사용할 때는 `try/catch`문으로 오류를 처리할 수 있습니다.
```js
async function fetchData() {
try {
const result = await apiCall(params);
console.log('API 결과:', result);
} catch (err) {
console.error('API 호출 오류:', err);
}
}
```

4. HTTP 상태 코드 및 응답 자체의 오류 처리
- API 호출에 성공해도 HTTP 상태 코드가 200이 아닐 때를 오류로 간주할 수 있습니다.
- 예를 들어, `node-fetch` 라이브러리 이용 시:
```js
const fetch = require('node-fetch');

async function getData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (err) {
console.error('Fetch 오류:', err);
}
}
```

5. 네트워크 오류 및 타임아웃 처리
- 네트워크 불안정, 서버 미응답 등 비동기 호출 중 발생할 수 있는 다양한 오류에 대해 타임아웃 설정 및 예외 처리를 합니다.
- 예: `axios`에서 타임아웃 설정과 오류 처리
```js
const axios = require('axios');

axios.get('https://api.example.com/data', { timeout: 5000 })
.then(response => {
console.log(response.data);
})
.catch(error => {
if (error.code === 'ECONNABORTED') {
console.error('요청 시간이 초과되었습니다.');
} else {
console.error('API 호출 오류:', error.message);
}
});
```

6. 전역 예외 처리
- 예상치 못한 오류에 대비해 `process.on('uncaughtException')` 또는 `process.on('unhandledRejection')` 이벤트를 활용해 로그 기록 및 서버 정상 동작 유지에 도움을 줍니다.
```js
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
// 서버 종료 또는 복구 로직
});
```

요약하자면, Node.js에서 API 호출 오류 처리는 호출 방식에 맞게 콜백의 첫 번째 인자, Promise의 `.catch()`, async/await의 `try/catch`를 이용하여 처리하며, HTTP 상태 코드 확인, 네트워크 오류 대비, 전역 예외 처리를 함께 구현하는 것이 안정적인 애플리케이션을 만드는 핵심입니다.
Node.js에서 API 호출에 대한 오류 처리는 매우 중요한 작업입니다.

API 호출은 외부 서비스와의 통신을 포함하므로, 다양한 이유로 오류가 발생할 수 있습니다.

이러한 오류를 적절히 처리하지 않으면 애플리케이션의 안정성에 큰 영향을 미칠 수 있습니다.

이 글에서는 Node.js에서 API 호출 시 오류를 처리하는 방법에 대해 자세히 설명하겠습니다.

1. API 호출 방법 Node.js에서 API를 호출하는 방법에는 여러 가지가 있지만, 가장 일반적으로 사용되는 방법은 `axios`, `node-fetch`, 또는 기본 `http`/`https` 모듈을 사용하는 것입니다.

여기서는 `axios`를 예로 들어 설명하겠습니다.

```javascript const axios = require('axios'); async function fetchData(url) { try { const response = await axios.get(url); return response.data; } catch (error) { handleError(error); } } ```

2. 오류 처리의 중요성 API 호출 시 발생할 수 있는 오류는 다음과 같습니다: - 네트워크 오류 : 서버가 다운되었거나 인터넷 연결이 어졌을 때 발생합니다.

- HTTP 오류 : 404(찾을 수 없음), 500(서버 오류) 등의 상태 코드가 반환될 수 있습니다.

- 타임아웃 : 서버가 요청을 처리하는 데 너무 오랜 시간이 걸릴 경우 발생합니다.

- 데이터 형식 오류 : 응답 데이터가 예상한 형식이 아닐 때 발생합니다.

이러한 오류를 적절히 처리하지 않으면 애플리케이션이 예기치 않게 종료되거나 사용자에게 불완전한 정보를 제공할 수 있습니다.



3. 오류 처리 방법

3.1. 기본적인 오류 처리 가장 기본적인 오류 처리 방법은 `try-catch` 블록을 사용하는 것입니다.

위의 예제에서 보았듯이, `axios`의 호출을 `try` 블록에 넣고, 오류가 발생하면 `catch` 블록에서 처리합니다.



3.2. 오류 로그 기록 오류가 발생했을 때, 이를 로그로 기록하는 것이 중요합니다.

이를 통해 나중에 문제를 진단하고 해결하는 데 도움이 됩니다.

```javascript function handleError(error) { if (axios.isAxiosError(error)) { console.error('Axios error:', error.message); if (error.response) { // 요청이 이루어졌고, 서버가 상태 코드로 응답했지만 // 요청이 실패했을 경우 console.error('Response data:', error.response.data); console.error('Response status:', error.response.status); } else if (error.request) { // 요청이 이루어졌지만 응답을 받지 못한 경우 console.error('Request data:', error.request); } else { // 오류를 발생시킨 요청 설정 console.error('Error message:', error.message); } } else { console.error('Unexpected error:', error); } } ```

3.3. 사용자에게 오류 메시지 표시 사용자에게 친숙한 오류 메시지를 표시하는 것도 중요합니다.

예를 들어, API 호출이 실패했을 때 사용자에게 "서버와의 통신에 문제가 발생했습니다.

나중에 다시 시도해 주세요.

"와 같은 메시지를 표시할 수 있습니다.



3.4. 재시도 로직 일시적인 네트워크 오류나 서버 오류의 경우, 요청을 재시도하는 로직을 추가할 수 있습니다.

`axios-retry`와 같은 라이브러리를 사용하면 쉽게 구현할 수 있습니다.

```javascript const axiosRetry = require('axios-retry'); axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay, }); ```

3.5. 사용자 정의 오류 클래스 보다 세부적인 오류 처리를 위해 사용자 정의 오류 클래스를 만들 수 있습니다.

이를 통해 다양한 오류 유형을 구분하고, 각 오류에 대해 적절한 처리를 할 수 있습니다.

```javascript class ApiError extends Error { constructor(message, status) { super(message); this.status = status; } } function handleError(error) { if (axios.isAxiosError(error)) { const status = error.response ? error.response.status : 500; throw new ApiError('API 호출 중 오류 발생', status); } throw new Error('예기치 않은 오류 발생'); } ```

4. Node.js에서 API 호출에 대한 오류 처리는 애플리케이션의 안정성과 사용자 경험을 보장하는 데 매우 중요합니다.

다양한 오류 유형을 이해하고, 이를 적절히 처리하기 위한 방법을 구현함으로써, 더 나은 애플리케이션을 만들 수 있습니다.

오류 로그 기록, 사용자에게 친숙한 메시지 표시, 재시도 로직, 사용자 정의 오류 클래스 등을 활용하여 효과적인 오류 처리 전략을 구축하는 것이 좋습니다.

작성자: 김시현 [비회원] | 작성일자: 1년 전 2024-09-13 05:21:44
조회수: 215 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.