[F-Lab 모각코 챌린지 9일차] HTTP / 인터넷 네트워크

Nami·2023년 6월 9일
0

66일 포스팅 챌린지

목록 보기
9/66
김영한 님의 『모든 개발자를 위한 HTTP 웹 기본 지식』 강의를 추천받고 수강하게 되었다. 마침 이전에 내가 HTTP 관련하여 공부하고 싶어서 구매한 『HTTP 완벽 가이드』 책을 같이 참고하면서 기록한다. "웹은 어떻게 동작하는가?" 뿐만 아니라 "왜 이것을 이해하는 것이 중요한가?"를 생각하며 공부할 것이다.

HTTP

WHY?

월드 와이드 웹을 지탱하는 가장 중요한 기술 두 가지는 HTMLHTTP이다. 이 두 기술은 팀 버너스 리가 웹을 발명할 때 함께 만들어졌다. 이 둘 중 하나라도 빠지면 웹은 성립하지 않는다. HTTP는 웹의 구성요소들이 서로 대화를 할 때 사용하는 프로토콜이다. HTTP를 이해한다는 것은 웹이 어떻게 동작하는지를 이해한다는 것이며, 이는 정확한 근거에 기반한 올바른 기술적 판단을 내려야 할 때 큰 도움이 된다.

인터넷 네트워크

웹 클라이언트와 서버

웹 콘텐츠는 웹 서버에 존재한다. 클라이언트는 서버에게 HTTP 요청을 보내고, 서버는 요청된 데이터를 HTTP 응답으로 돌려준다.

웹 브라우저는 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여준다.

웹 서버는 웹 리소스를 관리하고 제공한다. 이는 웹에 콘텐츠를 제공하는 모든 것이라 생각하면 된다.

웹 페이지는 여러 객체로 이루어질 수 있다.

애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다. 웹 브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행한다. 페이지 레이아웃을 서술하는 HTML 프레임을 한 번의 트랜잭션으로 가져온 뒤, 이미지, 그래픽 조각 등을 가져오기 위해 추가로 HTTP 트랜잭션들을 수행한다. 이 리소스들이 존재하는 서버는 각각 다른 곳에 위치할 수도있다. 즉, 웹페이지는 보통 하나의 리소스가 아닌 리소스의 모음이다.

IP Internet Protocol

  • 클라이언트/서버가 지정한 IP 주소(IP address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 소실될 경우
    • 패킷이 순서대로 오지 않을 경우
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우

TCP 전송 제어 프로토콜

TCP (Transmission Control Protocol 전송 제어 프로토콜)

HTTP는 애플리케이션 계층 프로토콜이다. HTTP는 네트워크 통신의 핵심적인 세부사항에 대해 신경쓰지 않는다. 대신 신뢰성 있는 인터넷 전송 프로토콜인 TCP/IP에게 맡긴다.

  • 연결 지향, TCP 3 way handshake (가상 연결)
    • 가상 회선 방식을 제공한다는 것은 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 뜻이다.
    • 3-way handshaking 과정은 발신지와 수신지 사이에 논리적인 접속(세션)을 성립하는 과정을 의미한다.
  • 오류 없는 데이터 전송
  • 혼잡 제어
  • 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착한다.)
  • 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다.)
  • 신뢰할 수 있는 프로토콜
  • 현재 대부분 TCP를 사용한다.
  • 시간이 오래 걸릴 수 있음
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식
    • 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
    • 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.

TCP/IP는 TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합이다. 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 해준다.
HTTP 프로토콜은 TCP 위의 계층이다. HTTP는 자신의 메시지 데이터를 전송하기 위해 TCP를 사용한다. TCP는 또한 IP 위의 계층이다.

프로토콜 계층
1. 애플리케이션 계층에서 프로그램이 Hello, world! 메시지 생성
2. SOCKET 라이브러리를 통해 전송 계층 TCP로 전달
3. TCP 정보를 생성, 메시지 데이터를 포함시켜서 인터넷 계층 IP로 전달
4. IP 패킷 생성, TCP 데이터 포함
5. 이더넷 프레임을 생성, 네트워크 전송

TCP 3 way handshake

SYN: 접속 요청
ACK: 요청 수락
참고 ✅ 마지막 ACK 때 함께 데이터 전송 가능

UDP 사용자 데이터그램 프로토콜

