Hyper Text Transfer Protocol, 우리가 흔히들 말하는 HTTP의 풀 네임이다. 영어 그대로 해석 해 보면 Hyper Text를 전달하는 규약(프로토콜) 이다.
주로 HTML 문서를 주고 받는 데 쓰인다. (HTML에 대한 이야기는 추후 올리도록 하겠다.)
우선 무작정 HTTP라는 내용에 대해 이야기 하기전에 알아야 할 사실이 있다. 프로토콜이라는 개념 그 자체다.
프로토콜이라는 단어 그 자체는 규약이라는 뜻을 가지고 있다. 한자를 보면 알겠지만 규칙을 약속했다는 의미다.
예를 들어서 학교에서 선생님과 수업을 하는데 선생님께서 이렇게 말씀을 하셨다고 치자.
"질문이 있으면 손을 들고 선생님을 부르세요."
만약 질문이 생겼는데 손을 들고 선생님을 부른 게 아니라 그자리에서 일어나서 바로 질문을 해버린다면 어떤 일이 일어날까? 선생님의 성질이 더럽다면 수업을 끊어먹은 것에 대한 죄를 물을 것이다.
여기서 손을 들고 질문한다 라는 것은 학생과 선생 사이에 통신 프로토콜이라고 할 수 있다. 규칙을 어겼으니 제대로 통신이 되겠는가?
HTTP는 수 많은 통신 프로토콜 중 하나다. HTTP든 HTTPS든 FTP, Telnet, POP3, SMTP, SSH, SSL... 컴퓨터 네트워크 수업 시간에 많이들 들었던 프로토콜들이고 이러한 프로토콜들을 통해 컴퓨터가 통신을 한다. 무작정 컴퓨터에다 대고 신호를 쏘는 게 아니라 프로토콜에 맞게 신호를 보내고 그 신호를 수신한 측에서도 서비스를 제공 해 주는 것이다.
HTTP는 특히 웹 분야에서 상당히 중요하다. HTML 데이터를 전송시켜야 하니까.
본론으로 들어가서 HTTP에 대해 정리 해 보도록 하겠다.
HTTP는 80번 포트를 사용하는 프로토콜이다. 클라이언트와 서버 사이에서 사용되고 Request(요청)과 Response(응답) 으로 나뉜다.
여기서 말하는 클라이언트는 웹 브라우저를 생각하면 된다. 우리가 특정 사이트에서 검색 버튼을 누르거나 로그인 버튼을 누르면 서버에 Request를 보내는 것이고, Request 데이터를 보고 서버는 그 결과를 Response 데이터를 통해 전달한 후 클라이언트는 그 데이터를 통해 서비스를 제공하게 된다.
우선 Request 메시지에서는 요청하는 내용, 헤더가 전달된다.
요청 내용은 메소드 + 데이터 형태로 구성되어있다. HTTP 메소드에 대한 내용은 길게 설명하지 않겠다. 추 후 Restful API 에 대한 글을 쓸 때 더욱 자세히 다루겠다.
흔히 우리가 GET, POST등 Restful API를 구축할 때 입력하는 그 키워들 맞다. 모두 HTTP 메소드들이다.
Response 메시지에는 상태 표시 행, 응답 헤더필드, 기타 메시지들로 이루어져있다. 다음 예시는 www.example.com 에서 데이터를 요청하는 예시다. 아래의 위키백과 문서에서도 확인 할 수 있다.
출처 : https://ko.wikipedia.org/wiki/HTTP
GET /restapi/v1.0 HTTP/1.1
Accept: application/json
Authorization: Bearer UExBMDFUMDRQV1MwMnzpdvtYYNWMSJ7CL8h0zM6q6a9ntw
Get 메소드를 통해 클라이언트가 데이터를 요청하였다.
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
적절한 프로토콜에 맞는 Request가 전달되었으므로 서버에서는 이 GET 메소드에 대한 API 코드가 실행되어서 결과값을 위와 같이 Request 메시지에 전달 해 준다.
HTTP/1.1 200 OK 메시지에서 확인할 수 있듯 요청은 정상 처리되었고 Date부터 Connection 까지의 메시지가 응답 헤더필드라고 하는 것들인데, 이 Response 메시지가 언제 생성되었고 어떤 형태인지에 대한 내용들이 서술 되어 있다. 그 아래에 있는 HTML문서는 요청한 페이지에 대한 HTML문서다.
우리가 흔히 웹페이지에 에러가 났을 때 404 Not found나 502 Bad Gateway 메시지를 보게 된다. 모든 코드에 대해 서술하지는 않겠다. 너무 많으니까.
하지만 5가지 클래스에 대해서는 알아야한다.
1. 1xx(정보) : 요청을 받았으며 프로세스를 계속 해야한다는 의미.
2. 2xx(성공) : 요청이 성공적으로 처리되었음을 의미한다.
3. 3xx(리다이렉션) : 요청 완료를 통해 추가적인 작업이 필요하다는 의미.
4. 4xx(클라이언트 오류) : 클라이언트 쪽에서 잘못된 요청을 했다는 의미.
5. 5xx(서버 오류) : 서버가 유효한 요청에 대해 처리하지 못했다는 의미.
앞에 숫자만 알면 일단은 상태의 의미를 짐작 할 수 있다.
자세한 내용은 https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C?tableofcontents=1
웹개발의 기초 지식 중 하나인 HTTP에 대해 알아 보았다. HTTP를 통해 데이터를 요청하고 요청받은 데이터를 처리해서 전달 해 주는 것. 이게 큰 틀로 보았을 때 클라이언트와 서버사이드 개발자들이 개발 해 주어야 하는 기능들이다. 물론 이게 다가 아니다. 아주 기초적인 내용 중 하나니까...