웹 프로그래밍 - RESTful한 HTTP 요청 메서드와 HTTP 응답 상태 코드

HTTP 요청 메서드와 HTTP 응답 코드를 잘 알고 사용한다면 우리는 보다 쉽게 RESTful 하게 HTTP 프로토콜을 사용할 수 있습니다. 뿐만 아니라 HTTP 프로토콜은 REST(Representational State Transfer) 아키텍처 위에서 더 큰 빛을 발하는 통신 규약입니다. 하지만 생각보다 API를 REST 하게 설계하고 사용하는 것은 말처럼 그리 간단치 않습니다.

HTTP 요청 메서드

먼저 알아볼 부분은 HTTP 요청 메서드입니다. HTTP 요청 메서드는 요청(Request)을 통해 기대하는 행동을 말합니다. 예를 들어 서버에서 처리를 하지 않는다고 해도 https://7942yongdae.tistory.com/이라는 URL에 GET 요청(Request)하면 조회를 하고 싶다는 의미이고, POST를 요청한다면 무언가 글을 등록하고 싶다는 의미가 됩니다.

 

 tip. 하나의 URL(혹은 URI)을 통해 GET, HEAD, POST, PUT, PATCH, DELETE과 같은 요청을 처리할 수 있도록 한 이유는 하나의 URL을 가지고 여러 가지 일을 할 수 있도록 정의하기 위함입니다. 예를 들어 글 추가, 수정, 삭제를 위해 각 각의 URL 3개를 만드는 것보다 1개의 URL을 가지고 상황(요청 메서드)에 따라 처리하는 게 효율적일 수 있습니다.

유형 개요
GET 조회
HEAD 조회 - 응답 바디 제외
POST 생성 || 추가
PUT 전체 갱신 || 추가 (자원이 없는 경우)
PATCH 일부 갱신
DELETE 삭제

 참고 - https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

HTTP 응답 상태 코드

HTTP 프로토콜을 기준으로 클라이언트와 서버 간에 통신이 이루어지면, 요청(Request)을 한 후 결과로 응답(Response)을 돌려받습니다. 이때 응답은 HTTP 상태 코드를 포함하고 있습니다. HTTP 응답 상태 코드를 공부한다면, 응답 결과의 상태 코드만으로 성공, 실패 여부를 판별할 수 있고 한발 더 나아가 API를 설계할 때도 도움이 됩니다. 정의된 HTTP 상태 코드는 다음과 같습니다.

통신 상황에 대한 정보를 알려주는 1xx - HTTP 응답 코드

코드 개요 설명
100 Continue 클라이언트가 보낸 요청에 문제가 없으니, 다음 요청을 이어서 보내도 문제가 없습니다.
101 Switching Protocols 클라이언트 요청에 정의된 upgrade 헤더에 따라 서버가 프로토콜을 바꿉니다.

요청의 성공을 정의하는 2xx - HTTP 응답 코드

코드 개요 설명
200 OK 요청을 성공적으로 처리했습니다.
201 Created 요청을 성공적으로 처리했으며, 그 결과로 새로운 Resource를 생성했습니다.
202 Accepted 요청을 접수만 완료하였습니다.
주로 비동기적으로 처리하는 작업을 위해 만들어졌습니다.
203 Non-Authoritative
Information
요청은 성공했지만, Header의 메타 데이터가 원본과 동일하지 않습니다.
주로 Proxy에 의해 Header 값이 변환됩니다.
204 No Content 요청을 처리했지만, 반환 하는 응답 바디가 없습니다.
205 Reset Content 요청 처리 후, 클라이언트에게 요청을 보낸 화면을 새로고침하라고 알려줍니다.
206 Partial Content 범위(Range) 헤더를 이용 할 때 사용되는 성공 상태 코드입니다.
클라이언트에서 다수의 스트림을 이용해 데이터를 받을 때 사용됩니다.

