HTTP Network (제1장 웹과 네트워크의 기본에 대해 알아보자) 대화형 정리

HTTP

HTTP는 무엇인가?

HTTP(HyperText Transfer Protocol) is an appointment. 클라이언트에서 서버까지의 일련의 흐름을 정해놓은 약속. 무슨말이냐면, 그런거야. 음 영화에서 모스부호로 막 비밀얘기하자나 그런거랑 비슷한데 웹상에서 정보를 전달하기 위해 정해놓은 약속 이라 생각하면 쉬울거야. 그냥 웹상에서의 약속이라고 넘어가면돼 이런 추상적인 개념을 한번에 이해한다면 넌 인터스텔라!!

HTTP는 왜 배워야할까?

근데 HTTP를 왜 배워야할까? 겁나 재미없자나 다른것들은 막 이것저것 만들면 짠하고 멋지기도 하고 근데 HTTP는 영 그런 꿀잼도 없고 … 그런데 있자나 우리 같은 개발자가 어플리케이션을 만들자나 그런데 우리가 만든 어플리케이션을 웹상에서 서비스하고 싶어 그렇다면 뭐가 달라질까? 바로 웹이라는 환경에서 우리의 어플리케이션에 사용자가 URL로 접근하게 만들고, 로그인하고 세션설정하고, 쿠키셋팅하고, 인증, 보안 그외 에도 이것저것 막 하게돼 그런것들이 가능하게 된 것은 바로 HTTP라는 약속이 존재하기 때문이지. 물론 이전에 네트워크 개념이 들어가겠지만 말이야. 그래서 너가 웹 분야에서 고급진 기능을 구현하고 이해하는 개발자가 되고 싶자나 그러면 너는 이것을 꼭 공부해야 할거야. 그래 그러면 공부하자 ㅇㅋ?

네트워크의 기본은 TCP/IP

뭐야 HTTP 공부한다면서 짜증나게 왠 네트워크야!!!!

어 미안…ㅠㅠ HTTP를 이해하기 위해서는 TCP/IP 마스터는 아니어도 기본정도는 알아야 HTTP를 이해하는데도 도움이 되거든 … 그러니 조금만 참아줘.

TCP/IP 란?

일반적으로 인터넷을 포함한 우리가 언급하는 네트워크의 대부분은 TCP/IP라는 프로토콜 상에서 작동하고 있어. HTTP는 그 중 하나야.

아니 무슨말이냐. HTTP가 이미 프로토콜이라며 ㅡㅡ? 근데 왜 또 TCP/IP 도 프로토콜인데 짜증나!! 너 나랑 장난해!!?

잠시만 기달려봐 아직 내말 끝난게 아니야… 컴퓨터와 네트워크 기기가 상호간에 통신을 하기 위해서는 서로 같은 방법으로 통신하지 않으면 안돼. 쉽게 설명하자면 이런거야 너가 어떤 미지의 외계인이랑 성공적인 대화를 원한다고 치자. 어떻게 해야 성공적인 대화(통신)이 이루어질 수 있을까? 바로 사전에 어떤 언어를 사용하여, 어떤 통신 채널을 이용하여, 어떤 이야기를 진행해야 할지 규칙을 정할 필요가 있을거야.

이렇듯 서로 다른 하드웨어와 운영체제 등(각기 다른 외계 종적)을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요한 것이란 말이지. 이러한 규칙이 프로토콜이며, 인터넷에 관련된 이러한 프로토콜들의 집합을 TCP/IP라 말할수 있지!!!!

TCP/IP 프로토콜에는 우리가 한번쯤 들어봤을 만한 FTP, DNS, HTTP, IP, SNMP 등 포함되어 있어. 포기하지마 친구.

TCP/IP 계층

TCP/IP에서 꼭 이해해야할 개념 중 하나가 계층(Layer)이야. 개발을 하다보면 계층을 나누는게 얼마나 중요한지 본능적으로 깨닫는 순간이 있어. 예를 들자면 Interface의 개념을 이해하는 순간, 혹은 Service Layer와 Persistance Layer의 필요성을 이해하는 순간 등… 사실 나도 직관적으로 이해할뿐 설명하라면 버버벅 어렵더라.ㅠㅠ 아무튼 계층화를 하는 이유는 분명 메리트가 있어서 일거란 말이지.

계층을 나눌때 가장 큰 장점은 유지보수야. 계층이 나누어저 있지 않다면, 정해진 약속이 하나의 변경이 전체의 변경으로 이루어 질 수 있지, 하지만 계층들을 독립적으로 나누어 놓았다면 변경을 요하는 계층과 인접한 계층만 변경하면 될거야.

계층은 대충이해했고, TCP/IP는 어떻게 계층을 나눴다는거야?

