본문 바로가기
IT 개인 공부/Web

HTTP vs HTTPS

by Libi 2021. 7. 23.
반응형

우리가 어떤 웹사이트에 접속하려고 URI를 타이핑하다 보면 항상 앞에 http:// or https://라는 것이 추가되는 것을 확인할 수 있다. 그렇다면 http는 어떤 것을 의미하는 걸까?

 

HTTP는 Hypertext Transfer Protocol의 약자로 TCP/IP 위에서 작동하는 인터넷상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다.

서버/클라이언트 모델이란 클라이언트에서 서버에게 요청을 보내면 서버는 요청을 처리해서 클라이언트에게 응답을 해주는 방식을 뜻한다.

영어를 그대로 해석하면 하이퍼텍스트를 전송하는 프로토콜이다. 하이퍼텍스트는 노드(Node)와 링크(Link, 하이퍼링크)로 구성된 텍스트로써 링크를 통해 전달하는 텍스트를 의미한다. HTTP로 보낼 수 있는 텍스트는 HTML 문서, 이미지, 동영상, 오디오 등 다양한 종류가 존재한다.

HTTP 프로토콜의 특징은 상태가 없다(Stateless)는 것이다. 이게 무슨 말이냐면 데이터에 대한 상태(기록)가 없기 때문에 매번 요청하는 데이터는 독립적인 데이터라는 뜻이다.

이러한 특징 덕분에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄여 성능을 향상할 수 있다.

그렇다면 HTTPS는 무엇일까? 한번 생각해 보면 HTTP + S 형태니 기존의 HTTP에 무언가를 추가하여 개선한 프로토콜이라고 짐작할 수 있다. 한 번 알아보도록 하자.

 

HTTPS는 Hypertext Transfer Protocol Secure의 약자로 기존의 HTTP 프로토콜에 보안을 위한 SSL(Secure Socket Layer)과 TSL(Transport Layer Security)을 추가한 프로토콜이다.

그럼 HTTP에는 어떠한 보안 문제점이 있을까?

HTTP는 TCP/IP 위에서 동작하는 프로토콜이라고 하였다. TCP/IP 구조의 통신은 전부 통신 경로 상에서 패킷을 엿보거나 도청할 수 있는 문제점이 있다.

또한 HTTP는 평문으로 통신하는 프로토콜이기 때문에 패킷의 의미까지 파악이 가능하기 때문에 이는 보안상으로 큰 문제가 있다. 이를 해결하기 위해서 보안 프로토콜을 추가하여 패킷을 암호화하여 해결하도록 한다.

두 번째는 HTTP은 상태가 없다고 하였다. 통신하는 상대를 확인하지 않으며 알 수 있는 방법도 없기 때문에 통신 상대측에서 위장이 가능하게 되고 이는 보안상 문제가 될 수 있다. 이를 해결하기 위해 클라이언트는 SSL 인증서를 사용하여 통신 상대를 인증하여 확인한다.

 

마지막으로 역시 HTTP는 상태가 없기 때문에 전송하는 정보의 정확성을 보장할 수 없다. 패킷이 전송되는 도중에 변조되더라도 클라이언트나 서버 측은 이를 알 방법이 없다. 이를 해결하기 위해 TSL 프로토콜을 사용하여 보안을 유지한다.

TSL은 데이터 무결성을 제공하기 때문에 데이터가 전송 중에 변조되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능을 제공한다.

이러한 HTTP의 보안상의 문제점을 해결하기 위해 보안 프로토콜을 추가한 것이 바로 HTTPS이다. 그렇다면 장점이 더 많은 HTTPS만 사용하는 것이 아니라 왜 아직까지 HTTP를 사용하고 있을까?

당연한 소리지만 프로토콜이 제공하는 기능이 많을수록 헤더 필드가 복잡해지며 무거워지기 때문에 성능이 줄어든다.

따라서 보안이 중요한 상황에서만 HTTPS를 사용하여 통신하는 것이다. 다만, HTTP 2.0이 발전되면서 HTTPS의 속도가 HTTP보다 빠르다고 한다.

또한, 예전에 구현된 웹사이트들중에서 HTTP만 허용하고 HTTPS를 허용하지 않는 웹사이트들도 아직까지 많이 존재하기 때문이다.

 

반응형

'IT 개인 공부 > Web' 카테고리의 다른 글

웹 서버(Web Server) vs WAS(Web Application Server)  (0) 2021.07.24
HTTP 메서드  (0) 2021.07.24
쿠키(Cookie) vs 세션(Session)  (0) 2021.07.24
MVC 패턴  (0) 2021.07.23
HTTP 상태 코드  (0) 2021.07.23

댓글