- HTTP (HyperText Transfer Protocol) 란?
HTTP는 인터넷에서 데이터를 주고 받기 위한 통신 규약(프로토콜)이다. 웹 브라우저와 웹 서버 사이에 HTML을 주고 받는데 사용된다. (현재는 HTML 뿐만 아니라, JSON이나 Image 파일 등의 데이터 전달도 가능해졌다.)
- Client : 요청(Request)를 보내는 쪽 (웹 브라우저 등)
- Server : Client의 요청에 따라 적절한 응답(Response)을 하는 쪽
- HTTP 프로토콜의 특징
- Client-Server 구조
- 무상태성
- 비연결성
- 단순/확장 가능
1. Client-Server 구조
위 그림에서도 볼 수 있는 구조이다.
Client는 Server에 요청(Request)를 보내고, Server는 요청에 대한 응답(Response)를 Client에게 다시 전달하는 것이다.
2. 무상태성 (Stateless)
무상태성은 Server가 Client의 이전 상태를 저장하지 않는 특징이다.
예를 들자면 다음과 같은 상황이다.
손님 : 이건 처음보는 물건인데 이건 뭔가요?
직원 : 아이패드입니다.
손님 : 이걸로 2개 구매할게요.
직원 : 어떤걸 구매하고 싶으신가요?
손님 : 카드로 결제 하겠습니다.
직원 : 무엇을 얼마나 구매하시겠습니까?
이와 같은 상황을 피하기 위해서는 손님이 다음과 같이 주문해야 할것이다.
손님 : 아이패드 2개를 카드로 결제하겠습니다.
직원 : 결제되었습니다. 감사합니다.
즉, 정확한 정보를 담아서 요청을 해야한다는 것이다. 그러나 처음 상호 작용한 서버와 지속적으로 소통할 필요가 없다는 점에서 서버 확장의 자유가 보장된다.
웹 페이지에서 로그인 등의 기능을 제공한다면 로그인한 사용자의 상태를 지속적으로 유지해야 하기 때문에 브라우저 쿠키, 서버 세션이나 토큰 등이 등장했다. 이에 관한 자세한 내용은 차차 학습할 예정이다.
3. 비연결성 (Connectionless)
Client가 Server에 요청(Request)을 한 뒤, Server로 부터 응답(Response)을 받으면 바로 연결을 종료한다.
불필요한 연결을 지속하지 않아 서버 유지 자원이 감소하고, 서버 유지 자원을 효율적으로 사용할 수 있게 된다.
4. 단순/확장 가능
앞선 특징인 무상태성과 비연결성과 같은 단순한 과정을 통해 HTTP를 활용한 통신이 이루어진다. 특히 무상태성은 서버의 확장에 대해 큰 이점을 제공한다는 면에서 HTTP는 단순하고 확장가는 한 특징을 갖는다.
- HTTP의 요청(Request) 구조
HTTP 요청은 크게 세 가지 요소로 나눌 수 있다.
- Start Line
- Headers
- Body
1. Start Line
- Start Line은 요청 방식(GET, POST 등), 요청을 하는 URL, HTTP 버전 정보로 구성된다.
GET /index.html HTTP/1.1
2. Header
- Header는 클라이언트가 서버에 요청하는 기능에 대한 최소한의 정보가 정리된 요약본이다.
- 세분화하면 General Header, Request Header, Entity Header로 구성되어 있다.
- General Header : 전송되는 컨텐츠에 대한 정보x, 요청이 이루어지는 시간이나 연결 방식 설정 등
- Request Header : Client에 대한 정보(Host, User-agent, Cookie 등)
- Entity Header : 전송되는 컨텐츠에 대한 정보
Host: www.robbie.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36
Accept-Language: en-US,en;q=0.9,ko;q=0.8
3. Body
- Body는 HTTP 요청과 관련된 데이터를 담는다.
- 요청에 따라(GET, DELETE 등) 전송되지 않을 수 있다.
- HTTP 응답(Response) 구조
HTTP 응답도 세 가지 요소로 나눌 수 있다.
- Start Line
- Headers
- Body
1. Start Line
- Start Line은 HTTP 버전, 응답 상태 코드, 성공 여부를 나타낸다.
HTTP/1.1 200 OK
2. Headers
- Header는 서버가 클라이언트에게 응답하는 기능에 대한 최소한의 정보가 정리된 요약본이다.
- 세분화하면 General Header, Request Header, Entity Header로 구성되어 있다.
- General Header : 전송되는 컨텐츠에 대한 정보x, 요청이 이루어지는 시간이나 연결 방식 설정 등
- Response Header : Server의 응답에 대한 정보(Location, Server, Age 등)
- Entity Header : 전송되는 컨텐츠에 대한 정보
3. Body
- Server가 응답한 실제 데이터가 나타난다.
- 데이터는 요청에 따라 HTML 코드, 이미지 파일 등이 포함될 수 있다.
- HTTP Method
HTTP Method는 HTTP 프로토콜을 이용해 서버에게 요청하는 기능(Method)를 의미한다. 이를 통해 Client가 요청하는 목적에 따라 적절한 Method를 선택할 수 있으며, Method는 크게 다섯 가지로 나뉜다.
- GET
- Client가 Server로부터 특정 리소스(HTML 코드, 이미지 파일 등)을 요청할 때 사용한다. - POST
- Server에 데이터를 전송해 새로운 리소스를 생성할 때 사용한다. - PUT
- 기존의 리소스(전체)를 수정할 때 사용한다. - PATCH
- 기존의 리소스(일부)를 수정할 때 사용한다. - DELETE
- 기존의 리소스를 삭제할 때 사용한다.
- HTTP 상태 코드 (Status Code)
HTTP 상태 코드는 Client가 Server에게 요청을 보내고 난 뒤, Server가 Client에게 응답하는 과정에서 발생할 수 있는 상황을 숫자 코드로 정리한 것이다. 상태 코드는 3자리 숫자로 이루어져 있으며, 첫번째(100자리) 숫자를 기준으로 상태에 대한 큰 분류를 한다.
- 1xx (Informational)
- 요청이 수신되었으며 처리 중임을 의미한다. - 2xx (Success)
- 요청이 성공적으로 처리되었음(Server 요청한 데이터 정상적으로 응답)을 의미한다. - 3xx (Redirection)
- Client의 요청을 완료하기 위해서는 Client의 추가적인 조치(페이지 이동, 리다이렉션 등)가 필요함을 의미한다. - 4xx (Client Error)
- Client의 요청에 오류가 있음을 의미한다.
- 대표적인 404 상태 코드는 Client가 요청한 페이지나 리소스를 Server에서 찾을 수 없음을 의미한다. - 5xx (Server Error)
- Server에 오류가 발생했음을 의미한다. 주로 서버 오류나 과부하 등에 의한 상태 코드로 사용된다.
요즘은 개발 학습을 막 시작하는 단계로 이런 저런 지식들을 채워나가고 있다. 학습을 통해 새로운 지식을 습득하는 재미도 있지만, 은연중에 알고있던 404 에러의 의미가 학습하기 이전에 내가 어렴풋이 느끼고 있던 의미와 일치한다는 것을 깨달았을 때의 즐거움도 있었다.
최근 정리한 내용들은 기초적인 지식들이어서 나 스스로 정리하거나 깨우친 점을 담지는 못했지만, 무지성으로 사용하던 작은것들에도 수많은 기술이 담겨있다는 것을 알기 시작했다. 또, 개발을 통해 얻은 편리함으로 더 나은 개발을 하고자 했던 과거의 개발자들의 노력들을 느낄 수 있다. 이런 노력들은 지금도 역시 이어지고 있으며 그 노력들에 함께할 수 있기를 바란다.
댓글