HTTP Method, HTTP Status Code

JoonYoung Maeng·2022년 3월 15일
0
post-thumbnail

🤔 HTTP란 ?

HTTPHyperText Transfer Protocol의 약자로 웹 상에서 브라우저와 서버가 데이터를 주고받기 위한 표준 규약을 말한다.

HTTP는 Stateless(무상태 ) 특징을 가진다. HTTP가 REST와도 밀접한 관계가 있기에 REST의 Stateless 특징과 동일한 뜻을 가진다.

HTTP는 이전 Request와 다음 Request를 각각 독립적인 요청으로 판단한다.

따라서, 서버는 클라이언트에서 관리되는 세션, 쿠키등의 정보를 서버에 저장하지 않고 단순 브라우저에서 들어오는 Request를 처리하고 Response 한다.

image

❓ HTTP Method?

HTTP는 Request를 독립적으로 처리하기 때문에 해당 Request가 서버로 부터 어떠한 데이터를 받고자 하는지 동작 정보를 서버에게 전달해줘야한다.

그러므로, 브라우저는 서버에 Request할 때 URL과 HTTP Method를 가지고 어떠한 동작을 통해 어떤 데이터를 주고받을지 HTTP Message에 정의한다.

이때, 서버에게 “어떠한 동작을 할지 나타내는 것”을 HTTP Mehtod라고 정의할 수 있다.

자주 사용하는 메소드에는 기본적인 C,R,U,D (Create, Read, Update, Delete) 동작을 지원하는 “POST, GET, PUT/PATCH, DELETE”가 있고, 이외에도 HEAD, OPTIONS, CONNECT와 같은 메소드가 존재한다.

image

📍 GET

“GET” 메소드는 C,R,U,D 동작 중 Read에 해당하는 동작을 나타낸다.

클라이언트가 서버에게 Request를 통해 존재하는 리소스에 대해서 정보를 요청할 때 사용된다.

서버는 해당 Request를 통해 데이터를 가져오고 수정하지 않은 그대로 클라이언트에게 데이터를 전달한다.

📍 POST

“POST” 메소드는 C,R,U,D 동작 중 Create에 해당하는 동작을 나타낸다.

클라이어트가 서버에게 Request를 통해 새로운 리소스를 생성해달라는 요청에 사용된다.

📍 PUT / PATCH

“PUT”과 “PATCH” 메소드는 C,R,U,D 동작 중 Update에 해당하는 동작을 나타낸다.

두 메소드 모두 클라이언트가 서버에게 Request를 통해 존재하는 리소스에 대해 수정을 요청할 때 사용된다.

PUT과 PATCH 메소드를 구분하는 데에는 Update의 특성 상 두 가지 Update 상황이 존재하기 때문이다. 일반적으로 Update 시에는 데이터 전체를 수정하는 경우와 데이터 일부만을 수정하는 2가지 경우가 있다. 데이터 전체를 수정하는 첫 번째 경우에는 PUT 메소드를 사용하고, 데이터 일부를 수정하는 두 번째 경우에는 PATCH 메소드를 사용한다.

하지만, 일반적으로는 두 가지 모두의 경우를 통틀어 PUT 메소드를 사용한다.

PUT은 데이터 전체 수정(없는 경우 새로 생성) , PATCH는 데이터 일부 수정

📍 DELETE

“DELETE” 메소드는 메소드 이름에서 부터 알 수 있듯 Delete에 해당하는 동작을 나타낸다.

클라이언트가 서버에게 Request를 통해 존재하는 리소스를 삭제하는 요청을 할 때 사용된다.

📍HEAD, OPTIONS, CONNECT

HEAD는 GET과 동일한 방식이지만 서버가 응답에 BODY를 포함하지 않는다.

OPTIONS는 시스템에서 지원되는 메소드 종류를 확인할 수 있다.

CONNECT는 웹 서버에 Proxy 기능을 요청할 때 사용한다.

❓ HTTP Status Code?

Request와 반대로 서버가 클라이언트에게 요청에 대해 Response 할 때에는 서버가 해당 요청에 대해서 어떠한 동작을 했는지 응답해주는 정보를 클라이언트에게 제공한다.

