JavaScript | 웹과 네트워크

dev_hee·2021년 10월 4일
1

network

목록 보기
2/6
post-thumbnail

웹과 네트워크

글을 들어가며

프론트엔드 공부를 하다보면 웹과 네트워크는 반복해서 나오는 개념이다. 프론트엔드 개발자가 해야하는 일은 서버와 네트워크 통신을 통해 받아온 리소스를 가지고 브라우저 화면에 렌더링하는 과정 사이에 일어나는 일이기 때문에, 웹과 네트워크를 명확하게 이해하지 못했다면 실무는 물론 공부를 해나가는 과정에서도 어려움을 느낄 수 있다. 따라서 웹과 네트워크에 대해 익숙해지는 시간을 가져보았으면 좋겠다.

웹의 탄생

먼저 웹이 누구에 의해 어떤 목적을 가지고 탄생했는지 알아보자.

웹의 창시자 - 팀 버너스 리

CERN(유럽 입자 물리학 연구소)의 팀 버너스 리 박사는 멀리 떨어져있는 동료 연구자와 지식을 공용할 수 있는 시스템을 고안하였다.
HyperText에 의해 상호간에 참조할 수 있는 WWW(World Wide Web) 의 기본 개념이 되었다.

하이퍼텍스트(Hypertext, 문화어: 초본문, 하이퍼본문)는 참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다.

WWW를 구성하는 기술

WWW을 구성하는 기술로 다음과 같은 세가지가 제안되었다.

  • HTML (HyperText Markup Language)
    문서 기술 언어
  • HTTP (HyperText Transfer Protocl)
    문서 전송 프로토콜
  • URL (Uniform Resource Locator)
    문서의 주소를 지정하는 방법

위와 같은 세가지 기술을 통해서
문서를 작성하고,
문서를 전송하고,
문서를 저장된 주소에서 문서를 요청하는
그런 일련의 과정을 수행할 수 있게 되었다.

즉 웹(www)은 HTML이라는 문서 형태와 HTTP라는 문서 전송 프로토콜, URL로 문서의 위치를 표시하는 시스템을 말한다.

HTTP

그렇다면 웹의 문서인 HTML을 전송하기 위한 방법은 무엇일까?

HTTP(HyperText Transfer Protocl)는 웹에서 브라우저와 서버가 통신하기 위한 프로토콜(규약)이다.
팀 버너스 리 박사가 고안한 HTTP는 1991년 최초로 문서화 되고, 1996년 HTTP/1.0, 1999년 HTTP/1.1, 2015년 HTTP/2가 발표되었다.

HTTP/1.1

커넥션(connection)당 하나의 요청과 응답만 처리한다.
여러 개의 요청을 한번에 전송할 수 없고, 응답 또한 마찬가지다.
따라서 HTTP/1.1은 리소스의 다중 요청/응답이 불가능하여 요청할 리소스의 개수에 비례해 응답 시간도 증가한다는 단점이 존재한다.

HTTP/2

커넥션당 여러 개의 요청과 응답, 즉 다중 요청/ 응답이 가능하여 HTTP/1.1에 비해 페이지 로드 속도가 약 50% 정도 빠르다.

인터넷은 TCP/IP 기반 네트워크다

떨어져있는 두 개의 컴퓨터 사이를 연결하는 네트워크, 즉 인터넷은 어떤 방식으로 데이터를 주고 받을 것인지를 미리 약속해야한다. 그에 대한 대표적인 약속(프로토콜)은 TCP/IP 세트이다.

TCP/IP는 프로토콜의 집합

서로 다른 하드웨어와 운영체제를 가지고 서로 통신하기 위해서 모든 요소에 규칙이 필요하게 된다. 그런 규칙을 프로토콜이라고 부른다.

컴퓨터가 서로 통신하는 경우, 특정 규칙이나 프로토콜을 사용하여 순서대로 데이터를 전송 및 수신할 수 있다. 전세계를 통해 가장 일상적으로 사용되는 프로토콜 세트 중 하나가 TCP/IP(Transmission Control Protocol/Internet Protocol)이다.

프로토콜은 케이블 규격, IP 주소 지정 방법, 떨어진 상대를 찾기 위한 방법과 도달 순서, 웹을 표시하는 순서 등을 나타낸다.

계층으로 관리하는 TCP/IP

TCP/IP는 계층(Layer)로 나누어 관리된다.

애플리케이션 계층, 트랜스포트 계층, 네트워크(인터넷) 계층, 링크 계층

계층화 하면 다음과 같은 장점이 존재한다.

  • 사양이 변경된 해당 계층만 수정하면 된다.
  • 각 계층이 담당하는 부분만 고려하여 자유롭게 설계할 수 있다.
  • 해당 계층에서 문제가 발생해도, 다른 계층은 고려하지 않고 해당 계층에서만 문제를 해결하면 된다.

1 애플리케이션 계층

유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정한다.

FTP, DNS, HTTP가 애플리케이션 계층에 포함된다.

2 트랜스포트 계층

애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공한다.

TCP (Transmission Control Protocol)
UDP (User Data Protocol)

트랜스포트 계층에서 웹은 TCP 방식을 채택하여 데이터를 송수신한다.
따라서 TCP/IP 프로토콜 세트는 트랜스포트 계층중에서 TCP방식을 선택했다는 의미이다.

3 네트워크 계층/ 인터넷 계층

네트워크 상에서 패킷의 이동을 다룬다.
패킷은 전송하는 데이터의 최소 단위로, 큰 데이터를 작은 단위로 나눠서 전송하기 용이하게 한다.

