0Pricing
Frontend Academy · 강의

오류 처리: HTTP 상태 코드

HTTP 상태 코드를 사용자에게 표시할 메시지로 매핑하고, 네트워크 오류와 서버 오류를 구분하며, 재시도 로직을 구현합니다.

오류 처리: HTTP 상태 코드은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

HTTP 상태 코드 범주

상태 코드는 첫 번째 숫자에 따라 분류됩니다. 2xx는 성공, 3xx는 리디렉션, 4xx는 클라이언트 오류(사용자 측 문제), 5xx는 서버 오류(서버 측 문제)입니다.

일반적인 2xx 코드

200 OK: 본문이 포함된 성공 응답입니다. 201 생성됨: 리소스가 생성되었습니다(새 리소스를 반환하는 경우가 많습니다). 204 콘텐츠 없음: 본문 없이 성공했습니다(DELETE, 때로는 PUT).

일반적인 4xx 코드

400 잘못된 요청: 형식이 잘못된 입력입니다. 401 인증되지 않음: 인증 정보가 없거나 유효하지 않습니다. 403 접근 금지: 인증은 되었지만 허용되지 않습니다. 404 찾을 수 없음: 리소스가 존재하지 않습니다. 409 충돌: 상태가 충돌합니다(중복된 이메일 등). 422 처리할 수 없는 엔터티: 유효성 검사에 실패했습니다.

일반적인 5xx 코드

500 내부 서버 오류: 일반적인 서버 오류입니다. 502 잘못된 게이트웨이: 상위 서비스에 문제가 발생했습니다. 503 서비스를 사용할 수 없음: 서버가 과부하 상태이거나 중단되었습니다. 504 게이트웨이 시간 초과: 상위 서비스가 제때 응답하지 않았습니다.

코드를 사용자 메시지로 매핑하기

상태 코드를 유용한 UI 메시지로 변환하세요. 사용자에게 ‘오류 500’을 그대로 표시해서는 안 됩니다.

function userMessage(status) {
  if (status === 401) return 'Please sign in to continue.';
  if (status === 403) return "You don't have permission for that.";
  if (status === 404) return 'Not found.';
  if (status === 409) return 'Already exists.';
  if (status === 422) return 'Please check the form for errors.';
  if (status >= 500) return 'Something went wrong. Try again in a moment.';
  return 'Something unexpected happened.';
}

네트워크 오류와 서버 오류 비교

가져오기 요청의 실패(오프라인, DNS 오류, CORS 오류)는 서버가 오류 응답을 반환한 경우와 다릅니다. 네트워크 오류는 예외를 발생시키고, 서버 오류는 상태가 >= 400인 Response를 반환합니다.

try {
  const res = await fetch('/api/users');
  if (!res.ok) {
    // Server replied but with error status
    throw new Error(`Server error ${res.status}`);
  }
  return res.json();
} catch (err) {
  if (err instanceof TypeError) {
    // Network failure — fetch couldn't reach server
    throw new Error('Network error. Check your connection.');
  }
  throw err;
}

5xx 및 네트워크 오류 재시도 로직

서버 오류와 네트워크 장애는 일시적인 경우가 많습니다. 지수 백오프를 적용해 재시도하세요.

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const res = await fetch(url, options);
      if (res.ok || (res.status >= 400 && res.status < 500)) return res;
      // 5xx — retryable
    } catch (err) {
      if (attempt === maxRetries - 1) throw err;
    }
    await new Promise(r => setTimeout(r, 2 ** attempt * 1000)); // 1s, 2s, 4s
  }
}

4xx는 재시도하지 않기

4xx 오류는 사용자 측 문제이므로 재시도해도 도움이 되지 않습니다. 5xx 오류와 네트워크 장애만 재시도하세요. 예외는 429(요청이 너무 많음)이며, 이 응답에는 Retry-After 헤더가 포함되는 경우가 많습니다.

Retry-After 헤더 읽기

서버는 429 및 503 응답에 Retry-After를 포함할 수 있습니다. 재시도하기 전에 지정된 시간(초)만큼 기다리세요.

const res = await fetch('/api/limited');
if (res.status === 429) {
  const after = parseInt(res.headers.get('Retry-After') || '5', 10);
  await new Promise(r => setTimeout(r, after * 1000));
  return fetch('/api/limited');
}

유효성 검사 오류 표시

422 응답에는 일반적으로 필드별 오류가 나열된 JSON 본문이 포함됩니다. 관련 양식 input 옆에 오류를 렌더링하세요.

// Server response for 422:
// { errors: { email: 'Already taken', password: 'Too short' } }

if (res.status === 422) {
  const { errors } = await res.json();
  Object.entries(errors).forEach(([field, msg]) => {
    setFieldError(field, msg);
  });
}

텔레메트리: 서비스에 오류 기록하기

운영 환경에서 오류를 확인할 수 있도록 Sentry, Datadog 또는 LogRocket으로 오류를 보내세요. 요청 URL, 메서드, 상태, 그리고 민감한 정보가 제거된 본문을 포함하세요(비밀 정보는 제외).

실행 가능한 복구 방법 표시

모든 오류 UI는 사용자에게 앞으로 진행할 방법을 제공해야 합니다. 예를 들어 재시도 버튼, 지원팀 링크, 정상적으로 작동하는 페이지로 돌아가는 방법을 제공하세요. 막다른 오류 화면은 사용자를 불편하게 만듭니다.

빠른 확인

API가 422 처리할 수 없는 엔터티를 반환했습니다. 일반적으로 무엇을 의미하나요?

복습: HTTP 오류 처리

2xx는 성공, 3xx는 리디렉션, 4xx는 클라이언트 오류, 5xx는 서버 오류입니다. 코드를 사용자에게 친숙한 메시지로 매핑하세요. 네트워크 오류(fetch에서 발생하는 TypeError)와 서버 오류(res.ok가 false인 경우)를 구분하세요. 5xx 오류와 네트워크 장애는 지수 백오프로 재시도하고, 4xx는 재시도하지 마세요(단, Retry-After가 포함된 429는 예외입니다). 422의 필드 오류를 표시하세요. Sentry 같은 서비스에 오류를 기록하세요.

자주 묻는 질문

“오류 처리: HTTP 상태 코드” 강의는 무료인가요?

네 — “오류 처리: HTTP 상태 코드” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“오류 처리: HTTP 상태 코드”에서 뭘 배우나요?

HTTP 상태 코드를 사용자에게 표시할 메시지로 매핑하고, 네트워크 오류와 서버 오류를 구분하며, 재시도 로직을 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Frontend Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“오류 처리: HTTP 상태 코드” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Fetch API: GET, POST, PUT, DELETE
  2. Axios: 인터셉터와 기본 URL
  3. 오류 처리: HTTP 상태 코드
  4. 데이터 캐싱을 위한 SWR 및 React Query
← Frontend Academy(으)로 돌아가기