본문 바로가기
320x100
320x100

제 1장 웹과 네트워크의 기본에 대해 알아보자

1.1 웹은 HTTP로 나타낸다
1.2 HTTP는 이렇게 태어났고 성장했다
1.2.1 웹은 지식 공유를 위해 고안되었다
1.2.2 웹이 성장한 시대
1.2.3 진보 안하는 HTTP
1.3 네트워크의 기본은 TCP/IP
1.3.1 TCP/IP는 프로토콜의 집합
1.3.2 계층으로 관리하는 TCP/IP
1.3.3 TCP/IP 통신의 흐름
1.4 HTTP와 관계가 깊은 프로토콜은 IP/TCP/DNS
1.4.1 배송을 담당하는 IP
1.4.2 신뢰성을 담당하는 TCP
1.5 이름 해결을 담당하는 DNS
1.6 이들과 HTTP와의 관계
1.7 URI와 URL
1.7.1 URI는 리소스 식별자
1.7.2 URL 포맷

1.1 웹은 HTTP로 나타낸다

클라이언트(Client)는 브라우저 주소 입력란에 URL을 입력하면 웹 페이지를 볼 수 있습니다.

웹 브라우저는 웹 브라우저 주소 입력란에 지정된 URL에 의지해서 웹 서버로부터 리소스라고 불리는 파일 등의 정보를 얻고 있는 것입니다.

이 때, 서버에 의뢰를 하는 웹 브라우저 등을 클라이언트(Client)라고 부릅니다.

이렇게 클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것은 웹에서 HTTP(HyperText Transfer Protocol)이라 불리는 프로토콜입니다.

프로토콜이라는 의미는 "약속"입니다. 즉, 웹은 HTTP라는 약속을 사용한 통신으로 이루어져 있습니다.

 

1.2 HTTP는 이렇게 태어났고 성장했다

HTTP에 대해서 자세하게 배우기 전에 HTTP가 등장하게 된 배경을 소개하도록 하겠습니다.

1.2.1 웹은 지식 공유를 위해 고안되었다.

아직 인터넷이 몇몇 사람들의 것이었던, "여명기"라고도 말할 수 있는 1989년 3월에 HTTP가 탄생했습니다.

CERN(유럽 입자 물리학 연구소)의 팀 버너스 리 박사는 멀리 떨어져 있는 동료 연구자와 지식을 공용하게 할 수 있도록 시스템을 고안하였습니다. 최초로 고안한 것은 여러 문서를 상호간에 관련 짓는 하이퍼텍스트(HyperText)에 의해 상호간에 참조할 수 있는 WWW(World Wide Web)의 기본 개념이 되는 것이었습니다.

이러한 WWW를 구성하는 기술로서, 문서 기술 언어로는 SGML을 베이스로 한 HTML(HyperText Marup Language), 문서 전송 프로토콜로는 HTTP, 문서의 주소를 지정하는 방법으로 URL(Uniform Resource Locator)등 세가지가 제안되었습니다.

WWW는 지금으로 말하자면 웹 브라우저, 그 당시에는 하이퍼텍스트를 열람할 수 있는 클라이언트 애플리케이션의 명칭이었습니다. 이것이 현재에는 이러한 일련의 시스템(구조)의 명칭으로 사용되어 WWW 혹은 단순히 웹이라고 불리고 있습니다.

1.2.2 웹이 성장한 시대

1990년 11월에 CERN에서 세계 최초의 웹 서버와 웹 브라우저가 개발되었습니다. 그로부터 3년 뒤인 1993년에 대한민국 최초의 홈페이지가 개발되었습니다.

  • 대한민국 최초 홈페이지 http://cair.kaist.ac.kr

1990년에는 HTML1.0 초안(드래프트)도 검토되었지만 HTML1.0은 애매한 부분이 많았기때문에 초안인 상태로 폐기되었습니다.

1993년 1월에는 NCSA(미국 수퍼 컴퓨터 응용 연구소)에서 현재 사용하는 웹 브라우저의 선조라고 말할 수 있는 모자이크(Mosaic)를 개발했습니다.

