💡 개요
오늘은 HTTP 응답에 자주 사용되는 상태코드에 대해 정리 해보자.
🛠️ HTTP 상태코드
보통 상태코드는 예외가 발생했을 때 유용하게 사용된다.
물론 예외에 대한 메시지 또한 응답하지만 1차적으로 상태코드를 통해 어떤 예외가 발생했는지도 확인할 수 있다.
상태코드는 보통 프론트엔드에서 어떤 예외인지 구분할 때 사용된다.
메시지로도 구분이 가능하지만 String같은 문자열을 비교하는 것 보단 백엔드와 프론트엔드가 서로 약속된 Integer 형태의 상태코드를 통해 구분하는 것이 더 정확하다.
대표적으로 사용되는 HTTP 상태코드는 다음과 같다.
- 100번대 : 정보(Informational)
- 대표적으로 100 Continue가 있다. 100 Continue의 의미는 서버가 요청을 잘 받았고, 작업을 진행하고 있다는 의미이다.
- 대표적으로 100 Continue가 있다. 100 Continue의 의미는 서버가 요청을 잘 받았고, 작업을 진행하고 있다는 의미이다.
- 200번대 : 성공(Success)
- 요청이 정상적으로 처리되었을 때 사용한다.
- 요청이 정상적으로 처리되었을 때 사용한다.
- 300번대 : 리다이렉션(Redirection)
- 요청을 보낸 URL이 변경되어 리다이렉션(재 요청)이 필요할 때 사용된다.
- 보통 300번대 응답이 오면 응답 헤더에 새로운 위치(Location) 를 함께 전달하고, 클라이언트는 그 URL로 다시 요청을 보내야 한다.
- 400번대 : 클라이언트 오류(Client Error)
- 클라이언트(요청을 보내는 쪽)의 문제로 요청이 잘못됐다는 의미이다.
- 클라이언트(요청을 보내는 쪽)의 문제로 요청이 잘못됐다는 의미이다.
- 500번대 : 서버 오류(Server Error)
- 서버(응답하는 쪽)에서 문제가 생겼을 때 보내는 코드이다.
상태코드 | 의미 | 설명 |
200 OK | 요청 성공 | 요청이 정상적으로 처리되었을 때 사용한다. |
201 Created | 생성 성공 | 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성되었을 때 사용한다. |
204 No Content | 응답 본문 없음 | 요청은 성공했지만 응답할 데이터가 없을 때 사용한다. |
301 Moved Permanently | 서버 도메인 영구 이동 | 요청을 보낸 서버의 도메인이 변경되었을 때 사용한다. |
302 Found | 서버 도메인 임시 이동 | 요청을 보낸 서버의 도메인이 임시로 변경되었을 때 사용한다. |
400 Bad Request | 잘못된 요청 | 클라이언트의 요청이 잘못되어 서버가 요청을 처리할 수 없을 때 사용한다. |
401 Unauthorized | 인증 실패 | 인증이 필요한 요청에서 인증이 되지 않았을 때 사용한다. (예: 토큰이 없거나 만료된 경우) |
403 Forbidden | 권한 없음 | 인증은 되었지만 요청한 리소스에 접근할 권한이 없을 때 사용한다. |
404 Not Found | 리소스 없음 | 요청한 리소스가 서버에 존재하지 않을 때 사용한다. |
409 Conflict | 충돌 | 요청이 서버의 현재 상태와 충돌할 때 사용한다. (예: 중복된 데이터 등록) |
500 Internal Server Error | 서버 에러 | 서버 내부에 에러가 발생했을 때 사용한다. 주로 예기치 못한 오류를 의미한다. |
위 상태코드는 현업에서 주로 사용되는 상태코드이다.
물론 백엔드팀과 프론트엔드팀의 API 설계 규칙이나 협의에 따라 커스텀하는 것도 충분히 가능하다.
왜냐하면 실제로 서버 내부에서 발생하는 상황은 매우 다양하기 때문이다.
저 상태코드만으로 모든 경우를 표현하기에는 수가 부족하다.
그래서 일부 팀에서는 400번대나 500번대 상태코드를 세분화하거나, 자체적으로 에러 코드를 추가로 정의해서 더 구체적인 상황을 전달하기도 한다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.04.30 - REST (0) | 2025.04.30 |
---|---|
[개발 일기] 2025.04.29 - apt-get update 하는 이유 (0) | 2025.04.29 |
[개발 일기] 2025.04.27 - Kafka + H2 포트 충돌 (0) | 2025.04.27 |
[개발 일기] 2025.04.26 - Collections.synchronizedXXX() vs Concurrent Collections (1) | 2025.04.26 |
[개발 일기] 2025.04.25 - 맥북 쿠버네티스 서비스 접근 (0) | 2025.04.25 |