즉, 서버가 주는 요청에 대한 응답 정보를 HTTP Status Code 라고 한다. 서버는 HTTP Status Code와 요청에 대한 응답 데이터를 담은 Response Body와 함께 클라이언트에게 데이터를 전달한다.

HTTP Status Code는 크게 응답에 따라 1XX번대 부터 5XX번대로 나눠지고, 많은 작업을 수행하지 않고도 클라이언트에게 가능한 상세하고 많은 정보를 주는 것을 목적으로 하기 때문에 크게 보면 동일한 응답이더라도 보다 세분화하여 구분된다.

image

📍 1XX (정보 제공용)

100번대 HTTP Status Code들은 정보를 제공하는 용도로 사용된다.

📍 2XX (성공)

200번대 HTTP Status Code는 Request에 대해서 성공했다는 내용을 담은 코드들이다.

  • 200 OK : 일반적인 GET Request가 성공했음을 의미한다.
  • 201 Created : POST Request를 통해 새로운 리소스가 성공적으로 생성되었음을 의미한다.
  • 204 No Content : DELETE Request와 같이 요청에 대해서 로직을 성공적으로 처리했음을 알림과 동시에 반환할 데이터는 없는 것을 의미한다.

📍3XX (리다이렉션)

300번대 HTTP Status Code는 이전 주소로 요청을 하여 새로운 주소로 리다이렉션 해주기 위해 사용되는 코드들이다.

  • 304 Not Modified : 요청한 리소스가 변경되지 않았기 때문에 브라우저에서 캐싱된 데이터를 사용하라는 것을 의미한다.

📍 4XX (클라이언트 에러)

400번대 HTTP Status Code는 클라이언트 측의 Request 오류를 의미한다.

  • 400 Bad Request : 클라이언트 단에서 요청한 정보가 잘못 된 경우를 의미한다. 서버가 구체적인 이유를 모르거나, 잘못된 파라미터를 보낸 경우이다.
    • ex) 회원 정보 필수 값으로 이름과 이메일을 보내야 하는데 이름만 온 경우 필수 정보인 이메일이 오지 않았으므로 잘못된 요청이다.
  • 401 Unauthorized : 해당 정보를 인증할 키가 필요하지만 전달하지 않거나 잘못된 키를 전달한 경우를 의미한다.
  • 403 Forbidden : 인증은 되었지만, 해당 리소스에 접근할 권한이 없는 경우를 의미한다.
  • 404 Not Found : 존재하지 않는 리소스에 대해 요청한 경우를 의미한다.
    • ex) 사용자 API가 있고 쇼핑카트 API가 없는데 클라이언트가 쇼핑카트 API를 호출한 경우
  • 409 Conflict : 최신 리소스가 아닌데 업데이트 하는 경우를 의미한다.

401 Unauthorized는 인증이 되지 않은 사용자, 403 Forbidden은 인증이 된 사용자지만 리소스 접근은 불가능한 사용자

📍 5XX (서버 에러)

500번대 HTTP Status Code는 서버 측의 오류를 의미한다. 서버 에러를 표현함으로 써 클라이언트가 자신의 Request에 대한 에러가 아님을 파악할 수 있다.

  • 500 Internal Server Error : 클라이언트가 서버 쪽으로 Request한 것은 정확히 요청되었으나, 서버 쪽에서 DB Connection, 예외 처리 문제 등과 같은 경우로 에러가 난 것을 의미한다.

📄 References

프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1 : https://joshua1988.github.io/web-development/http-part1/

10 분 안에 HTTP 상태 코드 배우기 : https://www.youtube.com/watch?v=wJa5CTIFj7U

HTTP 응답 코드 종류 && HTTP 메소드 종류 : https://gyrfalcon.tistory.com/entry/HTTP-응답-코드-종류-HTTP-메소드-종류

**HTTP란 무엇인가? :** https://velog.io/@surim014/HTTP란-무엇인가#status-code-상태-코드

profile
백엔드 개발자 지망생입니다!

0개의 댓글