같은 해 가을에 윈도우 팥과 매킨토시 판도 개발되었습니다.

그 다음 해인 1994년 12월에 넷스케이프(Netscape) 사에서 넷스케이프 네비게이터(Netscape Navigator) 1.0을 출시하고

1995년에는 마이크로소프트(Microsoft) 사에서 인터넷 익스플로러(Internet Explorer) 1.0과 2.0을 출시했습니다.

이 무렵에 현재 웹 서버 표준의 하나인 아파치(Apache)도 Apache 0.2로 등장했습니다. HTML 2.0도 발행되는 등 웹이 약진하는 한 해가 되었습니다.

그리고 1995년 경부터 마이크로소프트사와 넷스케이프사에 의해서 브라우저 경쟁이 과열되어 갑니다.

브라우저 벤더끼리 경쟁하면서 그 당시 추천되었던 여러 웹 표준화를 모조리 무시해왔습니다. 새로운 기능에 대한 문서(도큐먼트)도 없는 상황이 종종 있었습니다.

이러한 브라우저 경쟁은 넷스케이프사의 쇠퇴와 함께 2000년 경에 일단 결말이 납니다. 그러나 2004년에 모질라 파이어폭스(Mozilla Firefox) 출시와 함께 제 2차 브라우저 전쟁에 돌입하게 됩니다.

인터넷 익스플로러는 버전6에서 7이 등장하기까지 5년이 걸렸습니다만, 그 뒤로 8,9,10 버전을 연달아 출시하고 있습니다.

또한 크롬(Chrome)과 오페라(Opera), 사파리(Safari)와 같은 브라우저도 점유율을 늘려가고 있습니다.

1.2.3 진보 안하는 HTTP

- HTTP/0.9

HTTP가 등장한 때는 1990년인데, 이 당시 HTTP가 정식 사양서는 아니었습니다. 이 당시 등장한 HTTP는 1.0 이전이라는 의미에서 HTTP/0.9로 불리고 있습니다.

- HTTP/1.0

HTTP가 정식 사양으로 공개된 것은 1996년 5월이었습니다. 이 때 HTTP/1.0으로 RFC1945가 발행되었습니다. 초기의 사양이지만 현재에도 아직 많은 서버상에서 현역으로 가동되고 있는 프로토콜 사양입니다.

RFC1945 - https://www.ietf.org/rfc/rfc1945.txt

- HTTP/1.1

1997년 1월에 공개된 HTTP/1.1 버전이 현재 가장 많이 사용되는 버전입니다. 그 당시의 사양은 RFC2068이지만 개정판으로 발행된 RFC2616이 최신 버전입니다.

RFC2616(2068) - https://www.ietf.org/rfc/rfc2616.txt

- HTTP/2.0

2015년 2월에 공개된 HTTP/2.0입니다. HTTP 1.1과 호환성을 유지하고 있으며

다음과 같은 기술들을 이용해 페이지 로드 속도 개선을 하였습니다. 또한 기존에 Plain Text(평문)를 사용하고, 개행으로 구별되면 HTTP/1.x 프로토콜과 달리, 2.0에서는 바이너리 포멧으로 인코딩 된 Message, Frame으로 구성되었습니다.

사양은 RFC7540으로 발표되었습니다. https://datatracker.ietf.org/doc/html/rfc7540

- HTTP/3

2020년 10월을 기준으로 현재 드래프트(초안) 상태이며 여러 구현체들을 보유하고 있습니다. 사용자 공간 혼잡 제어를 사용해 데이터그램 프로토콜(UDP)를 경유하여 사용되는, 처음에 구글이 개발한 전송계층 통신 프로토콜의 하나인 QUIC를 사용합니다. QUIC로의 전환은 헤드 오브 라인 블로킹이라는 HTTP/2의 주된 문제를 해결하는 것이 목적입니다.

1.3 네트워크의 기본은 TCP/IP

인터넷을 포함하여 일반적으로 사용하고 잇는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있습니다. HTTP는 그 중 하나입니다.

