[Http&Network Basic] 1장 웹과 네트워크의 기본

2020. 6. 15. 00:27책/Http&Network Basic

나에게 대학교 4년을 공부하면서 가장 재밌었던 과목들을 뽑으라고 한다면

가장 먼저 생각날 과목은 컴퓨터 네트워크 과목이다. 

프로그래밍 그 자체에 흥미가 생겼을 뿐, 확실한 진로를 잡지 못했던 나에게

웹 개발자라는 목표가 생기도록 계기를 마련해준 과목이기 때문이다.

KOCW라는 여러 대학의 강의들을 접할 수 있는 플랫폼을 통해서

각 대학의 네트워크 과목을 반복해서 수강할 만큼 그 당시에는 열정이 넘쳤던 것 같다.

네트워크 공부를 한지 꽤 오랜 시간이 흘러서, 다시 한번 내용을 훑어보고 싶어 책을 찾고 있었는데

이 책을 추천받아서 정리하게 되었다. 내용 자체가 깊지 않고 키워드 중심의 책이기 때문에

내용이 두서없을 수 있지만 두고두고 훑어보기에 좋은 정리가 될 수 있으면 좋겠다.

 

1. 웹은 HTTP로 나타낸다.

웹 브라우저 주소 입력란에 URL을 입력하면 원하는 웹 페이지를 얻을 수 있다는 것은 비전공자들도 아는 사실이다. 하지만 이러한 과정이 어떻게 이루어지는 것일까? 웹 브라우저는 주소 입력란에 URL에 의지해서 웹 서버로부터 리소스라고 불리는 파일 등의 정보를 얻어오는 것이고 그것이 우리가 보는 웹 페이지인 것이다.

이때, 서버에 의뢰를 하는 웹 브라우저 등을 클라이언트라고 부르며 해당 웹 페이지를 내어 주는 곳을 서버라고 할 수 있다. 이렇게 클라이언트에서 시작하여 서버까지의 일련의 흐름을 결정하고 있는 것은 웹에서 HTTP(Hyper Text Transfer Protocol)이라 불리는 프로토콜이다. 

 

2. HTTP의 탄생 배경

HTTP는 1989년 3월에 탄생했다고 한다. HTTP의 탄생 배경을 살펴보려면 웹의 등장에 대해서 먼저 아는 것이 좋다. 웹이 처음 생겨난 이유는 멀리 떨어져 있는 동료 연구자와 지식을 공용하기 위해서라고 한다. 최초로 고안한 것은 여러 문서를 상호 간에 관련짓는 하이퍼텍스트에 의해 상호 간에 참조할 수 있는 WWW(World Wide Web)의 기본 개념이 되는 것이었다. 이러한 WWW를 구성하는 기술로서 HTML, HTTP, URL 세 가지가 제안된 것이다. (각각 문서 기술, 문서 전송, 문서의 주소 지정에 사용된다.) 

 

즉, HTTP는 문서를 전송하기 위해 사용되는 어떠한 약속이라고 이해하면 되겠다. 현재 HTTP/1.1 버전이 가장 널리 사용되고 있으며 HTTP/2.0이 차세대를 담당하기 위해 책정되어 있지만 널리 사용되기까지는 시간이 걸릴 것으로 보인다. HTTP는 등장 당시에는 주로 텍스트를 전송하기 위한 프로토콜이었지만, 프로토콜 자체가 상당히 심플해서 여러 가지 응용 방법을 고려해 기능이 계속 추가되었다. 지금은 웹이라는 틀을 넘어서 다양하게 사용되는 프로토콜이 되었다.

 

3. 네트워크의 기본은 TCP/IP

