본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
N-Audiance/독서

독서 | 그림으로 배우는 HTTP & Network Basic - 우에노 센

by dazwischen 2022. 3. 18. 22:25
반응형

책을 선택한 이유

개발을 시도해 보고 서비스를 만들어 보려는 시도 중에 가장 걱정스럽고 어렵게만 느껴지던 것이 보안이다. 어디에서 문제가 발생하고 어디를 관리해야 보안 관리가 되는지. 비전공자로서 하나부터 열까지 모르는 것 투성이었다. 보안 관련 웨비나도 들어보고 글도 찾아봐도 답은 도통 찾을 기미가 보이지 않는다. 하는 수 없이 일단은 답을 찾기 위해 책을 뒤져보게 된다. 우선 모든 서비스는 통신을 기반으로 이루어 지니까 통신 책도 가볍게 살펴 볼 겸 가벼운 책을 찾아보고 있었다. 그러다 그림으로 배우는 http & network basic 이란 책을 발견하였다. 실 제어 얼마나 쉬울지는 모르겠지만 뭔가 글로만 보는 것보단 이해가 쉬울 것 같아서 구매해 두었다.

그림으로 배우는 HTTP Network Basic 책이 놓여있다.
그림으로 배우는 HTTP Network Basic

책의 목차

그림으로 배우는 HTTP Network Basic 목차 두번째 페이지그림으로 배우는 HTTP Network Basic 목차 세번째 페이지
그림으로 배우는 HTTP Network Basic 목차
그림으로 배우는 HTTP Network Basic 목차 네번째 페이지그림으로 배우는 HTTP Network Basic 목차 다섯번째 페이지그림으로 배우는 HTTP Network Basic 목차 여섯번째 페이지
그림으로 배우는 HTTP Network Basic 목차
그림으로 배우는 HTTP Network Basic 목차 일곱번째 페이지그림으로 배우는 HTTP Network Basic 목차 열번째 페이지
그림으로 배우는 HTTP Network Basic 목차

책을 통해 알게된 것

GLOSSARY

용어
HTTP HyperText Transfer Protocol
HTML HyperText Markup Language
URL Uniform Resource Locator
TCP Transmission control Protocol
UDP User Data Protocol
Packet 전송하는 데이터의 최소 단위
MAC Media Access Control
IP Internet Protocol
ARP Address Resolution Protocol
Byte Stream 용량이 큰 데이터를 보내기 쉽게 TCP Segment 단위 Packet으로 작게 분해하여 관리하는 것
Three Way Handshaking SYN, ACK 플래그를 보내는 시스템
DNS Domain Name System
URI Uniform Resource Identifiers
Persistent Connection 지속 연결
chunked transfer coding 파일 분할 전송
MIME Multipurpose Internet Mail Extensions
SSL Secure Socket Layer
AJAX Asynchronous JavaScript + XML

네트워크의 기본 TCP/ IP 프로토콜

TCP/IP 프로토콜은 인터넷과 관련된 다양한 프로토콜의 총집합을 말한다. 따라서 IP 프로토콜을 이용하는 통신도 TCP/IP 통신이라 부른다. TCP/IP 프로토콜은 4개의 Layer로 이루어져 있다.

Application Layer  
Transport Layer 연결되어 있는 두 컴퓨터 사이 데이터의 흐름을 제공한다.
TCP, UDP 두 가지의 프로토콜이 있다.
Network Layer (Internet Layer) 네트워크상 패킷(Packet)을 어떤 경로를 거쳐 전송할지를 결정한다.
Link Layer (Data Link Layer, Network Interface Layer) 네트워크에 접속하는 모든 하드웨어를 관리한다.

HTTP가 캡슐화되고 읽히는 과정에 대한 그림이다.
HTTP가 캡슐화 되고 해석되는 과정

통신을 시작하면 클라리언트의 애플리케이션에서 HTTP Request 명령을 내린다. 그럼 TCP에서는 HTTP 메시지를 통신하기 용이하게 조각을 내고 안내 번호와 포트 번호 정보를 넣어 네트워크 계층으로 보낸다. IP계층이라 불리는 네트워크 계층에서 수신 서버의 MAC 주소를 추가하고 마지막 링크계층에서 마무리하면 송신 준비가 마무리된다. 이렇게 정보를 감싸는 과정을 캡슐화라고 한다. 

이 신호를 수신한 수신 서버에서는 반대의 순서로 캡슐을 제거하며 데이터를 읽어 나가게 된다.

IP - Internet Protocol

IP의 역할은 각각의 패킷들을 상대방에게 전달하는 것이다. 그 때 필요한 게 IP주소와 MAC이다.

IP 통신은  
   
   

MAC 주소에 의존한다. 여러 네트워크 장비를 거쳐 가더라도 변하지 않는 MAC 주소가 있기 때문에 최종 목적지에 도달할 수 있는 것이다.

TCP - Transport Control Protocol

신뢰성 있는 바이트스트림을 제공하기 위해서 한 번에 보내기 어려운 데이터를 TCP 세그먼트로 쪼갠다. 신뢰성이 있다는 것은 데이터가 수신자에게 도착했는지 확인할 수 있다는 뜻이다. 이때 사용되는 기능이 three way handshaking (신뢰성 보증)이다. 