1.3.1 TCP/IP는 프로토콜의 집합

프로토콜에는 여러가지가 있습니다. 케이블 규격이랑 IP 주소 지정 방법, 떨어진 상대를 찾기 위한 방법과 그 곳에 도달하는 순서, 그리고 웹을 표시하기 위한 순서 등입니다.

이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 부릅니다. TCP와 IP 프로토콜을 가리켜 TCP/IP라고 부르기도 하지만, IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라는 이름이 사용되고 있습니다.

1.3.2 계층으로 관리하는 TCP/IP

TCP/IP에서 중요한 개념 중 하나가 계층(Layer)입니다. TCP/IP는 '애플리케이션 계층', '트랜스포트 계층', '데이터링크 계층', '링크 계층' 이렇게 4계층으로 나뉘어 있습니다.

이렇게 계층화된 것은 메리트가 있기 때문입니다. 예를 들면, 인터넷이 하나의 프로토콜로 되어 있다면 어디선가 사양이 변경되었을 때 전체를 바꾸지 않으면 안되지만, 계층화되어 있으면 사양이 변경된 해당 계층만 바꾸면 됩니다.(뭔가 스프링의 Layer 설계랑 비슷한데..?)

또한, 계층화하면 설계를 편하게 할 수 있습니다.

- 애플리케이션 계층

애플리케이션 계층은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정하고 있습니다.

예를 들면 FTP랑 DNS 등도 애플리케이션의 한가지입니다. HTTP도 이 계층에 포함됩니다.

- 트랜스포트 계층

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

서로 다른 성질을 가진 TCP(Transmission Control Protocol)와 UDP(User Data Protocol) 두 가지 프로토콜이 있습니다.

- 네트워크(인터넷) 계층

네트워트 계층은 네트워크 상에서 패킷의 이동을 다룹니다. 패킷이란 전송하는 데이터의 최소 단위입니다.

이 계층에서는 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 합니다.

- 링크(데이터 링크, 네트워크 인터페이스) 계층

네트워크에 접속하는 하드웨어적인 면을 다룹니다. 디바이스 드라이버랑 네트워크 인터페이스 카드(NIC)를 포합합니다.

그리고 케이블 등과 같이 물리적으로 보이는 부분도 포함됩니다. 하드웨어적인 측면은 모두 링크 계층의 역할입니다.

1.3.3 TCP/IP 통신의 흐름

TCP/IP로 통신을 할 때 계층을 순서대로 거쳐 상대와 통신을 합니다. 송신하는 측은 애플리케이션 계층부터 내려가고, 수신하는 측은 링크 계층에서 위로 올라갑니다.

각 계층을 거칠 때는 반드시 헤더로 불려지는 해당 계층마다 해당 계층에 필요한 정보를 추가합니다. 반대로 수신측에서는 각 계층을 거칠 때마다 반드시 해당 계층마다 사용한 헤더를 삭제합니다.

이렇게 정보를 감싸는 것을 캡슐화라고 부릅니다.

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

1.4.1 배송을 담당하는 IP

IP(Internet Protocol)는 계층으로 말하자면 네트워크 층에 해당됩니다.

IP는 TCP/IP라는 명칭의 일부가 될 정도로 중요한 프로토콜입니다. 'IP'와 'IP 주소'를 혼동하는 사람이 있는데 'IP'는 프로토콜의 명칭입니다.

IP의 역할은 개개의 패킷을 삳애방에게 전달하는 것입니다. 상대방에게 전달하기까지 여러 요소가 필요합니다. 그 중에서도 IP 주소와 MAC주소(Media Access Control Address)라는 요소가 중요합니다.

IP 주소는 각 노드에 부여된 주소를 가리키고 MAC 주소는 각 네트워크 카드에 할당된 고유의 주소입니다. IP 주소는 변경 가능하지만 기본적으로 MAC 주소는 변경할 수 없습니다.

- 통신은 ARP를 이용하여 MAC 주소에서 한다

