[Axios] 엑시오스 Interceptors로 공통 에러 처리하기 (401)

2025. 2. 13. 20:30·etc

https://axios-http.com/kr/docs/interceptors

Axios에서는 interceptors 기능을 통해

요청을 보내기 전, 응답을 받기 전에 특정 로직을 수행할 수 있습니다.

 

특히 같은 Axios Instance를 사용하는 요청들에 대해

공통적으로 설정할 수 있다는 점이 큰 장점입니다.

 

예를 들어, 인증이 만료된 사용자는 401 에러를 받게 됩니다.

각각 페이지에서 이를 catch 문으로 처리할 수 있지만,

모든 API에 동일한 로직을 반복적으로 작성하는 것은 비효율적이고 번거롭습니다. 🤔

 

이럴 경우 interceptors 기능을 활용하면 효과적으로 관리할 수 있습니다.
함께 알아봅시다. 😀


📝 Axios interceptor

https://axios-http.com/kr/docs/interceptors

 

인터셉터 | Axios Docs

인터셉터 then 또는 catch로 처리되기 전에 요청과 응답을 가로챌수 있습니다. axios.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); axios.interceptors.response.use(f

axios-http.com

 

⦁소개

Interceptor는 API 요청, 응답을 가로채서 특정 작업을 수행할 수 있습니다.

예시로 다음과 같은 작업을 처리할 때 자주 사용됩니다.

  • 요청 보내기 전 헤더 설정
  • 응답 받은 후 특정 처리
  • 공통 에러 처리 (401, 500 등)
  • 인증 토큰 갱신
  • 요청 또는 응답 로깅

 

⦁소스코드 구조

import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: `${process.env.NEXT_PUBLIC_API_URL}/api`,
});

// 요청 인터셉터 추가하기
axiosInstance.interceptors.request.use(
  function (config) {
    // 요청이 전달되기 전에 작업 수행
    return config;
  },
  function (error) {
    // 요청 오류가 있는 작업 수행
    return Promise.reject(error);
  },
);

// 응답 인터셉터 추가하기
axiosInstance.interceptors.response.use(
  function (response) {
    // 2xx 범위에 있는 상태 코드는 이 함수를 트리거 합니다.
    // 응답 데이터가 있는 작업 수행
    return response;
  },
  function (error) {
    // 2xx 외의 범위에 있는 상태 코드는 이 함수를 트리거 합니다.
    // 응답 오류가 있는 작업 수행
    return Promise.reject(error);
  },
);

export default axiosInstance;

공식 문서에 있는 샘플 코드만으로도 손쉽게 코드의 틀을 잡을 수 있습니다.

 

 

⦁401 에러 처리 예시

axiosInstance.interceptors.response.use(
    response => {
      return response;
    },
    error => {
      /* 응답 code: 401 - 로그인 페이지 이동 */
      if (error.response.status === 401) {
          // cookie or 로컬 스토리지 토큰 제거

          // Authorization 헤더 초기화
          axiosInstance.defaults.headers.common['Authorization'] = '';

          // 로그인 페이지로 리디렉션
          window.location.href = '/login';
        }
      }
      return Promise.reject(error);
    },
);

위와 같은 방식으로 API의 응답 코드가 401일 때 동작할 코드를 공통적으로 설정할 수 있습니다.

해당 로직은 예시일 뿐, 프로젝트 상황에 맞게 잘 작성해 주세요 👍

 

 

⦁setAxiosInterceptors ( 제가 작명한 함수입니다. )

const setAxiosInterceptors = axiosInstance => {
  axiosInstance.interceptors.response.use(
    response => {
      return response;
    },
    error => {
      /* 응답 code: 401 - 로그인 페이지 이동 */
      if (error.response.status === 401) {
        // cookie or 로컬 스토리지 토큰 제거

        // Authorization 헤더 초기화
        axiosInstance.defaults.headers.common['Authorization'] = '';

        // 로그인 페이지로 리디렉션
        window.location.href = '/login';
      }
      return Promise.reject(error);
    },
  );
};

export default setAxiosInterceptors;

 

 

⦁setAxiosInterceptors 적용하기

import axios from 'axios';
import setAxiosInterceptors from '@/api/setAxiosInterceptors';

const axiosInstance = axios.create({
  baseURL: `${process.env.NEXT_PUBLIC_API_URL}/api`,
});

setAxiosInterceptors(axiosInstance); // 이 부분 !

export default axiosInstance;

 

저희 프로젝트에서는 Axios Instance를 5개 정도 사용하고 있기 때문에 interceptors를 등록해 주는 부분은 함수로 빼서 구현했습니다.

 

이렇게 하면 변경사항이 생겨도 코드를 5부분 고치지 않아도 되고 setAxiosInterceptors에서만 코드를 수정하면 됩니다. 😎

 



 

 

참고 문헌 : 

https://stackoverflow.com/questions/47216452/how-to-handle-401-authentication-error-in-axios-and-react

'etc' 카테고리의 다른 글

[API 테스트 툴] 포스트맨(Postman) 인증 토큰 설정하기  (0) 2024.04.08
[ChatGPT] 챗지피티 API란? 사용방법 정리  (7) 2023.11.02
[IT뉴스] ChatGPT에 대한 개발자들의 인식 통계 알아보기 (Stack Overflow)  (0) 2023.09.10
[os] 환경변수란? 설정 방법 정리 (비밀정보 숨기기, 파이썬 os.environ, EC2 환경 변수 설정)  (0) 2023.05.25
[API 테스트 툴] 포스트맨(Postman) 사용방법 정리  (1) 2023.05.09
'etc' 카테고리의 다른 글
  • [API 테스트 툴] 포스트맨(Postman) 인증 토큰 설정하기
  • [ChatGPT] 챗지피티 API란? 사용방법 정리
  • [IT뉴스] ChatGPT에 대한 개발자들의 인식 통계 알아보기 (Stack Overflow)
  • [os] 환경변수란? 설정 방법 정리 (비밀정보 숨기기, 파이썬 os.environ, EC2 환경 변수 설정)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서블릿
    Spring
    자바
    파이썬
    큐
    자바스크립트
    스택
    JDBC
    React Native Chart
    DI
    next-intl
    리액트 네이티브
    자바 스프링
    오블완
    node.js
    React Native
    쓰레드
    오라클
    티스토리챌린지
    Express
    REST API
    Java
    react-native-chart-kit
    포스트맨
    IS-A
    Python
    상속
    JSP
    그리디
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Axios] 엑시오스 Interceptors로 공통 에러 처리하기 (401)
상단으로

티스토리툴바