Post

HTTP 상태 코드 완벽 정리

HTTP 상태 코드 완벽 정리

웹 개발을 하다 보면 자주 마주치는 HTTP 상태 코드들을 정리하고, 각각의 의미와 사용 사례를 알아봅니다.

HTTP 상태 코드란?

HTTP 상태 코드는 클라이언트의 요청에 대한 서버의 응답 상태를 나타내는 3자리 숫자입니다. 첫 번째 숫자가 응답의 종류를 나타냅니다.

주요 상태 코드 비교표

2xx - 성공

상태 코드이름설명사용 예시
200OK요청 성공GET 요청 성공
201Created리소스 생성 성공POST로 새 유저 생성
204No Content성공했지만 응답 본문 없음DELETE 요청 성공

3xx - 리다이렉션

상태 코드이름설명사용 예시
301Moved Permanently영구적으로 이동됨도메인 변경
302Found임시로 이동됨임시 URL 리다이렉트
304Not Modified캐시된 리소스 사용조건부 GET 요청

4xx - 클라이언트 오류

상태 코드이름설명사용 예시
400Bad Request잘못된 요청유효하지 않은 JSON
401Unauthorized인증 필요로그인이 필요한 API
403Forbidden권한 없음관리자 전용 페이지
404Not Found리소스 없음존재하지 않는 URL
429Too Many Requests요청 횟수 초과Rate Limiting

5xx - 서버 오류

상태 코드이름설명사용 예시
500Internal Server Error서버 내부 오류처리되지 않은 예외
502Bad Gateway게이트웨이 오류프록시 서버 문제
503Service Unavailable서비스 이용 불가서버 과부하

실전 활용 팁

1. RESTful API 설계

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 성공 케이스
app.post('/api/users', (req, res) => {
  const user = createUser(req.body);
  res.status(201).json(user); // Created
});

// 오류 케이스
app.get('/api/users/:id', (req, res) => {
  const user = findUser(req.params.id);
  if (!user) {
    return res.status(404).json({ error: 'User not found' });
  }
  res.status(200).json(user);
});

2. 인증/인가 처리

1
2
3
4
5
6
// 401 vs 403
app.get('/api/admin', authenticate, authorize, (req, res) => {
  // authenticate 실패 → 401 Unauthorized
  // authorize 실패 → 403 Forbidden
  res.status(200).json({ data: 'admin data' });
});

상태 코드 선택 가이드

상황에 맞는 적절한 상태 코드를 사용하면 API의 의미를 명확히 전달할 수 있습니다:

  • 리소스 생성 성공 → 201 Created
  • 리소스 삭제 성공 → 204 No Content
  • 인증 정보 없음 → 401 Unauthorized
  • 권한 부족 → 403 Forbidden
  • 리소스 없음 → 404 Not Found
  • 중복 요청 → 409 Conflict
  • 유효성 검사 실패 → 422 Unprocessable Entity

올바른 HTTP 상태 코드 사용은 API의 품질을 높이고, 디버깅을 쉽게 만듭니다.

This post is licensed under CC BY 4.0 by the author.