Skip to main content

Command Palette

Search for a command to run...

JavaScript Error 객체와 Axios Error 객체 정리

Published
3 min readView as Markdown

들어가며

프론트엔드에서 에러 처리를 하다 보면
JavaScript 기본 ErrorAxios에서 발생하는 Error를 구분하지 못해
헷갈리는 경우가 많다.

이 글에서는 두 에러 객체의 차이와 구조를 정확히 정리하고,
서버에서 내려주는 에러 응답이 Axios 에러 객체의 어디에 담기는지까지 설명한다.

1. JavaScript 기본 Error 객체

JavaScript에서 에러는 Error 객체를 기준으로 동작한다.

throw new Error('에러 발생');

//에러 객체 구조
interface Error {
  name: string;
  message: string;
  stack?: string;
}

특징

  • 코드 실행 중 문제를 표현

  • HTTP, 서버, 네트워크 개념 없음

  • 브라우저 / 런타임 내부 오류 표현용

try {
  JSON.parse('{ invalid json }');
} catch (error) {
  console.log(error.message);
}

👉 이 에러는 서버와 아무 관련이 없다

2. Axios Error 객체 (AxiosError)

Axios는 요청이 실패했을 때
기본 Error를 확장한 Axios 전용 에러 객체를 만든다.

즉,

  • instanceof Error === true

  • 거기에 HTTP 요청/응답 정보가 추가됨

interface AxiosError<T = any> extends Error {
  config: AxiosRequestConfig;
  request?: any;
  response?: AxiosResponse<T>;
  code?: string;
  isAxiosError: boolean;
}

3. 서버 에러 응답은 어디에 담길까?

서버에서 아래와 같은 응답을 보낸다고 가정하자.

{
  "success": false,
  "status": "Invalid Value",
  "code": 400,
  "detailCode": 40001,
  "message": "요청 값이 올바르지 않습니다."
}

그리고 HTTP 상태 코드가 400이라면,

👉 이 응답은 AxiosError.response.data에 그대로 담긴다.

4. 실제 AxiosError 구조 예시

error = {
  name: 'AxiosError',
  message: 'Request failed with status code 400',
  isAxiosError: true,

  response: {
    status: 400,
    statusText: 'Bad Request',
    data: {
      success: false,
      status: 'Invalid Value',
      code: 400,
      detailCode: 40001,
      message: '요청 값이 올바르지 않습니다.'
    },
    headers: {},
    config: {}
  },

  config: {...},
  request: XMLHttpRequest
}

Axios 성공 응답(response) 객체 정리

Axios는 HTTP 요청이 성공(2xx) 했을 때
에러 객체가 아니라 응답(Response) 객체를 반환한다.

이 글에서는 Axios가 반환하는 성공 응답 객체의 구조와
서버에서 내려주는 실제 데이터가 어디에 담기는지를 정확히 정리한다.

1. Axios에서 말하는 “성공”이란?

Axios 기준에서 성공이란:

  • HTTP 상태 코드가 2xx

    • 200 OK

    • 201 Created

    • 204 No Content

👉 이 경우 then()으로 흐름이 이어진다.

axios.get('/api/example').then((response) => {
  // 성공
});

2. Axios 성공 응답 객체 구조

interface AxiosResponse<T = any> {
  data: T;
  status: number;
  statusText: string;
  headers: any;
  config: AxiosRequestConfig;
  request?: any;
}

3. 각 필드의 의미

필드의미
data서버에서 내려준 실제 응답 데이터
statusHTTP 상태 코드
statusText상태 메시지
headers응답 헤더
config요청 설정
request실제 요청 객체

4. 서버 성공 응답 예시

서버에서 아래와 같은 JSON을 내려준다고 가정하자.

{
  "success": true,
  "status": "OK",
  "code": 200,
  "detailCode": 20000,
  "results": [],
}
response = {
  data: {
      "success": true,
      "status": "OK",
      "code": 200,
      "detailCode": 20000,
      "results": [],
    },
  status: 200,
  statusText: 'OK',
  headers: {},
  config: {}
}

More from this blog

Bundling Fundamentals

들어가며 프론트엔드에서 번들링을 이해하는 과정은 웹 성능 최적화를 위해서 꼭 짚고 넘어가야할 부분이다.토스에서 작성해둔 bundling Fundamentals 과정을 통해서 번들링이 '어디서 어떻게' 일어나는지 함께 이해해보자! 번들링이란 번들링은 여러개의 웹 개발에 필요한 리소스 파일들을 하나 또는 몇 개의 파일로 묶는 작업을 얘기하고, 이렇게 묶인 파일

Mar 30, 20261 min read

진짜 git 아직도 모르냐!!!

들어가며 진짜 회사 입사한지 일년이 됐지만 아직까지 git을 초보자처럼 쓰고있는 내 모습에 너무 황당해서 쓰는 블로그.. 회사에서는 그냥 git clone해서 애초에 git fetch, git pull, git push, git commit, git add 등등 명령어만 남발하면서 충돌 없이 최대한 조심스럽게 익숙한 방식대로만 써왔음 에러나면 무조건 ai한테 왜이래 남발하면서 충돌해결하고 rebase, merge 차이도 잘 모르겠고,, 심지어 ...

Feb 4, 20261 min read

OpenLayers , Feature 찾는법

안녕하세요! 오늘은 개발 과정에서 겪었던 까다로운 버그와 그 해결 과정을 공유해볼까 합니다. OpenLayers를 사용한 지도 애플리케이션에서 발생한 문제로, 분명히 존재해야 할 피처(feature)를 getFeatureById로 찾지 못하는 상황이었습니다. 문제 발생: "ID도 있고, 레이어도 있는데 왜 못 찾니?" 문제는 otdr.js 파일의 highlightTracks라는 함수에서 시작되었습니다. 이 함수는 특정 트랙(track)들을 ...

Jan 28, 20263 min read

마리월드

13 posts