인터넷을 한다는 것은 웹문서를 주고받는다는 것이다. AAA.txt AAA.png AAA.hwp 등의 문서가 있듯이, 웹에서는 naver/index.html이라는 문서를 작성하는데 거대한 네이버라는 웹사이트도 결국 html이라는 문법으로 작성된 텍스트 문서일 뿐이다. 이 문서를 인터넷을 통하여 컴퓨터와 컴퓨터가 주고받는 공간이 웹이다.

HTTP

사실 인터넷이라는 것은 하나의 화면을 로드하는 것이다. 즉, 인터넷을 통해 html을 주고받는 것이라고 볼 수 있다. 그 웹문서를 주고받는 통신에 대한 규약이 http프로토콜이다.(TCP라는 단방향통신을 발전시킨 것) - 프로토콜이란 서로 다른 컴퓨터 간의 의사소통을 위한 통신규약을 말한다.

웹문서를 주고받을 때, 어떤 사람은 {이름 : 핀, 지역 : 서울}, 이렇게 주고받는데, 어떤 사람은 {성함 : 핀, 주소 : 서울}. 이런 식으로 주고받을 수가 있다. 이런 차이가 생기면 뜻은 주고받지만 컴퓨터가 일관되게 해석하기 힘들어진다. 그렇기 때문에 컴퓨터가 일관되게 해석할 수 있도록 용어를 통일해야 하는 것이다. HTTPhypertext transper protocol의 약자이다. 두 개의 컴퓨터에서 데이터를 HTTP 규약을 통해 주고받는 것이 곧 web이다.

gaaraam.github.io 를 브라우저 주소창에 입력하면 해당 URL에 응답하는 서버에 대한 TCP 채널을 열도록 명령한다. URL은 집 주소라든지, 전화번호라고 볼 수 있다. 요청하는 컴퓨터를 클라이언트라고 하고, 요청하는 URL은 서버에 속한 주소이다. 연결이 설정되면 클라이언트는 웹페이지를 검색하기 위해 서버에 HTTP GET 요청(클라이언트가 호출할 수 있는 HTTP 메서드의 한 종류)을 보낸다. 서버는 응답을 보낸 후에 TCP 연결을 닫는다. 새로운 요청이 생기면 동일한 프로세스를 통해 새 연결이 열린다.

요청을 받은 브라우저는 url에서 도메인 네임을 가져와서 ip주소로 반환한다. 클라이언트는 ip주소를 알게 되고 해당 주소에서 서버에 대한 연결을 열 수 있게 되는 것이다.

도시의 비유(codecademy)

인터넷이라는 도시가 있다. 나는 클라이언트고 나의 주소를 가지고 있다. 내 집 말고 다른 집들도 있고 그 곳에는 또 다른 클라이언트들이 존재한다. 도시는 이런 곳의 요청과 응답을 처리하는 일들을 한다. 광속으로 움직이는 기차를 타고 이동할 수 있는 우체부의 우편 서비스도 있다. 내가 신문을 읽고 싶다면, HTTP라는 언어를 통해 우체부에게 검색하도록 요청한다. 우체부는 우리 집과 사업장 사이에 즉시 철도를 연결하고 TCP라고 표시된 열차를 탄다. 사업장에 도착한 우체부가 요청한 신문 페이지를 검색하지만 찾을 수 없다. 우체부는 돌아오는 길에 404 not found를 알려준다. 그리고 작성한 내용의 철자를 다시 확인해보니 신문 제목의 철자가 틀렸다는 것을 알게 된다. 이를 다시 수정하여 수정된 제목을 우체부에게 다시 제공하면, 우체부가 올바른 신문 페이지를 찾아서 나에게 갖다주는 것이다.

구글의 예시

구글의 컴퓨터가 있다. 구글이라는 프로그램을 올려놓은 엄청나게 큰 pc가 있다. 우리가 게임을 컴퓨터에 띄우는 것처럼 구글이라는 프로그램을 띄우는 큰 피씨가 있다. 다른 사람의 컴퓨터가 저 구글의 컴퓨터에 들어오는 것이다.구글이 자기의 컴퓨터를 외부적으로 공개하는 것이다. 컴퓨터마다 고유한 ip(internet protocol)가 있다. ip를 외우기 어렵기 때문에 dns(domain name service)를 통하여 공개한다. 우리는 구글의 ip를 찍고 들어가는 것과 똑같은 행위를 하는 것. 구글의 자료를 우리가 http를 통하여 열람하는 것과 다름없다.