클라이언트와 서버가 통신할 때 하이퍼텍스트(HTML,CSS,JS 등등)을 교환하는 규약을 말한다.
이 규약이 없으면 클라이언트와 서버가 데이터를 교환할 수가 없다.
클라이언트가 어떠한 요청을 하면 그에 대한 응답을 서버는 해야 한다.
이때 서버는 클라이언트의 상태를 보존하지 않고(무상태 프로토콜) 연결을 계속 유지 하지도 않는다(비 연결성).
이러한 특징을 가지는 이유를 아래에서 알아보자.
간단하게 말하면 서버는 클라이언트들의 상태를 저장하지 않는 것이다. 즉, 매번 요청을 할때마다 필요한 상태들을 클라이언트에서 보내주어야 서버는 이해하게 된다. 아래의 상담원(서버)과의 예시를 보자.
A(클라이언트) : 안녕하세요? A 입니다.
상담원A(서버) : 반갑습니다. A님. 무엇을 도와 드릴까요?
A(클라이언트) : B에게 5000원을 송금하고 싶습니다.
상담원B(서버) : 성함이 어떻게 되세요?
위의 예시와 같이 상담원B의 경우 A <-> 상담원A 의 정보 교환을 알지 못한다. 그래서 상담원 B는 A의 성함을 알지 못한다. 이런 상황을 피하려면 한번에
'제 이름은 A이고 B에게 5000원을 송금하고 싶습니다'
와 같이 필요한 상태를 한번에 보내야 할 것이다.
이러한 장점은 무엇일까? 먼저 서버에 부담을 덜어준다. 모든 클라이언트의 정보를 담고 있는것은 서버에 부담이 되기 때문에 필요할 경우에 클라이언트에서 보내주는것이 서버 입장에선 편하다. 그래서 보다 많은 클라이언트와 통신 할 수 있다.
하지만 단점의 경우 위에서 말했듯이 매번 클라이언트가 서버에게 상태를 보내야 하는 것이다.
그래서 매번 필요한 자주쓰이는 상태는 서버에 저장하고 상대적으로 덜 쓰이는 것은 클라이언트가 보내주는 것이 좋아 보인다.
HTTP 1.0 기준 HTTP는 연결을 유지하지 않는 모델이다.
왜 연결을 유지 하지 않을까? 위의 상담원 예시를 확장 해보자. 만약 연결성을 유지 한다고 가정하자.
A(클라이언트) : 안녕하세요? A 입니다. B에게 5000원을 송금하고 싶습니다.
상담원A(서버) : 반갑습니다. A님. B에게 5000원이 송금 되었습니다.
A(클라이언트) : 감사합니다. (전화는 계속 유지된다.)
(1시간 뒤 )
A(클라이언트) : B에게 10000원을 송금하고 싶습니다.
위의 예시와 같이 A는 다음 요청이 1시간 뒤에 발생하는데 연결성을 유지 될 경우에 상담원 A는 아무 일도 하지 못하고 A의 응답만 기다려야하는 비효율성이 나타난다. 따라서 연결성을 유지 하지 않고 필요할 경우에 다시 연결을 하는 방식이다. (이는 컴퓨터 구조시간에 배운 멀티 프로그래밍과 비슷하다고 생각한다. 진행중인 프로세스가 블록 상태가 된 경우 CPU는 다른 프로세스를 수행한다.)
그런데 우리 주소창을 보면 http가 아닌 https로 되어 있는 것을 볼 수 있다. 이건 왜그럴까??
예전보다 보안이 훨씬 중요해진 요즘 보안은 필수이다. 하지만 http의 프로토콜의 경우 서버에서 부터 클라이언트로 전송되는 정보가 암호화되지 않는것이다. 만약 이것이 도난 당하면 큰일이기 때문에 SSL(보안 소켓 계층)을 사용하여 서버와 클라이언트의 정보 교환을 암호화 한다.
또한 구글에서도 검색 순위 결과에 약간의 가산점을 준다고 하는데 이는 구글에서도 HTTPS의 보안성을 강조함을 알 수 있다. 그리고 유저 또한 보안상 안전한 사이트를 방문할 수 밖에 없다.
참고
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/
https://blog.wishket.com/http-vs-https-%EC%B0%A8%EC%9D%B4-%EC%95%8C%EB%A9%B4-%EC%82%AC%EC%9D%B4%ED%8A%B8%EC%9D%98-%EB%A0%88%EB%B2%A8%EC%9D%B4-%EB%B3%B4%EC%9D%B8%EB%8B%A4/