글 작성자: 만렙개발자

너~무~나~ 오래전에 배워서 까먹은 개념을 다시 끄집어내어 찾아서 정리해본다.

 

HTTP protocol이란 무엇인가?

 

1. HTTP는 무엇의 약자?

 

Hypertext Transfer Protocol

 

'hyper'라는 말, 요즘에는 유치해서 많이 안쓰는 듯 하지만, '예로부터' hyperlink와 같이, 일반 텍스트가 아니라 연결되는 텍스트(혹은 그림 등)을 말한다. 우리가 유치하게 느끼는 hyper는 '초월'의 의미가 이날까 한다. 사실 여기서의 hyper는 '건너편의'라는 의미를 갖는다고 생각된다. 조금 더 명확히 하면, hyperlink와 hypertext는 구분된다.

 

hyperlink는 1965년에 고안된 용어로, 특정 위치를 연결하고 가리킬 수 있는 참조 고리(link)이다.

hypertext는 하이퍼링크를 통해 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다. 

 

사실 그렇게 차이가 있는지는 모르겠다. hypertext, HTTP를 제안한 사람은 인터넷의 아버지라 불리우는 Tim Berners-lee 이다. 

 

ref: https://qz.com/1568970/tim-berners-lee-on-founding-the-world-wide-web-30-years-ago/

Transfer는 주고 받는 다는 의미를 갖는다. 즉, HTTP는 HyperText를 주고 받는 규약이다.

 

2. Protocol ?

프로토콜, 규약이라는 말은 우리가 흔히 쓰는 말은 아니다. 첩보 영화나 전쟁 영화에서 통신하는 중에 영어 대사로 protocol을 들어본 적은 한번쯤 있을 것이다. 프로토콜은 통신을 주고 받기 위해서 정해놓는 규칙같은 것이다.

 

통신을 생각해보자. 통신을 주고 받기 위해서는, 이 신호가 어떤 정보를 담고 있는지, 어떤 형식으로 되어있는지, 신호를 보내는 사람이 위험한 사람은 아닌지, 신호가 중간에 공격을 받거나 끊겨서 손실된 것이 있는지 등 다양한 정보가 필요하다. 이러한 것을 사전에 미리 정해놓은 것이 바로 프로토콜이다.

 

특별히 컴퓨터와 컴퓨터 사이, 인터넷으로 연결된 네트워크상에서 hypertext를 주고받는 것을 위해 만들어진 규약이 바로 HTTP protocol이다.

 

다른 프로토콜의 예로는 FTP(File Transfer Protocol), POP3(Post Office Protocol version 3), SMTP(Simple Mail Transfer Protocol), SSH(Secure Shell) 등이 있다.

3. HTTP Protocol

그럼 구체적으로 어떤 규약일까?

 

1) 기본적으로는 주고 받는 작동방식을 server-clinet 관계로 한다.

 

client가 보내는 요청을 request,

server가 받고 처리하여 보내는 응답을 response라고 한다.

 

2) connectless와 stateless의 특징을 갖고 있다.

 

한번의 연결로 한번의 요청/응답이 이루어진다.

즉, 한번의 요청이 끝나고, 두번째 요청을 보낼 때 새로운 연결을 한다.

이러한 특징을 connectless라고 한다.

 

한번 연결해놓고 여러번 요청을 주고 받는게 좋을 상황도 있기 때문에 이것은 단점이 될 수 있다.

이전의 상태, 정보를 유지하기 위해서 cookie를 이용한다. (cookie는 서버와 클라이언트의 상태정보를 담고 있다.)

이전 상태의 정보를 갖고 있지 않는 특징을 stateless라고 한다.

 

3) 대표적인 메소드로 GET과 POST가 있다.

 

GET는 어떤 데이터를 가져오는데만 사용하고,

POST는 값이나 상태를 바꾸기 위해서 정보를 보낼 때 사용한다.

 

GET은 URL에 노출되기 때문에 중요한 정보를 담으면 안되고,

POST는 숨겨서 보낼 수 있다.

 

GET은 URL에 담겨야 하기 때문에 텍스트 길이의 제한이 짧지만, POST는 용량의 제한만 받기 때문에 제한이 길다.

4. 맺음

HTTP는 다양한 버전을 갖고, 발전하고 있다. '표준' HTTP/1.1도 계속해서 개선되어 업데이트되었다.

HTTP는 비단 웹서버 뿐만 아니라, RESTful API와 같이 서버/클라이언트 관계를 갖는 모든 시스템에서 활용되고 있다.