우리가 웹페이지에 진입할때 앞에 붙는 HTTP는 뭘까?
필자는 대학때 네트워크 관련된 수업을 전혀 듣지 않아서 얼마전에도 전혀 모르는 상태였다
이 글은 필자가 공부를 하며 개인적으로 이해한 HTTP에 관하여 이야기 해볼려고 한다.
일단 HTTP는 프로토콜이라고 한다.
HTTP 프로토콜
자, 그럼 대체 '프로토콜(protocol)은 뭘까 싶다.
이에 관하여 예시를 들어보자면, 우리가 이력서를 작성할때
만약 전화번호를 입력해야한다면, 전화번호: 010-xxxx-xxxx 이런식으로 입력할것이다.
우리는 이처럼 사람들사이에서 이러한 양식을 기반으로 "전화번호"라는 단어 뒤에 나오는 숫자들의 조합에 한해서 "전화번호"라고 인식하도록 '약속'을 맺었기 때문이다.
이게 필자가 이해한 프로토콜의 개념이다.
즉, 네트워크상에서 데이터를 주고 받는 방식에 대한 '약속'과 일종의 '규칙'인것이다.
HTTP의 역할
그럼 이제 http가 무엇인지 알았으니 이게 정확히 무슨 역할을 하는지, 또 어떤 특징이 있는지 살펴볼것이다.
앞서 밝힌 것처럼 http는 네트워크상에서 데이터를 주고 받는 방식에 대한 '약속'이다.
이를 웹에 대입하면 http는 우리가 접속하고자 하는 웹사이트에 대한 요청과 전송을 받을 수 있도록 한다.
예를 들어, http://웹사이트.com 으로 우리가 접속하고자한다면 이 웹사이트에 대한 정보를 가지고 있는 서버는 http프로토콜을 통해 우리가 원하는게 이 웹사이트에 대한 문서라는 것을 인식하고 우리에게 전송하는 것이다.
HTTP의 주요 특징
이제 http의 주요 특징에 대해 살펴보겠다.
http는 다음과 같은 특징을 가진다.
1. 무연결성(Connectionless)
이건 무슨 말이람...싶겠지만 생각보다 그 의미는 간단하다
한마디로 http는 한 세션당 요청을 보내고 받는게 끝이라는 것이다.
우리가 특정 웹페이지에 진입할때 http://뭐시기.com를 입력하면 서버는 이에 대한 웹페이지 문서를 클라이언트(우리의 웹브라우저)에게 전송하고 이게 끝이라는 것이다.
2. 무상태성(Stateless)
또 뭔가 어려운 용어가 등장했다.
무상태성은 HTTP 프로토콜이 클라이언트와 서버 간의 각각의 요청과 응답을 독립적인 트랜잭션으로 처리한다는 의미이다.
좀 더 쉽게 말하자면 이전 통신 정보를 기억하지 않는다는 것이다.
예를 들어, 순수하게 http만을 이용한다고 하면 우리가 로그인을 하고 특정 페이지에 진입했을시, 다른 페이지로 이동했다 다시 돌아오게 되면 우리가 인증(로그인)했던 것을 기억하지 않기에 초기화된다는 것이다.
그러면 새로운 페이지로 이동할때마다 매번 인증을 해야한다는 건가요?(몹시 불편) -> 이 부분을 보완하기 위해 쿠키와 세션이라는 개념이 등장하는데 이는 나중에 다뤄보겠다.
3. 클라이언트-서버 모델을 따른다
이 부분은 말이 어렵지 간단하다
말 그래도 우리가 특정 웹사이트에 진입하려고 할때 http://뭐시기를 입력하는 것은 사실상 이 웹사이트에 대해 서버에 GET 요청을 날리는 일이라는 의미다.
http 프로토콜을 기반으로 클라이언트는 서버에 요청하고, 서버는 이 요청에 대한 응답(ex. html 문서)를 제공한다.
즉, 이는 반이중 통신이며, http프로토콜을 기반으로 동작하는 웹은 진정한 의미의 양방향 통신이 불가하다.
이 부분을 보다 쉽게 설명하면 무조건 클라이언트는 서버에 요청을 하고 서버는 이에 대한 응답을 제공하는 형식이다보니
진정한 의미의 '실시간'통신은 불가능하다는 의미다.
물론, 2024년을 사는 '실시간' 스트리밍등의 서비스를 일상적으로 누리고 있기에 이게 대체 무슨 말인가 싶겠지만, 이는 결국 서버가 클라이언트측에서 데이터의 업데이트가 필요할때 '주기적'으로 데이터를 전송하는 방식으로 작동하기 때문이다.
그리고 이런 방식을 '폴링', '롱폴링'이라고 부른다.
폴링: 폴링은 클라이언트가 '주기적'으로 서버에 요청을 보내어 최신 데이터를 받아오는 방식이다. 예를 들어, 클라이언트는 3초마다 "새로 업데이트된 사항이 있나?라고 서버에 물어보고, 서버는 그때마다 '현재 상태'에 기반하여 클라이언트에 데이터를 주기적으로 전송함으로서 사용자입장에서는 마치 '실시간'으로 이것이 이루어진다고 느끼게 되는것이다. 하지만 업데이트가 없어도 불필요하게 많은 요청이 발생할 수 있어 서버에 부담이 될 수 있다.
롱폴링: 롱폴링은 이러한 단점을 보완한 폴링의 변형이다. 폴링이 '주기적'으로 요청을 보낸다는 것에만 초점을 맞췄다면 롱폴링은 '주기적'으로 요청을 보냄과 동시에 서버에 새로운 데이터 (변동사항)이 있었는지를 확인한다. 그리고 변동사항이 있기전까지 요청을 잠시 보류하고, 새로운 데이터가 발생했을때, 그때서야 요청에 대한 응답(새로운 데이터)을 전송한다.
4. TCP/IP 프로토콜을 따른다
오우쉣, 이건 또 무슨 말인가
TCP/IP? IP는 들어봤는데 TCP는 뭔가 싶다
괜찮다 필자또한 처음 들었을때 같은 심정이었다.
TCP/IP에 관해서는 나중에 자세히 다뤄보겠다. 이 글에서는 그냥 흠 그렇군하고 넘어가주길 바란다.
이번글에서 http가 대략적으로 무엇인지 알았으니 다른 글에서는 http의 버전별 특징과 보안 취약점, 그리고 이를 보완한 https(우리가 현재 일상적으로 쓰고 있는)프로토콜에 대해서 알아보겠다
'네트워크' 카테고리의 다른 글
[네트워크] 도메인 입력시 발생하는일에 관하여 (0) | 2024.04.08 |
---|---|
[네트워크] HTTP의 보안 취약점과 HTTPS (0) | 2024.04.08 |
[네트워크] UDP란? (1) | 2024.04.07 |
[네트워크] HTTP의 버전별 특징 (0) | 2024.04.07 |
[네트워크] TCP/IP란? (2) | 2024.04.07 |