1. HTTP 상태코드
1.1. 상태 코드
상태코드라고 하는것은 클라이언트가 보낸 요청의 처리상태를 응답에서 알려주는 기능이라고 할 수 있습니다.
예를 들어보겠습니다. 크롬에서 개발자모드를 키면 network탭에 보시면 어떤식으로 응답이 오고가는지를 확인할 수 있습니다.
상태코드 예시
- 1xx(Informational): 요청 수신 및 처리진행중일때 나오는 상태코드
- 2xx(Successful): 요청 정상 처리 상태코드
- 3xx(Redirection): 요청을 완료하려면 추가 행동필요함을 알리는 상태코드
- 4xx(Client Error): 클라이언트 오류, 잘못된 문법 서버 요청 수행할 수 없을때 상태코드
- 5xx(Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못할때 나오는 상태코드
인식할 수 없는 상태코드를 서버가 반환하게 되는 경우 상위 상태코드를 해석해서 처리를 진행합니다. 즉, 2xx면 성공상태 코드라고 생각하고, 4xx 클라이언트에러, 5xx 서버에러라고 생각하면 상태코드를 변경하지 않아도되게됩니다.
1.2. 상태코드별 처리
-
1xx(Informational)
현재 요청이 수신이 되어 처리를 진행중인 상태 -
2xx(Successful)
클라이언트의 요청을 성공적인 처리한 상태
200: OK, 201: Created(리소스 생성), 202: Accepted(요청접수 처리되었으나 처리 완료 X) - 배치 처리, 204: No Content: 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없을때 처리합니다.
1 | HTTP/1.1 200 OK |
- 3xx(Redirection)
요청을 완료하기 위해서는 유저의 에이전트에서 추가 조치가 필요한 상태코드
1 | HTTP/1.1 300 Multiple Choices |
웹 브라우저는 3xx 응답의 결과에 Location가 있는 경우 해당 위치로 리다이렉션을 진행합니다.
-
영구 리다이렉션: 특정 리소스의 UR가 영구적으로 리다이렉션
301: 리다이렉트시 요청 메서드가 GET 변경되어 본문 제거
308: 리다이렉트시 요청 메서드와 본문 유지 -
일시적 리다이렉션: 특정 로직 주문같은 경우 주문이 모두 완료시 GET화면으로 리다이렉션
302: 리다이렉트시 요청 메서드가 GET 변경 본문 제거
307: 302와 기능은 같으나 요청메서드와 본문 유지
308: 리다이렉트시 요청 메서드가 GET으로 변경 -
특수 리다이렉션: 결과를 캐시로 리다이렉션
300: 잘 사용되지 않음
304: 캐시를 목적으로 사용되며 로컬 PC저장된 캐시를 재사용합니다.
- 4xx(Client Error)
클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없습니다. 즉, 오류의 원인은 클라이언트
- 400(Bad Request): 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없습니다.
요청 구문, 메시지 등의 오류와 클라이언트는 요청 내용을 다시검토하고 데이터를 전송해야합니다. Request Parameter 혹은 API 스펙이 맞지 않을 경우
400은 500번과 다르게 복구가 불가능하고 500번은 같은 요청시 성공 가능성이 있습니다.
- 401(Unauthorized)
클라이언트가 해당 리소스에 대한 인증이 필요합니다.
인증이 되지 않거나 401 오류 발생시 응답에 WWW-Authenticate헤더와 함께 인증 방법을 설명해야합니다.
인증: 로그인, 인가: 권한부여(ADMIN)
-
403(Forbidden)
서버가 요청을 이해했지만 승인을 거부한 경우
주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 발생할 수 있습니다. (인가관련된 허가 여부-ADMIN) -
404(Not Found)
요청 리소스를 찾을 수 없을때 발생하거나 권한이 부족한 리소스에 접근할때 발생합니다. 혹은 리소스를 Hide처리하고 싶을때 발생합니다.
- 5xx(Server Error)
서버 문제로 오류가 발생할때 반환하는 상태코드입니다. 만약 서버가 문제가 있으니 클라이언트에서 재시도를 진행하면 성공할 수도 있다는것이 장점입니다.
-
500(Internal Server Error)
서버 문제로 오류 발생, 애매하면 500을 반환합니다. -
503(Service Unavailable)
서비스 이용 불가, 일시적인 과부하또는 예정된 작업으로 잠시 요청을 처리할 수 없는 경우 반환합니다. Retry-After헤더필드를 사용하면 얼마뒤에 복구되는지 반환시킬 수 있습니다.