Axios 인터셉터는 HTTP 요청 또는 응답을 처리하기 전에 실행되는 함수입니다. 이를 활용하면 다음 작업을 효율적으로 처리할 수 있습니다.
V8 같은 현대 JavaScript 엔진이 소스 코드를 토큰화, AST 생성, 바이트코드 변환, JIT 컴파일을 거쳐 기계어로 실행하는 과정을 단계별로 정리합니다.
2024. 11. 25.FrontendReact Native의 기존 브릿지 구조가 가진 성능 한계를, 새 아키텍처의 JSI와 Fabric, Turbo Modules가 어떻게 해결하는지 정리합니다.
2022. 11. 16.FrontendWeb Worker로 무거운 로직을 별도 스레드에서 처리해 브라우저가 멈추는 문제를 막는 방법을 정리합니다.
2022. 9. 11.모든 요청에 특정 헤더를 추가하거나, 데이터를 가공할 때 사용합니다.
typescriptimport axios from 'axios' const instance = axios.create({ baseURL: 'https://api.example.com', }) instance.interceptors.request.use( (config) => { // 요청 전에 특정 작업 수행 config.headers['Authorization'] = `Bearer ${localStorage.getItem('token')}` console.log('Request:', config) return config }, (error) => { // 요청 에러 처리 return Promise.reject(error) } )
응답 데이터를 가공하거나, 에러를 공통으로 처리할 때 사용합니다.
typescriptinstance.interceptors.response.use( (response) => { // 성공 응답 데이터 가공 return { ...response, success: true, } }, (error) => { // 에러 응답 처리 console.error('API Error:', error.response?.data || error.message) return Promise.reject(error) } )
백엔드가 다양한 응답 형식을 보내더라도, 프론트엔드에서는 통일된 구조로 사용할 수 있습니다.
typescriptinstance.interceptors.response.use( (response) => { return { data: response.data, status: response.status, message: response.data?.message || 'Success', } }, (error) => { return Promise.reject({ data: null, status: error.response?.status || 500, message: error.response?.data?.message || 'An error occurred', }) } )
토큰 기반 인증 시스템에서 액세스 토큰이 만료되면 자동으로 갱신합니다.
typescriptinstance.interceptors.response.use( (response) => response, async (error) => { if (error.response.status === 401) { const originalRequest = error.config const refreshToken = localStorage.getItem('refreshToken') if (refreshToken) { const newToken = await axios.post('/auth/refresh-token', { token: refreshToken }) localStorage.setItem('token', newToken.data.accessToken) originalRequest.headers['Authorization'] = `Bearer ${newToken.data.accessToken}` return axios(originalRequest) } } return Promise.reject(error) } )
글로벌 애플리케이션에서 모든 요청에 Accept-Language 헤더를 추가하면 다국어 지원을 간단히 구현할 수 있습니다.
typescriptimport i18n from 'i18next' instance.interceptors.request.use((config) => { config.headers['Accept-Language'] = i18n.language return config })
Axios 인터셉터는 프론트엔드에서 API 요청과 응답을 효율적으로 관리하는 강력한 도구입니다. 특히 프로젝트가 커질수록 코드 중복을 줄이고 유지보수성을 높이는 데 중요한 역할을 합니다.