UDP (User Datagrram Protocol)

  • 비연결형 서비스
    • 연결 설정과 해제가 없다.
    • 연속성있는 전송이 필요할 때 사용
    • 실시간 스트리밍 서비스에 많이 사용
  • 하얀 도화지에 비유(기능이 거의 없음)
  • 연결 지향 X (TCP 3 way handshake X)
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 1:1, 1:N, N:N 통신이 가능하다.
  • 데이터 전달 및 순서가 보장되지 않지만 단순하고 빠르다. (TCP보다 빠름.)
  • IP와 거의 같다. PORT, 체크섬 정도만 추가
  • 애플리케이션에서 추가 작업 필요

체크섬은 중복 검사의 한 형태로, 송신된 자료의 무결성을 보호하는 단순한 방법이다.

PORT

HTTP 클라이언트가 서버에 메시지를 전송할 수 있게 되기 전에, IP 주소와 포트 번호를 사용해 클라이언트와 서버 사이에 TCP/IP 커넥션을 맺어야한다.
TCP에서는 서버 컴퓨터에 대한 IP 주소와 그 서버에서 실행 중인 프로그램이 사용 중인 포트번호가 필요하다.
PORT는 같은 IP 내에서 네트워크 서비스나 특정 프로세스를 구분할 수 있는 역할을 한다.
김영한 강사님은 IP가 아파트라면 PORT는 '몇 동, 몇 호'라는 비유를 하셨다. 어떤 아파트 몇 동 몇 호인지 두 가지를 알아야 정확하게 전송할 수 있을 것이다.

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP 20, 21
    • TELNET 23
    • HTTP 80
    • HTTPS 443

DNS Domain Name System

IP는 기억하기가 어렵고, 변경될 수 있다. 기본적으로 UDP를 사용한다.

  • 전화번호부로 비유할 수 있다.
    • 연락처를 전부 외울 수 없으니 이름으로 저장하여 검색이 쉽다.
  • 도메인 명을 IP 주소로 변환해준다.
    • 사용자가 숫자로 된 IP 주소 대신 인터넷 도메인 이름과 검색 가능한 URL을 사용하여 웹사이트에 접속하는 것을 가능하게 한다. 사용자는 93.184.216.34와 같은 IP 주소를 기억하는 대신 www.example.com을 검색할 수 있다.

🤔💭

앞 부분에 HTTP 완벽가이드의 옮긴이의 말에 있는 부분을 인용했다. '정확한 근거에 기반한 올바른 기술적 판단을 할 수 있다'는 건 문제 해결 속도를 높이고 서비스를 제공할 때 어느 부분이 부족한 지 보충할 수 있는 통찰력를 갖게 한다. HTTP는 웹의 기반이라고 할 수 있는 부분이라 생각되었다.

브라우저 렌더링과의 관련성? 웹 브라우저가 처음 작동을 할 때 서버를 통해 모든 리소스를 얻는다. 서버를 통해 전송받지 못하면 클라이언트는 아무런 정보를 얻을 수 없는 것이다. 서버와 클라이언트를 이어주는 역할에 프론트엔드가 있다. 이어주기 위해선 서로에 대한 이해는 필수이기에 당연히 배우면 좋고 모든 부분은 아니겠지만 중요 개념은 꼭 배워야 한다는 것을 깨달았다.

TCP와 UDP의 경우엔 사용자에게 제공하려는 서비스에 따라 선택지가 달라질 것으로 보인다. 요즘엔 UDP의 사용이 높아졌다는데 스트리밍되는 서비스가 많아져서인 것 같다. 넷플릭스, 유튜브, 트위터 등. 최근에 또 많이 사용되는 ChatGPT마저...

DNS의 경우 특히 사용자 편의성을 위해 만들어진 시스템으로 보였다. 기업에서는 URL 네이밍도 직관적으로 사용자가 기억하기 쉽도록 고려한다. 따지고 보면 네트워크 자체가 사용자들을 연결해주는 분야이기에 당연히 모든 곳에서 고려했겠지만 말이다...

인터넷 네트워크에 대해 배워보았는데 강의 분량도 얼마 없고 책에도 큰 분량을 차지하지 않았다. 하지만 짚고 넘어가야할 중요한 부분들 같아 궁금한 점은 더 찾아보았다.


참조 ✅

0개의 댓글