웹의 전체적인 동작 과정을 이해하기 위해 공부한 내용을 정리한 글입니다. 전체적인 과정을 이해하는 것이 목적이므로 생략된 부분이 많습니다. 이론적이고 정확한 지식을 원하시는 분은 반드시 관련 전문 서적을 참조해주세요.
인터넷의 동작 과정
웹의 동작 과정을 이해하기 위해서는 우선 인터넷의 동작 과정부터 이해해야 합니다. '인터넷'하면 익스플로러나 크롬 아이콘의 이미지를 떠올리는 사람이 있다면 우선 웹과 인터넷의 개념을 분리할 필요가 있습니다. 인터넷과 웹의 관계는 너무 밀접해서 마치 인터넷과 웹이 같은 개념인 것처럼 느껴지지만 인터넷과 웹은 엄연히 다른 개념입니다.
인터넷은 1960년대에서 70년대 사이에 탄생했지만, 웹은 20여년 정도가 흐른 뒤인 1990년대에 탄생했습니다.
인터넷은 세상의 모든 컴퓨터를 연결하고 어떤 일이 발생하더라도 연결을 유지하는 방법 혹은 그러한 통신망을 일컫습니다. 웹은 인터넷을 기반으로 동작하는
여러 서비스 중 하나입니다. 다른 서비스로는 이메일, 텔넷 등이 있습니다.
단순한 네트워크
컴퓨터가 모든 정보를 0과 1로 저장한다는 사실은 많이 들어보셨을 것입니다. 하나의 컴퓨터가 다른 컴퓨터에게 정보를 전달한다는 것은 수많은 0과 1의 시퀀스를 전달한다는 것입니다. 따라서 우리는 두 개의 컴퓨터를 전선으로 연결해서 정보를 주고 받을 수 있게 만들 수 있습니다. 5V는 1, 0V는 0 이라고 약속하고 전기 신호를 보내면 되니까 말이죠(당연히 실제로는 이렇게 간단하지 않습니다).
현제와 윤중이가 서로 컴퓨터로 통신을 하기 위해서 다음과 같이 전선을 통해 물리적으로 컴퓨터를 연결했다고 생각해봅시다.
이제 현제와 윤중이는 서로 전기적 신호를 통해서 정보를 주고 받을 수 있게 되었습니다. 그런데 이때 옆에 있던 윤환이도 현제와 통신을 하고 싶다고 합니다.
그럼 현제의 컴퓨터에 윤환이의 컴퓨터를 연결하는 전선을 추가적으로 배치해야 합니다.
이렇게 점점 현제, 윤중, 윤환이와 통신을 하고 싶은 사람들이 점점 늘어난다면, 필요한 전선의 양은 수없이 늘어날 것입니다. 예를 들어 10대의 컴퓨터가 서로 연결되기 위해서는 9개의 플러그가 달린 각각의 컴퓨터와 45개의 전선이 필요합니다.
출처: MDN Web Docs
이를 위해 하나의 전선을 중앙에 놓고, 각 컴퓨터는 중앙의 전선과 연결한다면 필요한 플러그와 전선의 수를 줄일 수 있습니다.
그런데 모든 컴퓨터가 단일한 경로로 연결되어 있기 때문에 한 쪽에서 보내는 정보를 다른 모든 컴퓨터에서 수신할 수 있습니다. 현제는 윤중이한테만 메시지를 보내고 싶은데 다른 모든 이들이 이를 들을 수 있는거죠.
현제는 기분이 좋지 않습니다. 윤중이와 함께 윤환이 뒷담화를 하고 싶은데 그럴 수 없기 때문이죠. 이러한 문제를 해결하기 위해 한 쪽에서 송신한 메시지를 원하는 쪽만 수신할 수 있도록 경로를 연결해주는 것이 스위치
입니다. 하나의 스위치에 각 컴퓨터들을 연결해주면, 하나의 컴퓨터는 같은 스위치에 연결된 다른 컴퓨터에게 메시지를 송신할 수 있습니다.
이렇게 컴퓨터들이 서로 연결된 하나의 그룹을 네트워크
라고 합니다.
이제 범위를 좀 더 확장해봅시다. 현제는 좀 더 먼 위치에 존재하는 영호와 통신을 하고 싶어졌습니다. 그런데 영호는 다른 네트워크에 속해있습니다. 서로 다른 네트워크와의 통신을 위해 스위치와 스위치를 서로 연결해 주는 장비를 라우터
라고 합니다.
라우터는 또 다른 라우터와 연결할 수 있습니다. 라우터와 라우터를 계속 연결한다면 우리는 수많은 컴퓨터와 통신을 할 수 있습니다.
인터넷
앞서 말했듯이 이 모든 것은 물리적으로 연결되어 있습니다. 이런 연결을 담당해주는 곳이 인터넷 서비스 제공자, ISP
(Internet Service Provider)입니다. ISP는 몇몇 특별한 라우터, 그리고 다른 ISP의 라우터와 연결하는 회사입니다. 우리나라에는 SKT, KT, LG같은 회사들이 있습니다. 우리는 다른 네트워크와의 전기선을 직접 연결하는 것이 아니라 ISP를 통해 간접적으로 연결합니다.
범위를 한번 더 확장해봅시다. 이제 현제는 미국에 있는 친구와 통신을 하고 싶습니다. 앞서 언급했듯이 ISP는 다른 ISP와 연결되어 있습니다. 따라서 현제는 한국의 ISP와 미국의 ISP를 통해서 미국에 있는 친구와 연결할 수 있습니다. 한국과 미국을 직접 연결하는 전기선은 없기 때문에 한국의 ISP는 미국과 연결되어 있는 일본의 ISP를 통해서 연결합니다.
이러한 연결은 아래 그림처럼 해저 광케이블을 통해 물리적으로 직접 연결되어 있습니다.
출처: https://www.submarinecablemap.com/
이렇게 전 세계의 모든 컴퓨터, 이들이 속해있는 각각의 독립적인 네트워크들이 거대한 네트워크를 이루고 있는 것이 바로 인터넷입니다. 그래서 인터넷을 네트워크들의 네트워크(Network of Networks)라고도 부릅니다.
한 컴퓨터에서 다른 컴퓨터로 정보를 보낼 때는 이를 패킷(packet)
이라는 단위로 쪼개서 보냅니다. 패킷들은 여러 라우터로 연결된 통로를 따라서 수신측 컴퓨터까지 전달됩니다.
수신측에서는 이를 다시 재조립하여 정보를 수신합니다. 송신측 컴퓨터에서 수신측 컴퓨터로 안전하고 효율적으로 정보를 보내기 위해 데이터를 어떻게 쪼개고 어떻게 전달하며 어떻게 조립할지 등에 관한 방법과 규칙들을 정의한 것을 TCP/IP
(Transmission Control Protocol/Internet Protocol)라고 합니다. TCP/IP는 인터넷 통신의 기본 규약입니다. 이름에서 알 수 있듯이 TCP와 IP, 두 가지 프로토콜로 이루어진 프로토콜의 집합입니다.
TCP는 데이터를 패킷으로 쪼개고 합치는 일에 관한 규약이고, IP는 이러한 패킷을 어떻게 다른 컴퓨터로 전달할지에 관한 규약입니다. A 컴퓨터에서 B 컴퓨터로 정보를 전달하기 위해서는 각 컴퓨터가 속한 네트워크의 주소를 알고 있어야 합니다. 이러한 주소를 IP 주소라고 부릅니다.
웹의 동작 과정
웹이 동작하는 기반인 인터넷의 기본 동작 과정을 알아봤으니 이제 웹의 동작 과정에 대해 알아봅시다.
우리가 구글의 웹사이트에 접속하고 싶다고 합시다. 우선 크롬, 사파리 등의 웹 브라우저를 실행하고 주소창에 www.google.com을 입력합니다. 그럼 브라우저는 내 네트워크와 연결된 ISP의 DNS 서버에 접속해 해당 도메인에 대응되는 IP 주소(예를 들어, 173.194.121.32)를 찾습니다.
주소를 찾았으면 해당 웹 사이트의 메인 페이지를 보내달라는 요청을 보냅니다. 서버는 클라이언트의 요청을 승인하고 웹 페이지의 정보를 패킷 단위로 전달합니다. 브라우저는 이 패킷을 이용해 사용자에게 웹 페이지를 보여줍니다.
DNS(Domain Name System)
IP 주소는 숫자로만 구성되기 때문에 사람이 읽고 기억하기 어렵습니다. 그래서 IP 주소를 읽고 기억하기 편한 문자, 도메인 네임으로 변환하는 시스템을 DNS라고 합니다. 웹 브라우저의 검색창에 도메인 이름을 검색하면 브라우저는 우선 해당 도메인이 내 컴퓨터의 브라우저나 OS에 캐싱되어 있는지 확인합니다.
정보가 없다면 내 네트워크와 연결된 ISP의 DNS 서버에 접속해 해당 도메인에 해당하는 IP 주소를 찾습니다. IP 주소를 찾았다면 인터넷 프로토콜에 따라 해당 주소에 해당하는 네트워크를 찾아갑니다.
ARP(Address Resolution Protocol)
목적지 IP 주소(173.194.121.32)를 얻었으므로 이 주소를 통해 Google의 웹 서버가 돌아가는 컴퓨터를 찾아갑니다. 우선 인터넷 프로토콜에 따라 IP 주소의 제일 마지막 부분을 제외한 앞의 세 개의 주소(173.193.121.0)를 통해 Google의 네트워크를 찾습니다.
도착한 후에는 마지막 주소 32에 해당하는 컴퓨터의 Mac 주소(혹은 이더넷 주소)를 찾아 해당 컴퓨터에 연결합니다. 이때 사용하는 프로토콜을 주소 결정 프로토콜, ARP라고 합니다. 이는 논리적 주소인 IP 주소를 물리적 주소인 Mac 주소로 변환하는 프로토콜입니다.
해당 컴퓨터와 연결이 되었다면 웹 서버에게 해당 웹사이트에 대한 정보를 요청하고, 웹 서버는 다시 내 IP 주소를 이용해 웹 사이트 정보 패킷을 전달합니다.
참고자료
'Computer Science > 네트워크' 카테고리의 다른 글
[HTTP] REST API (0) | 2021.07.08 |
---|---|
[HTTP] HTTP 상태코드 (0) | 2021.07.08 |
[HTTP] GET과 POST의 차이 (0) | 2021.07.08 |
댓글