IP 통신은 MAC 주소에 의존해서 통신을 합니다. 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는 것입니다. 이때, ARP(Address Resolution Protocol)이라는 프로토콜이 사용됩니다.

ARP는 주소를 해결하기 위한 프로토콜 중 하나인데, 수신지의 IP 주소를 바탕으로 MAC주소를 조사할 수 있습니다.

- 그 누구도 인터넷 전체를 파악하고 있지는 않다

목적지까지 중계를 하는 도중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기까지 대략적인 목적지만을 알고 있습니다.

이 시스템을 라우팅이라고 부르는데 택배 배송과 흡사합니다(화물보내는곳->집배소->집 주소)

결국, 어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세하게 파악하고 있지 못하다는 것입니다.

1.4.2 신뢰성을 담당하는 TCP

TCP(Transfer Control Protocol)는 계층으로 말하자면 트랜스포트 층에 해당하는데, 신뢰성 있는 바이트 스트림 서비스를 제공합니다.

바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미합니다.

- 상대에게 데이터를 확실하게 보내는 것이 일이다

상대에게 확실하게 데이터를 보내기 위해서 TCP는 "쓰리웨이 핸드셰이킹(Three Way Handshaking)"이라는 방법을 사용하고 있습니다.

이 방법은 패킷을 보내고 나서 바로 끝내는 것이 아니라, 보내졌는지 여부를 상대에게 확인하러 갑니다. 이것은 'SYN'와 'ACK'라는 TCP 플래그를 사용합니다.

1. 송신측에서는 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보냅니다.

2. 수신측에서는 'SYN/ACK' 플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전합니다.

3. 마지막으로 송신측이 'ACK' 플래그를 보내 패킷 교환이 완료되었음을 전합니다.

이 과정에서 어디선가 통신이 도중에 끊어지면 TCP는 그와 동시에 같은 수순으로 패킷을 재전송합니다.

1.5 이름 해결을 담당하는 DNS

DNS(Domain Name System)는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP주소이름 확인을 제공합니다. 컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있습니다.

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

1.7 URI와 URL

웹 브라우저 등으로 웹 페이지를 표시하기 위해 입력하는 주소가 바로 URL입니다.

URL= https://www.google.co.kr 

1.7.1 URI는 리소스 식별자

URI(Uniform Resource Identifiers)

- Uniform: 통일된 서식을 결정하는 것으로, 여러 가지 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 한다. 또한, 새로운 스키마(http:, ftp etc) 도입을 용이하게한다.

- Resource: 리소스는 '식별 가능한 모든 것'이라고 정의되어 있습니다. document file, image, service 등 다른 것과 구별할 수 있는 것은 모두 리소스입니다.

- Identifier: 식별 가능한 것을 참조하는 오브젝트이며 식별자로 불립니다.

URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해 URL은 리소스의 장소(네트워크 상의 위치)를 나타냅니다.

URL은 URI의 서브셋(부분집합)입니다.

1.7.2 URL 포맷

- 절대 URI 포맷의 예시

1. 스키마

http: https: 와 같은 스키마를 사용하여 리소스를 얻기 위해 사용하는 프로토콜을 지시합니다.

2.자격정보

서버로부터 리소스를 취득하려면 자격정보(크리덴셜)가 필요합니다. 유저명과 패스워드를 지정가능합니다. [ 옵션 ]

3.서버주소

DNS명이나, IP주소를 입력 가능합니다.

4.서버포트

서버의 접속 대상이 되는 네트워크 포트번호를 지정합니다. 이것은 옵션이며 생략하면 디폴트 포트가 사용됩니다. [ 옵션 ] - http의 경우는 80번

5.계층적 파일경로

특정 리소스를 식별하기 위해서 서버 상의 파일 경로를 지정합니다.

6.쿼리문자열(쿼리스트링)

파일경로로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 쿼리 문자열을 사용합니다. [ 옵션 ]

7. 프래그먼트 식별자

주로 취득한 리소스에서 서브 리소스를 가리키기 위해서 프래그먼트 식별자가 사용됩니다. [ 옵션 ]

320x100

댓글