전역(Global)/커스텀(Custom) 인스턴스, 인터셉터(Interceptor)
들어가며
- Axios의 전역(Global)/커스텀(Custom) 인스턴스, 인터셉터(Interceptor) 개념에 대해 정리해본다.

전역 인스턴스(Global Instance)
개념
- Axios의 기본 인스턴스를 설정하여 애플리케이션 전체에서 사용할 수 있도록 하는 방법
- 모든 Axios 요청에 기본적인 설정(예:
baseURL
,headers
등)을 적용할 수 있다.
설정 방법
- 프로젝트의
src
폴더 안에axios
폴더를 만들고,global.js
파일을 생성한다. - 그리고 다음과 같이 코드를 작성한다.
![]() |
|
최신 버전의 Axios에서는 common 속성(property)이 없다.
사용 방법
- 전역적으로 Axios 설정을 해줄 것이므로, 프로젝트의
src
폴더 안에 있는 최상위 컴포넌트인App.jsx
(또는App.js
) 파일에 다음과 같이import
를 해준다.
/src/App.jsx
import './axios/global'; // Global Instance function App() { // ... } export default App;
- 이제 모든 컴포넌트에서 Axios를 사용할 경우, 해당 설정이 적용된다.
커스텀 인스턴스(Custom Instance)
개념
- 특정 API 요청에 대해 독립적인 Axios 인스턴스를 생성하는 방법
- 이 인스턴스는 다른 설정을 가질 수 있으며, 특정 요청에 맞는 구성으로 사용할 수 있다.
설정 방법
- 프로젝트의
src
폴더 안에axios
폴더를 만들고,custom.js
파일을 생성한다. - 그리고 다음과 같이 코드를 작성한다.
![]() |
|
사용 방법
- 해당 커스텀 인스턴스를 적용시킬 컴포넌트에서
import
하여 사용한다.
/src/components/CustomInstance.jsx
import { useState, useEffect } from 'react'; import authFetch from '../axios/custom'; // Custom Instance import axios from 'axios'; const randomUserUrl = 'https://randomuser.me/api'; const CustomInstance = () => { const [data, setData] = useState(''); const fetchData = async () => { try { const resp1 = await authFetch('/react-store-products'); // Custom Instance console.log(resp1); const resp2 = await axios(randomUserUrl); // Default Instance console.log(resp2); console.log(resp1); console.log(resp2); } catch (error) {} }; useEffect(() => { fetchData(); }, []); return ( // ... ); }; export default CustomInstance;
인터셉터(Interceptor)
개념
- 요청(Request) 또는 응답(Response)을 가로채서(intercept) 그 내용을 수정하거나 추가적인 처리를 할 수 있게 해주는 기능
- 인터셉터를 이용하여 공통적인 로직을 각 요청마다 중복해서 작성하지 않고도 처리할 수 있다.
- 요청 인터셉터(Request Interceptor)와 응답 인터셉터(Response Interceptor)로 나누어진다.
요청 인터셉터(Request Interceptor)
- 요청이 서버로 전송되기 전에 가로채어 처리하는 부분
- 주로 인증 토큰을 헤더에 추가하거나, 요청을 로깅하는 등의 작업을 할 때 유용하다.
axios.interceptors.request.use( (config) => { // 요청 전에 수행할 작업 const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; // 수정된 설정을 리턴한다. }, (error) => { return Promise.reject(error); } );
응답 인터셉터(Response Interceptor)
- 서버에서 응답이 돌아오면 그 응답을 가로채어 처리하는 부분
- 주로 에러 처리를 통일하거나, 응답 데이터를 가공하는 데 사용된다.
axios.interceptors.response.use( (response) => { // 응답 데이터를 가공하거나 그대로 리턴한다. return response; }, (error) => { // 에러 응답 처리 (예: 인증 실패 시 리다이렉트) if (error.response.status === 401) { // 인증 실패 시 로그아웃 처리 localStorage.removeItem('token'); window.location.href = '/login'; } return Promise.reject(error); } );
설정 방법
- 프로젝트의
src
폴더 안에axios
폴더를 만들고,interceptors.js
파일을 생성한다. - 그리고 다음과 같이 코드를 작성한다.
![]() |
|
사용 방법
- 해당 인터셉터를 적용시킬 컴포넌트에서
import
하여 사용한다.
/src/components/Interceptors.jsx
import { useState, useEffect } from 'react'; import authFetch from '../axios/interceptors.js'; const url = 'https://www.random-api.com/react-store-products'; const Interceptors = () => { const [data, setData] = useState(''); const fetchData = async () => { try { const resp = await authFetch('/react-store-products'); console.log(resp); setData(JSON.stringify(resp.data, null, 2)); } catch (error) {} }; useEffect(() => { fetchData(); }, []); return ( <div> <h2 className="text-center">interceptors</h2> <div className="content">{data.slice(0, 1500)}...</div> </div> ); }; export default Interceptors;

참고 사이트
The Axios Instance | Axios Docs
The Axios Instance Creating an instance You can create a new instance of axios with a custom config. axios.create([config]) const instance = axios.create({ baseURL: 'https://some-domain.com/api/', timeout: 1000, headers: {'X-Custom-Header': 'foobar'} }); I
axios-http.com
Interceptors | Axios Docs
Interceptors You can intercept requests or responses before they are handled by then or catch. axios.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); axios.interceptors.response.use(functio
axios-http.com
'Programming > Axios' 카테고리의 다른 글
[Axios] 헤더에 인증 정보 추가하는 방법 (1) | 2024.11.14 |
---|---|
[Axios] HTTP 메서드 (1) | 2024.09.21 |
[Axios] Axios 라이브러리 (0) | 2023.11.15 |