백엔드 개발을 하면서 RESTAPI를 개발 하거나 사용 하게될 경우 HTTP 상태코드를 응답받거나 응답하도록 설계하는 경우가 많다 숫자 3자리로 이루어진 HTTP 상태코드는 서버와 클라이언트의 주요 이벤트 정보를 구분하고 알려주는 필수적인 코드이다. 주요 상태코드를 정리하고 숙지하기 위해 포스팅을 작성한다.
상태코드의 첫번째 자리의 숫자로 대분류가 가능하다
1XX (Info)
요청을 받았으며 프로세스를 계속한다2XX (Success)
요청을 성공적으로 받았으며 인식했고 수용하였다3XX (Redirection)
요청 완료를 위해 추가 작업 조치가 필요하다4XX (Client Error)
요청의 문법이 잘못되었거나 요청을 처리할 수 없다5XX (Server Error)
서버가 명백히 유효한 요청에 대해 충족을 실패했다
사용 또는 노출되는 빈도가 많은 상태코드를 따로 정리 해보았다
200(성공)
서버가 클라이언트의 요청을 정확히 처리하고 응답을 할때 사용되는 상태코드 이다.
주로 페이지를 요청받고 클라이언트에게 제공했다는 의미로 사용된다
201(작성됨)
성공적으로 요청 되었으며 서버가 새로운 리소스를 작성했다는 의미이다
위의 200번 상태코드가 단순히 페이지를 제공했다는 의미라면 201은 클라이언트의 요청에 의해 서버에서 새로운 리소스를 작성되었다는 의미를 내포한다
202(허용됨)
서버가 요청을 접수했지만 아직 처리하지 않았다.
클라이언트가 비동기 처리를 요청했을 경우 주로 사용된다
비동기로 요청이 전달되었을때 서버에서 처리할 작업이 긴 시간이 소요된다면 서버에서는 202라는 코드를 먼저 응답하고 처리를 모두 끝냈을때 다시 다른 상태코드로 응답을 보내주겠다는 의미이다.
204(콘텐츠 없음)
서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.
클라이언트에서 정상적인 요청을 보냈고 서버에서도 정확히 처리를 했지만 제공할 컨텐츠가 없다. 말로만 풀어 설명하면 누가봐도 이상한 말처럼 들린다 하지만 클라이언트에서 삭제 요청을 보냈고 정상적으로 삭제가 되어 더이상 제공할 컨텐츠가 없다면? 강조된 예시에서는 클라이언트의 요청을 정확히 처리하였고 그 결과 제공할 컨텐츠가 없어지는 상황이다 그렇기 때문에 결과적으로 성공을 응답하게 되는 것이다.
이 경우 ResponseBody가 null 이 되는 것이 아니라 아예 존재하지 않는다 유의하자
300(여러 선택항목)
서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다.
말그대로 요청에 한개 이상의 응답이 가능할때 전송되는 상태코드이다. 사용자는 반드시 제시된 방법 중 한개를 선택 하여야 하지만 표준화된 구현 방법은 존재하지 않는다.
301(영구 이동)
요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.
301Redirect라는 별칭이 있을 정도로 우리가 이해하고 있는 일반적인 Redirect과 동일한 해석이 가능하다 브라우저는 301응답을 받으면 요청받은 Redirect URL로 이동하는 동작을 수행한다.
400(잘못된 요청)
서버가 요청의 구문을 인식하지 못했다.
클라이언트가 잘못된 요청을 보냈을 경우 응답하는 코드이다 보통 RequestBody에 어떠한 부분에서 잘못된 요청으로 해석했는지 이유를 담아서 응답하는 경우가 많다.
401(권한 없음)
이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다.
설명과 같이 로그인과 같은 기능을 활용하는 경우에 자주 사용이 되며 권한이 필요한 리소스에 접근하거나 요청을 하는 경우에 현재 인증이 되어있지 않다라고 알려주는 상태코드이다
백엔드 설정에 따라 401을 응답할경우 로그인이 필요하다고 판단하여 자동으로 로그인페이지로 Redirection 해주는 경우가 많다.
403(금지됨)
서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다.
설명만 본다면 401코드와 혼동할 여지가 충분하다 하지만 401코드는 사용자가 누구인지 인증이 안됨을 의미한다 반면 403코드는 사용자가 누구인지 인증 여부를 따지지 않고 무조건 해당 리소스의 접근을 금지하는 것을 의미한다
404(찾을 수 없음)
서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.
405(허용되지 않는 메소드)
요청에 지정된 방법을 사용할 수 없다. 예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우에 이 코드를 제공한다.
406(허용되지 않음)
요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없다.
서버에 요청을 보낼때 HTTP헤더에 Accept 필드를 활용하여 어떠한 타입의 콘텐츠를 응답받을 것인지 포함하여 요청을 보내게 되는데 서버에서는 요청받은 컨텐츠 타입과 일치하는 리소스를 탐색하여 응답을 보내주게 되는데 알맞은 리소스가 없을 경우에 406코드를 응답하게 된다.
500(내부 서버 오류)
서버에 오류가 발생하여 요청을 수행할 수 없다.
해당 요청은 서버에서 어딘가 예외가 발생하거나 더이상 작업을 실행할 수 없는 상황이 되었을때 응답하게 되는 코드이다 백엔드 개발자로서 500번대 코드를 발생시키지 않도록 코딩을 하는 능력이 필요하다
501(구현되지 않음)
서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.
요청 URL을 확인하거나 서버의 컨트롤러 부분에서의 정의가 제대로 되어있는지 확인 해보자
502(불량 게이트웨이)
서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다.
보통 백엔드단 서버가 다운되었을 경우에 응답되는 상태코드 이다
503(서비스를 사용할 수 없음)
서버가 오버로드되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. 이는 대개 일시적인 상태이다.
502와 약간의 혼동의 여지가 존재 하지만 503상태코드는 일시적으로 요청을 처리할 준비가 되어있지 않은 상황이라고 해석 해야한다 일반적으로 서버에 큰 부하가 생길때 발생한다
504(게이트웨이 시간초과)
서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다.
HTTP 상태코드를 잘 숙지한다면 RESTAPI를 사용하거나 구현할때
응답을 이해하는데 큰 도움을 받을 수 있으며 백엔드를 구현하면서 적시적소에 유연하게 사용하여 완성도있는 애플리케이션을 개발할 수 있을것이다.