오 좋은 질문이야!!! TCIP/IP의 계층들은 기능적으로 잘 분리되어 있어. 4가지 계층으로 나눌 수 있는데 아래에 간략히 정리해 놓을게.

  • 어플리케이션 계층 - 클라이언트와 가장 가까운 프로토콜들이 활동하는 어플리케이션 계층으로서 어느 웹 페이지를 보고 싶다라는 HTTP Request를 만드는 등 클라이언트의 요구사항을 규칙에 맞게 정리하는 역할을 합니다. HTTP, DNS, FTP 등 우리와 친숙한 어플리케이션과 프로토콜 이 포함되어 있어.
  • 트랜스포트 계층 - 어플리케이션 계층에서 받은 데이터를 통신하기 쉽게 조각내어 안내번호와 포트 번호를 붙여 네트워크 계층에 전달합니다.
  • 네트워크 계층 - 네트워크 상에서 패킷의 이동을 다룹니다. 패킷이란 정송하는 데이터의 최소 단위입니다. 인터넷의 경우 request를 보내는 컴퓨터에 도달하기 까지의 길을 결정하는 역할을 합니다.
  • 링크 계층 - 네트워크에 접속하는 하드웨어적인 면을 다룹니다. 데이터 링크 계층, 혹은 네트워크 인터페이스 계층이라도 부릅니다. 저와 같은 경우는 하드웨어와 운영체제를 연결하는 인터페이스 계층으로 이해했습니다.

HTTP와 친근한 프로토콜들 IP/TCP/DNS

이번 포스팅의 마지막 주제로 HTTP와 친구들을 공부해볼까해. 이 친구들은 HTTP와 아주 긴밀한 관계를 맺고 있기 때문에 공부가 필요해.

IP - 먼저 이 친구들 중 짱을 맞고 있는 IP에 대해 살펴보자. IP는 TCP/IP라는 명칭의 일부가 될 정도로 중요한 프로토콜 이야. 위키에 IP는 아래와 같이 정의되있어

인터넷 프로토콜(IP, Internet Protocol)은 송신 호스트와 수신 호스트가 패킷 교환 네트워크(패킷 스위칭 네트워크, Packet Switching Network)에서 정보를 주고받는 데 사용하는 정보 위주의 규약(프로토콜, Protocol)이며, OSI 네트워크 계층에서 호스트의 주소지정과 패킷 분할 및 조립 기능을 담당한다. 줄여서 아이피(IP)라고도 한다.

와우 이게 무슨 어매이징한 멍멍스러운 소리일까????!! 송신, 수신, 호스트, 패킷, 규약 ㅣㅇ나ㅓ리ㅆㅃ. 침착하자. HTTP 스터디를 시작할때 다짐하지 않았던가 이 정도 시련은…

아마도 앞에 공부한 맥락을 보고 IP의 정의를 유추해보자. 인터넷상에서 패킷이라는 데이터의 최소 단위로 정보를 주고 받으며, 이를 상대방에게 보내기 위해 미리 정해놓은 약속 쯤으로 생각하고 넘어가자. 시간이 우리의 관계를 해결해줄 것이라 믿으며…

TCP - 다음은 2짱 TCP 프로토콜이다. 우리 2짱 TCP 형님은 Tansmission Control Protocol, 전송제어프로토콜, 이름에서도 알수 있듯이 트랜스포트(전송) 계층에 속하며 위키의 정의를 살펴보자.

전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다.

역시나 정체 모를 외계음성이 들린다… 침착해. 키워드를 뽑아보자. 전송? 제어? 옥텟? 전송계층? 정보전달을 통제? 음… 역시나 멍멍멍. 아이큐 100이상인 원숭이 보다 똑똑한 머리로 유추를 해보자면,

TCP 프로토콜은 사전 약속이다. 어떤 약속? 1바이트(옥텟)를 안정적으로, 순선대로, 에러없이 교환 할 수 있게 하는 사전 약속. 다시 한번 정리하자면, Transmission Control Protocol은 데이터를 안정적으로, 순서대로 교환 할 수 있게 해주는 전송 계층에서의 사전 규약이다.

DNS - 마지막은 빵셔틀을 담당하는 DNS(Domain Name System) 친구를 알아보자. 헐 까페가 끝날 시간이란다. 시간이 없다ㅠㅠ. 빠르게 정리해보자. 위키의 정의를 보자.

도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터(또는 네트워크로 연결된 임의의 장치)의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해준다. 도메인 네임 시스템은 흔히 “전화번호부”에 비유된다. 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.example.com과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템이다.

이 빵셔틀 친구는 심플하게 전화번호부 하나로 설명이 끝난다. 구글에 접속하기 위해 192.312.233.1 을 치는 것보다 google.com을 치는것이 편하다. 바로 이것이 DNS 존재의 이유다. 호스트 도메인의 이름(https://www.google.com)을 네트워크 주소(192.312.233.1)로 바꾸거나 그 반대 변환의 수행하는 역할을 한다.

이런 간단히 정리한다는게 내면의 나와 대화를 하다보니 불필요한 내용도 많이 첨가되고 했지만, 초보 새로새로에게 많은 도움이 됐으면 좋겠다.

Reference

  • Book - 그림으로 배우는 HTTP Network

잘못된 부분에 대한 지적은 언제든지 감사히 받겠습니다. 포스팅의 첫번째 목적은 작성자의 학습이므로 Context가 틀어지는 경우가 있을수 있습니다.
rochan87@gmail.com

프로덕션 환경에서 블랭크 페이지를 만난다면?