리다이렉트(Redirect)를 정의한 3xx - HTTP 응답 코드

코드 개요 설명
300 Multiple Choice 하나 이상의 응답이 가능하며, 다수의 결과 중 하나를 반드시 선택해야 합니다.
301 Moved Permanently 요청한 Resource의 위치가 변경되었습니다.
변경된 위치값은 포함 될 수 있습니다.
302 Found 요청한 Resource의 위치가 임시로 변경되었습니다.
303 See Other 요청한 Resource는 다른 URL을 통해 얻을 수 있습니다.
304 Not Modified 캐시를 목적으로 사용되며, 요청한 Resource가 수정되지 않았음을 알려줍니다.
307 Temporary Redirect 요청한 Resource의 위치가 임시로 변경되었습니다.
302와 동일한 의미를 가지며, HTTP 메소드를 변경하면 안된다는 점이 다릅니다.
308 Permanent Redirect 요청한 Resource의 위치가 변경되었습니다.
301과 동일한 의미를 가지며, HTTP 메소드를 변경하면 안된다는 점이 다릅니다.

잘못된 요청임을 알려주는 4xx - HTTP 응답 코드

코드 개요 설명
400 Bad Request 전달 된 데이터의 잘못된 문법으로 서버가 요청을 이해할 수 없습니다.
401 Unauthorized HTTP 표준은 미인증(Unauthorized)를 나타내지만,
이 응답은 비인증(unauthenticated)를 의미합니다.
402 Pyament Required 전자 결제 시스템에 사용하기 위해 예약된 상태 코드로, 현재는 사용되고 있지 않습니다.
403 Forbidden Resource에 접근한 권리를 가지고 있지 않습니다.
401과 다른점은 클라이언트를 알고 있다는 것입니다.
404 Not Found Resource가 존재하지 않습니다.
405 Method Not Allowd 요청한 Method를 허용하지 않습니다.
406 Not Acceptable 클라이언트가 정한 규격에 따른 콘텐츠가 존재하지 않습니다.
407 Proxy Authentication
Required
인증되지 않은 요청을 받았습니다.
프록시를 통해 완료된 인증이 필요합니다.
408 Request Timeout 클라이언트가 서버가 지정한 시간 내에 요청을 보내지 않았습니다.
409 Conflict Resource의 현재 상태 때문에 요청을 완수할 수 없습니다.
예: 일괄 처리 작업 요청 처리 중에 다시 요청이 발생한 경우
410 Gone Resource가 삭제되어, 더 이상 존재하지 않습니다.
411 Length Required 헤더에 Content-Length 필드가 정의되어 있지 않습니다.
412 Precondition Failed 클라이언트의 헤더에 있는 전제 조건이 서버의 전제 조건에 적합하지 않습니다.
413 Payload Too Large 클라이언트가 요청한 Entity는 서버에서 정의한 크기보다 큽니다.
414 URI Too Long 클라이언트가 요청한 URI는 서버에서 처리가능한 길이보다 깁니다.
415 Unsupported Media Type 요청한 미디어 포맷은 서버에서 지원하지 않습니다.

서버 처리 과정에서 문제가 발생했음을 알려주는 5xx - HTTP 응답 코드

코드 개요 설명
500 Internal Server Error 서버에서 예상하지 못한 문제가 발생했습니다.
501 Not Implemented 요청한 기능을 지원하지 않습니다.
502 Bad Gateway 게이트웨이로 작업하는 동안 잘못된 응답을 수신했습니다.
503 Service Unavailable 일시적으로 서버를 사용할 수 없습니다.
504 Gateway Timeout 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없습니다.
505 HTTP Version Not Supported 요청 메시지의 HTTP 프로토콜 버전을 서버가 지원하지 않습니다.

 참고 - https://datatracker.ietf.org/doc/html/rfc2616#section-10, https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

반응형

댓글

Designed by JB FACTORY