최근에 저는 REST API를 직접 개발 해보면서 여러 HTTP 상태 코드들을 만날 수가 있었는데
한 번 이 상태 코드들을 직접 정리하면 훨씬 더 이해하기 쉬울 것 같다는 생각에 정리해봅니다.
HTTP 상태코드
HTTP 상태코드는 특정 HTTP 요청이 어떻게 처리가 되었는지 알려주는 코드를 의미 한다.
HTTP 상태코드 분류
1xx (정보): 요청을 받았으며 프로세스를 계속한다
2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다
위키피디아
1xx : 조건부 응답
1xx는 요청을 받았고, 작업을 진행 중이라는 의미이다. (일반적으로는 안보인다.)
100(계속 Continue) : 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 보내달라는 응답 코드
2xx : 성공
2xx는 이 작업을 성공적으로 받았고, 이해했으며, 받아들여졌다는 의미이다.
200 OK: 성공적으로 처리했을 때 쓰인다. 가장 일반적으로 볼 수 있는 HTTP 상태.
201 Created: 요청이 성공적으로 처리되어서 리소스가 만들어졌음을 의미한다.
202 Accepted: 요청이 받아들여졌지만 처리되지 않았음을 의미한다.
3xx : 리다이렉션 완료
3xx는 이 요청을 완료하기 위해서는 리다이렉션이 이루어져야 한다는 의미이다.
300 Multiple Choices(복수 응답): 서버에서 여러 개의 응답이 있음을 알릴 때 사용할 의도로 만들어졌으나, 정작 응답을 선택하는 방법은 표준화되지 않아 사용되지 않는다.
301 Moved Permanently(영구 이동): 영구적으로 컨텐츠가 이동했을 때 사용된다.
302 Found: 일시적으로 컨텐츠가 이동했을때 사용된다.
303 See Other: 서버가 사용자의 GET요청을 처리하여 다른URL에서 요청된 정보를 가져올수 있도로 응답하는 코드.
304 Not Modified: 200 다음으로 많이 볼 수 있는 HTTP 상태이다. 이 경우 보통 브라우저에 캐시되어 있는 버전을 쓴다.
307 Temporary Redirect: 302와 동일하게 일시적인 컨텐츠 이동을 나타낼때 사용되나, HTTP 메소드의 변경을 허용하지 않는다.
308 Permanent Redirect: 301와 동일하게 영구적인 컨텐츠 이동을 나타낼때 사용되나, HTTP 메소드의 변경을 허용하지 않는다.
4xx : 요청 오류
4xx는 이 요청은 올바르지 않다는 의미이다. 여기서부터 브라우저에 직접 표출된다.
400 Bad Request(잘못된 요청): 요청 자체가 잘못되었을 때 사용하는 코드이다.
401 Unauthorized(권한 없음): 인증이 필요한 리소스에 인증 없이 접근할 경우 발생한다. 이 응답 코드를 사용할 때에는 반드시 브라우저에 어느 인증 방식을 사용할 것인지 보내야 한다. 단순히 권한이 없는 경우 이 응답 코드 대신 아래 403 Forbidden을 사용해야 한다.
403 Forbidden(거부됨): 서버가 요청을 거부할 때 발생한다. 관리자가 해당 사용자를 차단했거나 서버에 index.html 이 없는 경우에도 발생할 수 있다. 혹은 권한이 없을 때(로그인 여부와는 무관하다)에도 발생한다.
404 Not Found(찾을 수 없음): 찾는 리소스가 없다는 뜻으로, 가장 흔하게 볼 수 있는 오류 코드이다.
405 Method Not Allowed(허용되지 않은 방법) : PUT이나 DELETE 등 서버에서 허용되지 않은 메소드로 요청시 사용하는 코드이다.
406 Not Acceptable(받아들일 수 없음) : 요청은 정상이나 서버에서 받아들일 수 없는 요청일시 사용하는 코드이다. 보통 웹 방화벽에 걸리는 경우 이 코드가 반환된다. 하이퍼텍스트 커피 포트 제어 프로토콜(HTCPCP)에서도 쓴다
409 Conflict(충돌) : 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드이다.
410 Gone(사라짐) : 404와는 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다. 404가 그런 게 없어서 못 찾는 경우라면, 410은 있었던 것이 없어져서 못 찾는 것.
411 Length Required(길이 필요) : 사용자가 서버로 요청할때 해더에 Content-Length 필드에 값이 없이 요청해서 서버에서 응답을 거부할 때 쓰는 코드이다.
412 Precondition Failed(전제조건 실패): 사용자가 서버로 조건부 요청(Conditional Requests)을 할때 서버의 전제조건와 사용자의 전제조건이 맞지 않아 서버에서 응답 거부를 할때 쓰는 코드이다.
413 Payload Too Large(요청된 것이 너무 긺) : 요청 본문이 너무 긴 경우 발생한다. 서버 소프트웨어로 NGINX를 사용하는 경우 기본 설정 그대로 사용하면 큰 첨부파일을 올릴 때 이 오류 코드가 발생하게 된다.
414 URI Too Long(요청된 URI가 너무 긺): 넣은 값이 너무 길 때 발생한다. 흔히 볼 수 있는 사례는 URL이 너무 길 경우.
415 Unsupported Media Type(지원하지 않는 미디어 타입): 사용자가 요청한 미디어타입이 서버에서 지원하지 않는 타입이라서 응답을 거부할 때 쓰는 코드이다.
429 Too Many Requests(너무 많은 요청): 일정 시간 동안 너무 많은 요청을 보냈을 때 이를 거부하기 위해 사용한다. 나무위키에서는 페이지 소스(/raw/문서명) 보기를 너무 자주 요청했을 때 임시 차단을 걸기 위해 사용한다.
5xx : 서버 오류
5xx는 올바른 요청에 대해 서버가 응답할 수 없다는 의미이다.
500 Internal Server Error(내부 서버 에러): 서버에 오류가 발생해 작업을 수행할 수 없을 때 사용된다. 보통 설정이나 퍼미션 문제. 아니면 HTTP 요청을 통해 호출한 문서가 실제 HTML 문서가 아니라 JSP, PHP, 서블릿 등의 프로그램일 경우 그 프로그램이 동작하다 세미콜론을 빼먹는 등의 각종 에러로 비정상 종료를 하는 경우 이 응답코드를 보낸다.
501 Not Implemented(요청한 기능 미지원): 서버가 요청을 수행하는데 필요한 기능을 지원하지 않는 경우 사용된다. 웬만해서는 볼 수 없다.
502 Bad Gateway(게이트웨이 불량): 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 때 사용된다.
503 Service Temporarily Unavailable(일시적으로 서비스를 이용할 수 없음): 서비스를 일시적으로 사용할 수 없을 때 사용된다. 주로 웹서버 등이 과부하로 다운되었을 때 볼 수 있다.
504 Gateway Timeout(게이트웨이 시간초과): 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 때 사용된다.
이렇게 다양한 http요청 코드들이 있는데 이 중 제가 작업을 하면서 가장 많이 보이는 것들이 몇 가지 있는데
200 완료
500 서버 오류
404 리소스 존재하지 않음
412 전제조건이 맞지 않음
이렇게 3가지 오류가 자주 보이고 이중 404와 412는 제가 직접 발생시키는 오류이기 때문에 REST API를 만들면서 매번 보는게 200과 500 이 2가지를 자주 보는 것 같습니다.
처음 API를 실행시켰을때 500이 뭔지 400이 뭔지 200이 뭔지 몰랐는데 이렇게 계속 쓰면서 보다보니 익숙해져서 이렇게 보기 쉽게 정리까지 하는 저의 성장한 모습에 감탄하면서 오늘 포스팅 마치겠습니다.
'Dev DBAN > 개발 이야기' 카테고리의 다른 글
나의 첫 리눅스 - AWS EC2 서버 만들기 (0) | 2021.10.05 |
---|---|
나의 첫 리눅스 - APACHE2,MYSQL,PHP (1) | 2021.10.04 |
파이썬으로 뉴스 크롤링을 해주는 라이브러리 - Newspaper (2) | 2021.10.01 |
파이썬으로 네이버 카페 게시글 크롤링 (1) | 2021.06.15 |
파이썬으로 자동 요약하기 5편 - 자동 요약mk.2 (0) | 2021.06.11 |
댓글