상태 코드

  Class Description
1xx Informational Request를 받아서 처리중
2xx Success Request를 정상적으로 처리
3xx Redirection Request를 완료하기 위해 추가 동작이 필요
4xx Client Error 서버는 Request를 이해할 수 없음
5xx Server Error 서버에서 Request 처리 실패

자주 쓰이는 상태코드

상태코드 메시지 상태코드 메시지
200 OK 307 Temporary Redirect
204 No Content 400 Bad Request
206 Partial Content 401 Unauthorized
301 Moved Permanently 403 Forbidden
302 Found 404 Non Found
303 See Other 500 Internal Server Error
304 Not Modified 503 Service Unavailable

HTTP를 연계하는 웹 서버

  • 가상 호스트 Virtual Host

한 대의 HTTP 가상 호스트로 마치 여러 서버(컴퓨터)가 있는 것처럼 여러 웹 사이트를 서비스할 수 있다. 

  • 통신 중계 : 프록시

서버, 클라이언트 두 가지 역할을 수행할 수 있는 중계 프로그램이다. 프록시를 운영하는 이유는 두 가지가 있다. 네트워크 대역 등을 효율적으로 사용하려는 목적과 특정 접근에 대한 액세스를 제한하거나 로그를 획득하려는 목적이다.

  • 통신 중계 : 게이트웨이

서버와 클라이언트 중간에서 경유하는 서버의 역할을 한다. Resource를 가지고 있는 것처럼 HTTP Request를 수신하기 때문에 클라이언트는 게이트웨이로 전송됐다고 생각 못한다. 게이트웨이는 HTTP 서버 이외의 서비스 제공 서버로 연결해 주는 역할을 한다. 이를 통해 보안성을 높게 유지할 수 있다.

  • 통신 중계 : 터널

두 클라이언트와 서버를 중계하는 프로그램이다. 터널 자체는 HTTP Request를 해석하지 않는다. SSL과 같은 암호화 통신을 통해 안전한 통신을 목적으로 사용된다.

캐시 Cache

캐시는 클라이언트의 로컬 메모리, 브라우저, 프록시 서버 등에 보관 중인 리소스 사본들을 일컫는다. 반복적으로 전송받아야 할 데이터를 캐시로 저장해 두면 Request수와 통신량과 통신시간을 절약할 수 있다. 

감상평

개발을 시도해 보면서 매일같이 HTTP를 다룬다. 그렇지만 그 안이 어떻게 구성되어 있는지 그리고 HTTP라는 게 도대체 뭔지. 프로토콜이라는 건 느낌도 오지 않고. 그럼에도 이렇게 책을 사서 읽어 볼 만큼 공부하려는 마음은 없었다. 개발은 하지만 개발자로 살려는 마음이 있었던 것도 아니었고 이렇게 까지 깊이 알지 않아도 기초적인 서비스는 론칭할 수 있을 것이라고 생각했다. 뭐 물론 그렇게도 런칭은 할 수 있었겠지만 내가 만들고 싶은 서비스의 안정성은 포기할 수 없었다. 안정성을 갖추기 위해서 뭘 어떻게 해야 하는지 여기저기 다니며 들어보고 찾아봐도 해답을 찾을 수 없었기에 그 답을 찾는 과정에 이 책도 읽게 되었다.

어떤 지식이나 기술을 배우다 보면 논리적 비약이 존재한다. 너무 맥락이 자명해서 논리적 비약이라고 느끼지도 못하고 넘어갈 때도 있지만 그 비약이 너무나 크게 느껴질 때도 있다. 직관적으로 이해하고 넘어가 주면 참 좋을 텐데 나는 그 비약들에서 자주 헤매곤 한다. 직관이 부족하거나 비약이 없을 수 있다. 다행히 이번 책은 내가 헤매던 그곳에 비약이 있었음을 조금이나마 알려주었고 그 비약에 이야기 다리를 두어 두 지식 사이를 이어주었다. 이 정도의 이해만 있어도 자연스럽게 지식과 기술을 이용할 수 있는 딱 그 수준의 다리 말이다.

나에게 응원을

그런 비약 사이에서 너무 오랜 시간을 헤매고 있단 생각이 들기 시작하면 점점 조바심이 나고 불안해진다. 어서 빨리 헤쳐나가서 다른 사람들처럼 달려 나가야 하는데... 그런데 그 사람들도 모두 이미 이 시간을 거쳤을지 모른다. 너무 성급하지 말자. 겨우 드문드문 노력한 2년의 시간을 쓴 것뿐이다. 그럼에도 답을 찾고 찾다 보면 이렇게 조금씩 나아가지 않는가. 답을 찾기 위해 노력함과 그 노력으로 답에 가까워지고 있는 나에게 스스로 응원해주고 싶다.

이런 분들에게 추천

이 책은 너무 어렵지도 너무 깊지도 않아서 개론서만큼 잘 고른 책이었다. 때문에 비전공자이면서 통신이 궁금하신 분들, 백엔드 개발자 혹은 개발자가 되고 싶은 지망생들에게 추천한다. 전공자들에겐 어렵지 않은 교양서처럼 읽고 리마인드 할 수 있는 책이 아닐까 생각도 해본다.

반응형

댓글