HTTP를 이해하기 위해서는 TCP/IP 프로토콜에 대해 어느 정도 알아야 한다. 왜냐하면 인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있기 때문이다. (HTTP도 그중 하나이다.) TCP/IP는 프로토콜의 집합이라고 할 수 있는데, 프로토콜의 정의를 먼저 내려보자. 프로토콜이란 간단하게 말하면 '약속'이다. 예를 들어 서로 다른 하드웨어와 운영체제 등을 가진 두 컴퓨터가 서로 통신하기 위해서는 케이블 규격, IP 주소 지정 방법, 웹을 표시하기 위한 순서 등이 서로 같아야 한다. 이렇게 서로 다른 두 기기가 네트워크 통신을 하기 위한 조건을 프로토콜이라고 할 수 있다. TCP/IP는 이러한 여러 가지 조건들의 집합 즉, 프로토콜들의 집합이라고 할 수 있다. 

 

TCP/IP에서 가장 중요한 개념은 아무래도 Layer이다. TCP/IP는 크게 4개의 계층으로 나누어져 있는데 ( 수업에서는 7 Layer 배웠지만 여기서는 크게 분류한 것 같다.) '애플리케이션 계층', '트랜스포트 계층', '데이터링크 계층'. '링크 계층' 이 그것이다. 

이렇게 계층화시킨 것은 엄청난 장점을 갖는다. 먼저, 인터넷이 하나의 프로토콜로 되어 있다면 버전 업그레이드가 일어날 경우 전체를 다 바꾸어 주어야 하지만, 계층화되어있으면 업그레이드가 이루어진 계층만 바꾸어 주면 된다. 또한, 계층화가 되어있으면 각 계층별로 그 역할에 대한 발전이 빠르게 이루어질 수 있다.

 

4. HTTP와 관계가 깊은 프로토콜은 IP/TCP/DNS

* IP의 역할은 개개의 패킷을 상대방에게 전달하는 것이다. 상대방에게 전달하기까지 여러 가지 요소가 필요한데 IP주소와 MAC 주소가 그것이다. IP주소는 각 노드에 부여된 주소를 가리키고 MAC 주소는 각 네트워크 카드에 할당된 고유의 주소이다. IP주소는 MAC 주소와는 결부되며, IP주소는 변경이 가능하지만 기본적으로 MAC 주소는 변경이 불가능하다. IP 통신은 MAC 주소에 의존해서 이루어지는데, 인터넷에서 통신상 대가 같은 랜선 내에 있을 경우는 적어서 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착할 수 있다. 그렇게 중계하는 과정 중에 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는 것이다. 이때 사용되는 프로토콜이 ARP(Address Resolution Protocol)이다. 이 과정은 마치 택배 배송과 흡사하다. 화물을 보내는 사람은 택배 집 배소 등에 화물을 가지고 가면 택배를 보낼 수 있다는 것만 알고 있다. 집 배소는 화물을 보내는 곳을 보고 어느 지역의 집 배소에 보내면 되는지만 알 고 있다. 그리고 목적지에 있는 집 배소는 어느 집에 배달하면 되는지만 알고 있다. 즉, 전체 흐름을 상세하게 아는 곳은 아무 데도 없다. 단지, 자신의 목적지로 배달할 뿐이다.

 

* TCP는 대용량의 데이터를 보내기 쉽도록 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당한다. 이때 사용하는 것이 학교 수업에서도 열심히 배웠던 Three Way Handshaking이다. 자세한 내용은 정리하지 않겠지만, 간단히 말하자면 SYN과 ACK이라는 플래그를 사용하여 전달이 잘 되었는지를 확인하는 방법이다.

 

* DNS(Domain Name System)는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공한다. 인간은 영어나 숫자 등을 섞어 원하는 서버를 지정한다. 이때 이것이 도메인 이름인 것이다. 하지만 컴퓨터는 나열된 숫자로 인식하기를 원하고 이것이 IP주소이다. 따라서 IP주소에 맞는 도메인 이름을 내어주거나 도메인 이름을 통해 IP주소로 접속할 때 그 매칭작업을 해주어야 하는데, 이 역할을 하는 것이 DNS인 것이다.