웹 개발을 진행하면 200, 401, 404, 500 등 다양한 응답 코드를 마주하게 됩니다.
저도 프로젝트를 진행하면서 스프링 프레임워크의 ResponseEntity 객체를 사용해서 응답을 제공하는데
그 내부에는 이런 다양한 응답 코드를 집어넣을 수 있습니다.
HTTP 상태 코드
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다.
응답은 5개의 그룹으로 나누어집니다:
1. 정보를 제공하는 응답
2. 성공적인 응답
3. 리다이렉트
4. 클라이언트 에러
5. 서버 에러.
결국 응답 코드만으로 어떠한 문제 발생했는지 대략적인 유추가 가능합니다.
1XX 응답 코드
정보를 제공하는 응답
해당 코드는 임시 응답을 제공하는 상태 코드입니다.
100(Continue) | 지금까지의 상태가 괜찮으며 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려줍니다. |
101(Switching Protocol) | 서버에서 프로토콜을 변경할 것임을 알려줍니다. |
102(Processing) | 서버가 요청을 수신하였으며 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 의미합니다. |
103(Early Hints) | 서버가 응답을 준비하는 동안 사용자 에이전트가 사전 로딩을 시작할 수 있도록 합니다. |
1XX 코드는 실제로 개발을 하면서 아예 사용했던 적이 없습니다.
많은 분들도 거의 사용하지 않는 응답코드라고 하니 어떠한 내용인지 알아만 두면 될 것 같습니다.
2XX 응답 코드
성공적인 응답
해당 코드는 성공적인 응답을 반환합니다.
(실제로는 더 많은 코드가 있지만 자주 사용되는 코드만 설명하겠습니다.)
200(OK) | 요청이 성공적이었다는 것을 알려줍니다. HTTP 메서드에 따라 성공의 의미는 달라질 수 있습니다. |
201(Created) | 요청이 성공적이었으며 그 결과로 새로운 리소스(자원)가 생성되었다는 것을 알려줍니다. 보통은 POST, PUT 요청 이후 응답으로 따라옵니다. |
202(Accepted) | 요청을 수신했지만 아직 처리가 되지 않았을 경우 응답합니다. (ex, 요청 접수 이후 10분 이후에 배치 프로세스가 돌아가는 경우) |
204(No Content) | 성공했지만 요청에 대해 보내줄 수 있는 콘텐츠가 없는 경우 응답합니다.. |
여기서 204로 응답하고 body에 응답 데이터를 보낼 경우 수신되지 않는 문제가 있습니다.
https://qkrqkrrlrl.tistory.com/53
HTTP 204 (NO CONTENT) 알고 쓰자
프로젝트를 진행하면서 사용자의 응답 요청은 정상적으로 오지만 유튜브의 음악이 존재하지 않을 경우 204 code로 response를 반환하기로 했다. @GetMapping("/search/youtube") public ResponseEntity searchMusicByYout
qkrqkrrlrl.tistory.com
해당 내용은 위 게시글에 게시해 두었습니다.
3XX 응답 코드
리다이렉트
해당 코드는 리다이렉션 메시지를 반환합니다.(즉 웹 브라우저에서 추가 작업 조치가 필요한 경우)
(실제로는 더 많은 코드가 있지만 자주 사용되는 코드만 설명하겠습니다.)
301(Moved Permanently) | 요청한 리소스의 URI가 변경되었음을 의미한다. 새로운 URI가 Location 헤더에 포함됩니다. (즉 어떤 URI가 영구적으로 변경되었으니, 클라이언트에서는 이제 변경된 URI를 사용해야 한다.) |
302(Found) | 요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다. 새로운 URI가 Location 헤더에 포함됩니다. |
303(See Other) | 클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때, 서버가 클라이언트에게 직접 보내주는 응답 방식. |
307(Temporary Redirect) | 클라이언트가 요청한 리소스가 다른 URI에 있으며, 이전 요청과 동일한 메서드를 사용하여 요청해야 할 때, 서버가 클라이언트에게 직접 응답을 보낸다. 첫 요청에 POST가 사용되었다면, 두번째 요청도 반드시 POST를 써야 한다. (즉 현재 요청한 URI가 임시적으로 다른 URI로 변경되었을 경우) |
308(Permanent Redirect) | 리소스가 HTTP 응답 헤더의 Location에 명시된 다른 URI에 위치하고 있음을 알려준다. 307과 동일하게 이전 요청과 동일한 메서드를 사용해야 한다. (즉 현재 요청한 URI가 영구적으로 다른 URI로 변경되었을 경우) |
스프링부트와 Vue로 리다이렉트를 테스트 진행해보려고 했으나 SPA 환경에서는 리다이렉트를 따로 진행하지 않는다고 한다.
그 이유는 Vue나 React 같은 spa들은 라우터를 통해 화면을 갈아 끼우기 때문에 서버 사이드 리다이렉션이 필요하지 않다.
4XX 응답 코드
클라이언트 에러
해당 코드는 클라이언트 에러를 반환합니다.(즉 클라이언트의 문제로 인한 에러)
(실제로는 더 많은 코드가 있지만 자주 사용되는 코드만 설명하겠습니다.)
400(Bad Request) | 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다. |
401(Unauthorized) | 비인증을 의미한다. 즉 클라이언트가 요청을 수행하기 위해서는 인증받은 상태여야 한다. |
403(Forbidden) | 콘텐츠에 접근할 권리를 가지고 있지 않을 때 응답 코드. 401과 다른 점이 인증은 완료됐지만, 인가가 실패했을 경우를 의미한다. |
404(Not Found) | 서버는 요청 받은 리소스를 찾을 수 없음을 의미한다. API는 정상적으로 요청했지만 리소스가 없을 경우 응답한다. |
429(Too Many Requests) | 사용자가 지정된 시간에 너무 많은 요청을 보냈을 경우 응답 코드. |
즉 4xx으로 오는 코드는 전부 클라이언트의 잘못으로 정의된다.
https://qkrqkrrlrl.tistory.com/105
너무 많은 요청을 제한해야 한다...(feat 세마포어로 스레드 제한)
RESTFUL API 서비스를 제작하면서 가장 고민하고 있는 부분이다.chat gpt로 추천을 받기 위해서는 1번의 request가 필요.jmeter로 100번 요청 보냈더니 벌써 gpt가 toManyRequest를 뱉으며 뻗어버렸다. 너무 많
qkrqkrrlrl.tistory.com
위 게시글을 보면 Chat-GPT API로 너무 많은 요청을 보냈어서 429 응답 코드를 받은 것을 확인할 수 있다.
즉 공통으로 사용되는 HTTP 응답 코드를 제대로 사용하면 해당 코드만 보고 어떤 문제가 발생했는지 알아차릴 수 있다.
5XX 응답 코드
서버 에러
해당 코드는 서버 에러를 반환합니다.(즉 서의 문제로 인한 에러)
(실제로는 더 많은 코드가 있지만 자주 사용되는 코드만 설명하겠습니다.)
500(Internal Server Error) | 서버가 처리 방법을 모르는 경우 발생한다. |
502(Bad Gateway) | 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미한다. |
HTTP 상태 코드는 HTTP 프로토콜을 사용하면서 지켜야 하는 규칙입니다.
공통 규칙으로 정해놓은 코드를 응답함으로써 일관성을 챙길 수 있으므로 꼭 경우에 맞는 응답 코드를 반환하는 것이 좋습니다.
모든 자료는 mozilla의 문서를 참고하였습니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
HTTP 상태 코드 - HTTP | MDN
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고
developer.mozilla.org
'CS지식' 카테고리의 다른 글
TCP와 UDP의 차이점에 대해 설명해주세요 (0) | 2024.05.20 |
---|---|
HTTP/1.1과 HTTP/2의 차이점 (0) | 2024.05.17 |
Tomcat은 정확히 어떤 역할을 하는 도구일까? (0) | 2024.05.12 |
@Transactional 어노테이션의 역할 (1) | 2024.05.09 |