본문으로 건너뛰기

HTTP 프로토콜에 대해서 설명해주세요.

HTTP(HyperText Transfer Protocol)는 HTML과 같은 하이퍼 미디어 문서들을 전송하는데 사용되는 애플리케이션 계층 프로토콜이다. 브라우저와 서버 간의 통신을 위해 설계 되었지만, 다른 목적으로 사용될 수도 있다.

HyperText: 다른 문서나 텍스트로 이동할 수 있는 링크를 담고 있는 텍스트
Transfer: 전송
Protocol: 컴퓨터들 간의 데이터를 전송할 때 지켜야하는 규칙

비연결성(Connectionless)

HTTP는 Connectionless 방식으로 작동한다. 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊는다.

무상태 프로토콜(Stateless Protocol)

HTTP는 통신 시 정보를 한 번씩 주고받은 후 바로 끊는 형태로 처리된다. 이렇게 상태 정보를 저장하지 않는 통신 형태를 스테이트리스(stateless)라고 한다.

GET과 POST 비교

우선 GET 방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 URL에 담겨져서 전송된다. 때문에 URL 상에 ? 뒤에 데이터가 붙어 request를 보내게 된다. 이러한 방식은 URL이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 URL상에 노출되므로 GET 방식은 적절하지 않다.

GET은 서버에게 여러번 요청을 하더라도 동일한 응답이 돌아와야 한다.(멱등성)

POST 방식의 request는 HTTP Request Message의 Body 부분에 데이터가 담겨져서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다. (하지만 보안적인 측면에서는 암호화를 고려하지 않는 이상 고만고만하다.)

그렇다면 이러한 특성을 이해한 뒤에는 어디에 적용되는지를 알아봐야 그 차이를 극명하게 이해할 수 있다. 우선 GET은 가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. SELECT 적인 성향을 갖고 있다고 볼 수 있는 것이다. 반면에 POST는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다.

부수적인 차이점을 좀 더 살펴보자면 GET 방식의 요청은 브라우저에 Caching 할 수 있다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면 기존에 caching 되었던 데이터가 응답될 가능성이 존재한다. 때문에 목적에 맞는 기술을 사용해야 하는 것이다.

Reference