[typescript] Axios를 사용하여 에러에 대한 자동 리프레시 및 토큰 재발급
웹 애플리케이션을 개발할 때 API 호출 시 발생하는 인증 토큰 만료 및 네트워크 에러를 다루는 것은 중요한 과제입니다. 이러한 문제를 해결하기 위해 Axios를 사용하여 에러 처리를 효과적으로 관리하고 API 호출 시 자동으로 토큰을 재발급하고 리프레시 하는 방법을 살펴보겠습니다.
Axios란?
Axios는 HTTP 클라이언트 라이브러리로, 브라우저 및 Node.js 환경에서 사용할 수 있습니다. Promise 기반 API를 제공하며, 요청과 응답 데이터를 쉽게 다룰 수 있는 기능을 제공합니다.
에러 처리와 토큰 재발급 구현 방법
아래는 TypeScript에서 Axios를 사용하여 에러에 대한 자동 리프레시 및 토큰 재발급을 구현하는 예제입니다.
import axios, { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com',
timeout: 5000,
headers: {
'Content-Type': 'application/json',
},
});
api.interceptors.response.use(
(response: AxiosResponse) => {
return response;
},
async (error: AxiosError) => {
const originalRequest = error.config;
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const token = await refreshAccessToken(); // 토큰 재발급 로직 호출
originalRequest.headers.Authorization = `Bearer ${token}`;
return api(originalRequest);
}
return Promise.reject(error);
}
);
async function refreshAccessToken(): Promise<string> {
// 토큰 재발급 로직 구현
// ...
return 'new_access_token';
}
// API 호출
api.get('/data')
.then(response => {
console.log('Data:', response.data);
})
.catch(error => {
console.error('Error:', error.message);
});
위 예제에서 api.interceptors.response.use
를 사용하여 응답에 대한 처리를 정의하고, axios.create
를 통해 기본 설정을 구성합니다. 또한, 401 에러가 발생하면 토큰을 재발급하고 API 호출을 자동으로 다시 시도하는 로직을 구현하였습니다.
결론
Axios를 사용하여 API 요청 시 발생할 수 있는 에러에 대해 자동 리프레시 및 토큰 재발급 기능을 구현하는 것은 매우 유용합니다. 이를 통해 사용자는 오랜 시간 동안 로그인 상태를 유지하고, 네트워크 에러에 강인한 애플리케이션을 개발할 수 있습니다.
더 많은 정보를 원하시면 Axios 공식 문서를 참고하시기 바랍니다.