HTTP 는 Hyper Text Transfer Protocl의 약자로 말 그대로 HyperText, HTML같은 파일을 컴퓨터끼리 주고받을 수 있도록 하는 소통방식, 즉 컴퓨터끼리의 소통을 위한 규약이다. HTTP 통신의 특징과 Request, Response 구조에 대해 이해하고 대표적인 status code에 대해 짚고 넘어가자.
HTTP는 지켜야 하는 약속이고, 약속은 조항을 따르기 마련이다. HTTP가 어떤 조항과 특징을 지니고 있는지 살펴보자.
Request/Response
HTTP의 통신의 핵심은 요청과 응답이다. HTTP의 T가 Transfer인 만큼, 보내는 주체는 받는 주체에게 "메시지"로 요청을 보내고, 받는 주체는 보내는 주체에게 "메시지"로 응답을 보낸다. 어찌보면 단순한 소통방식이지만 아주 중요한 특징이다.
Request
Request와 Response 모두 사실 단순한 메시지에 불과하다. HTTP Request는 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다. 이 메세지의 구조는 크게 세 부분으로 구성되어있다.
-
Start line : 요청의 첫번째 줄에 해당한다.
- HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 쓰임
- Request target: 해당 request가 전송되는 목표 url
- HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임
-
Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분
- key: Value 값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
- Host, User-agent, Content-type 등을 담고있다.
-
Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST다.
Response
HTTP Response 또한 Request와 마찬가지로 크게 세 부분으로 되어있다.
- Status line : 응답의 상태 줄이다. 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다.
- HTTP Version : 요청의 HTTP버전과 동일
- Status Code : 응답 메세지의 상태 코드
- Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트
- Headers : 요청의 헤더와 동일하게 응답의 추가 정보(메타 데이터)를 담고있는 부분
- Body : 요청의 Body와 일반적으로 동일
Stateless
문자 그대로 State(상태)+Less(없음)을 의미한다. 각각의 HTTP 통신(Request/Response)은 독립적이기 때문에 과거의 통신내용은 알지 못하고, 따라서 매 통신마다 필요한 모든 정보를 담아 요청해야 한다.
따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요에 의해 만들어졌다.
HTTP Request Method
위에서 Request의 Start line에서 HTTP Method는 보통 GET, POST, DELETE 세 가지가 사용된다고 하였다. 각 메소드가 가진 의도를 간단하게 살펴보자.
GET
- 이름 그대로 어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용하는 메소드
- 데이터를 받아오기만 할 때 사용된다.
- 가장 간단하고 많이 사용되는 HTTP 메소드 (사실 우리가 웹페이지를 띄울 때 필요한 정보들을 모두 GET메소드로 요청을 보내서 받아온 응답을 화면에 띄우는 것이다)
장바구니에 담은 제품을 조회한다.
POST
- 데이터를 생성 / 수정 할 때 주로 사용되는 메소드
- 데이터를 생성 및 수정 할 때 많이 사용되기 때문에 대부분의 경우 요청에 body가 포함되서 보내진다.
장바구니에 맘에 드는 상품을 담는다.
DELETE
- 메소드의 이름에서 유추 가능하듯, 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드
장바구니에서 제품을 삭제한다.
Status Code
실제 프로젝트를 진행할 때 가장 많이 보게 될 응답의 상태 코드 들이다. Status Code의 숫자에 각각 의미가 내포되어 있다. 이 Status Code 만 보아도 응답이 제대로 됐는지 안 됐는지를 파악할 수 있다.
200: OK
- 가장 자주 보게되는 Status Code
- 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드
- 우리는 모두 200 OK 를 원한다
201: Created
- 무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code
- 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드
400: Bad Request
- 해당 요청이 잘못되었을 때 보내는 Status Code
- 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드
ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우
401: Unauthorized
- 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미
ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없음
403: Forbidden
- 유저가 해당 요청에 대한 권한이 없다는 뜻
- 접근 불가능한 정보에 접근했을 경우
ex) 오직 유료회원만 접근할 수 있는 데이터를 요청 했을 때
404: Not Found
500: Internal Server Error
- 서버에서 에러가 났을 때의 Status Code
- API 개발을 하는 백엔드 개발자들이 싫어하는 코드