네트워크 계층에서는 어떤 경로로 상대의 컴퓨터까지 패킷을 보낼지 결정하게 된다.
인터넷은 상대 컴퓨터에 도달하는 동안 여러 대의 컴퓨터와 네트워크 기기를 거쳐 상대방에게 배송되기 때문에, 여러가지 경로 중에서 한가지 경로를 결정하는 것이 네트워크 계층의 역할이다.

IP (Internet Protocol)

네트워크 계층에서 웹은 인터넷 프로토콜(IP)방식을 채택하여 패킷을 전달한다.
따라서 TCP/IP 프로토콜 세트는 네트워크 계층중에서 IP방식을 선택했다는 의미이다.

4 링크 계층

네트워크에 접속하는 하드웨어적인 면을 다룬다.
디바이스 드라이버, 네트워크 인터페이스 카드(NIC), 케이블 등이 포함된다.

TCP/IP 통신의 흐름

TCP/IP 통신은 계층을 순서대로 거쳐 상대와 통신한다. 송신(보내는 쪽)측은 애플리케이션 계층에서부터 내려가고, 수신(받는 쪽)측은 애플리케이션 계층으로 올라간다.

HTTP를 예로 들어서 설명해보자.

송신측

  • 애플리케이션 계층(HTTP) 에서 어떤 웹 페이지를 보고싶다는 HTTP request를 지시한다.
  • 트랜스포트 계층(TCP) 에서 애플리케이션 계층에서 받은 데이터를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에게 전달한다.
  • 네트워크 계층(IP) 에서 수신지 MAC 주소를 추가해 링크 계층에게 전달한다. 이로서 네트워크를 통해 통신할 준비가 되었다.

이처럼 송신측은 각 계층을 거칠 때마다 헤더(Header)를 붙인다.
헤더는 해당 계층에서 필요한 정보이다.

수신측

  • 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에게 전달해 애플리케이션 계층까지 도달한다.
  • 애플리케이션 계층에 도달하면 클라이언트가 발신핼던 HTTP request 내용을 수신할 수 있다.

수신측은 각 계층을 거치면서 사용한 헤더를 제거한다.

IP/TCP/DNS 프로토콜

TCP/IP 중에서 HTTP(애플리케이션 계층)와 관련있는 IP, TCP, DNS 세개의 프로토콜에 대해 알아보자.

IP는 배송을 담당한다

IP(Internet Protocol)은 네트워크 계층에 해당한다.
IP는 개개의 패킷을 상대방에게 전달하는데, 그 과정에서 여러 가지 요소가 필요하다.
그 중 IP 주소와 MAC 주소가 있다.

IP 주소 각 노드에 부여된 주소, 변경 가능하다.
MAC 주소 각 네트워크 카드에 할당된 고유 주소, 변경 불가능하다.

ARP (Address Resolution Protocol)

IP 통신은 MAC 주소에 의존해 통신한다.
여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착하기 때문에, 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가야한다.
이때 사용하는 프로토콜이 ARP이다.

ARP를 통해 수신지의 IP주소를 바탕으로 MAC주소를 조사한다.

라우팅

목적지까지 중계하는 도중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기 전까지 대략적인 목적지만 알고있는 시스템을 라우팅이라고 한다.

라우팅은 택배 배송과 흡사하다.
택배를 보내는 사람은 우체국에 가서 택배를 보내고, 집배소는 화물을 어떤 지역의 집배소에게 보내야 하는지만 알고 보내고, 목적지에 있는 집배소도 어떤 집에 배달하면 되는지만 알고있다.

TCP는 신뢰성을 담당한다

TCP (Transfer Control Protocol)는 트랜스포트 계층에 해당한다.
신뢰성 있는 바이트 스트림 서비스를 제공한다.

바이트 스트림 서비스
큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것이다.

즉, TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대방에게 보내고, 잘 도착했는지 확인하는 역할을 한다.

Three Way Handshaking

패킷을 전송하고, 잘 보내졌는지 상대에게서 확인하는 과정이다.
SYN, ACK 이라는 TCP 플래그를 사용하여 확인한다.
만약 통신 도중 끊어지면, TCP는 동일한 방법으로 재전송한다.

DNS는 이름을 해결한다.

DNS(Domain Name System)은 HTTP와 같이 애플리케이션 계층 시스템에서 도메인 이름과 IP주소 이름 확인을 제공한다.

사용자는 보통 IP주소 대신 이름을 사용하여 상대 컴퓨터를 지정한다.
IP 주소는 숫자로 나열되어 있어서, 영어 숫자로 표기된 이름이 더욱 친숙하기 때문이다.

DNS는 도메인명에서 IP주소를 조사하거다, 반대로 IP주소로부터 도메인명을 조사하는 서비스를 제공한다.

HTTP, IP, TCP, DNS를 통한 통신 과정

정리하자면 이 모든 프로토콜은 웹에서 리소스를 송수신 하기 위한 약속된 방법이고, HTTP는 애플리케이션 계층의 통신 방법이다. TCP, IP는 그보다 아래단에서 각각 트랜스포트 계층과 네트워크 계층에서 데이터를 송수신 하는 방법의 규약을 의미한다. DNS는 사용자 입장에서 서버에 리소스를 요청할 때 조금 더 쉽게, 또한 컴퓨터도 알아들을 수 있게 하기 위한 보조 서비스이다.

그럼 이런 통신 과정을 아래 그림을 보며 정리해보자.
클라이언트가 http://google.com 웹페이지에 접속하려는 상황을 예로 들었다.

글을 마무리하며

앞으로 웹과 네트워크 그리고 브라우저에 관한 이야기를 반복해서 접하면서 커다란 그림 또는 흐름이 머리속에 그려지길 바라면서 이 글을 마무리하겠다.

profile
🎨그림을 좋아하는 FE 개발자👩🏻‍💻

0개의 댓글