Kojima Production 에서 만든 Death Stranding 이라는 게임에 대해 사람들이 물으면, 게임 디렉터인 Hideo Kojima 는 간단히 연결이라고 답했다고 한다.
위의 게임 속 미국은 사실상 망해버렸다.
물론 시간이 빨리 흘러가는 비가 내리거나 사람들이 괴물로 변하는 것도 있지만, 가장 중요한 이유는 미국의 각 주가 교류하지 못하고 각자의 벙커 속에서만 생활하게 되었기 때문이다.
개인적으로 IT 산업이 비약적으로 성장할 수 있었던 이유는 사람들의 생활에 많은 도움을 주었기 때문이라고 생각한다. 이 게임의 주인공처럼 배달서비스를 하는 사람들을 돕는 데엔 네트워크도 큰 몫을 하고 있다.
더 빠르고 접근성 있는 서비스를 제공하는 애플리케이션은 좋은 UI/UX 나 좋은 하드웨어도 중요하지만, 네트워크를 뺄 수는 없는 것이다.
이 책은 '2022 코드스쿼드 마스터즈 코스' 에서 수업 중 추천받은 책이다.
당시 마스터분께서 하신 말씀으로는 "네트워크는 어렵기도 하지만, 굉장히 넓은 분야를 배워야 하므로 쉬운 책부터 차근차근 시작하는 것이 좋다" 고 하셨기 때문에 이 책으로 입문해 보기로 하였다.
이 책을 사기 전에 한줄 리뷰들을 읽어보았는데 대체로 좋다는 의견이었다. 단점으로 지적되는 것은 번역의 아쉬움과 깊이의 아쉬움이 있었다.
번역은 나도 갸우뚱 한 경우가 있긴 하지만 책의 내용을 해칠 정도는 아니라고 생각한다. 깊이는.... 네트워크란 도대체 얼마나 깊이 들어가야 하는 것인지 뭔가 두려워졌다.
같이 소개받은 "TCP/IP 쉽게 더 쉽게" 라는 책은 현재 3분의 1 가량 읽어보았는데, 이 책을 읽고 다음에 바로 읽어보시길 추천한다. 현재 소개하고 있는 책이 HTTP Request 를 보내고 HTTP Response 를 받는 것에 초점이 맞춰져 있다면, "TCP/IP 쉽게 더 쉽게" 는 Request 나 Response 가 어떻게 알맞은 목적지에 도착하는지 자세히 알 수 있다.
이 책의 내용을 도식화해 보았다. 그 외의 많은 내용도 들어있지만, 개인적으로 중요하게 생각한 부분만을 포함하여 정리하였다.
(1) 네트워크를 공부를 위한 이론 ---> (2) Client/Server와 HTTP의 특성
|
(2) HTTP Message
|
(4) HTTPS/SSL <--- (3) Request/Response Header <--- (2) Web Server
|
|
(5) HTTP의 대안 ---> (6) 그 외(Authentication 방법, 웹 공격)
그렇다면 이 책을 어떻게 읽었는지 아래에 적어나가도록 하겠다.
1장에서는 HTTP의 간단한 정의와 역사를 정말 압축하여 정리하였다.
그 뒤에는 TCP/IP 에 대해 약 16페이지로 정리하고 있다. HTTP, TCP/IP, IP, DNS, MAC, TCP/IP 계층, URI/URL 등에 대한 지식이 굉장히 애매하고 뒤죽박죽 이었는데 명확히 정리해주고 있어서 정독하였다.
2장부터는 시야가 TCP/IP 의 애플리케이션 계층으로 넘어간다.
Client/Server, HTTP의 특성, HTTP Message의 정의와 구조 및 요소들에 대한 설명을 자세히 하고 있다.
HTTP의 특성인 Stateless, Connectless 특성에 대해 정리하고 그에 따른 대응방안(지속 연결, 파이프라인화, 쿠키)은 흥미로웠다. 중요하다고 생각하여 정독하였다.
3장에서는 애플리케이션 계층에서 애플리케이션 자체로 시야가 이동한다. HTTP Message에 대해 더 깊이 파고들어가 보자.
HTTP Message 는 Client/Server 가 HTTP 프로토콜을 이용해 전달하고자 하는 여러 정보들의 집합이다. HTTP Message로 데이터를 보내는 Data Encoding 방식, Multipart 방식, Range Request 방식이 소개되었다.
HTTP Message로 원하는 데이터를 전달받기 위한 Contents-Negotiation 방식에 대한 설명도 들어간다. 많이 들어보기만 했지 정확히 알고 있지는 못하고 있어서 무조건 정독이었다.
4장은 HTTP Status code 에 대해 설명한다.
개인적으로는 이 부분에 대해서는 깊게 파고 들 생각이 없었다. 404, 200, 503, 500 등의 중요한 에러 이외에는 그때그때 찾아보면 될 것 같다고 생각했다. 이 책에는 이것 말고도 중요한 부분들이 많기 때문에 적당히 훑어 보기만 하였다.
5장에서는 드디어 Web Server 에 대한 얘기가 나온다.
상당히 흥미로운 얘기가 많이 나오는데 실무에서 많이 다루는 내용이라는 생각이 들어서 자세히 읽어보게 되었다.
특히 가상 호스트같은 용어는 직관적이지만 Proxy, Gateway, Tunnel 같은 용어는 굉장히 생소하였던 것이라 다시 공부할 수 있는 좋은 기회였다. 마지막에는 Cache에 대해 정리해주는데 머릿속에 들어있는 Cache에 대한 잡 지식들을 합쳐볼 수 있었다.
6장에는 헤더에 대한 내용이 등장한다.
이 책의 장 중 가장 많은 페이지 수를 기록했다. 처음에는 생각없이 페이지를 넘겨나갔는데, 왜인지 끝나지가 않아서 당황했다.
각자의 생각이 있겠지만, 개인적으로는 많이 사용하는(하게되는) Header-Field만 알아보고 그 외에는 한번 훑어보는 것으로 충분하다고 생각한다. 개인적으로 자주 언급되는 Header-Field 는 아래와 같다. 그래도 한번 쭉 읽어놓으면 나중에 얘기가 나왔을 때 쉽게 자료를 찾아볼 수 있을 것이라고 생각한다.
마치 쓰나미같았던 6장의 Header를 뚫고 오니 7장에서는 본인이 가장 기대를 많이 한 SSL에 대한 설명이 나왔다.
이 책에서는 먼저 HTTP의 보안 상 문제점을 지적하고 있었다.
이런 문제점 때문에 도청이 불가능하고 상대방을 인식할 수 있는 증명서와 공개키/공통키 방식을 활용한 HTTPS 통신을 사용해야 한다는 것이 주된 내용이었다. HTTPS는 사실 SSL이라는 프로토콜과 HTTP 프로토콜을 조합한 통신이라는 뜻이라는 것을 알 수 있었다. SSL은 증명서와 공개키/공통키 방식을 활용하는 프로토콜이다.
이 부분은 정독해서 내용을 숙지하기로 하였다.
다음 8장은 인증 방식에 대한 정리인데 간단히 내용을 훑고 정리하는 것으로 넘어갔다.
9장은 HTTP의 심플함 때문에 생기는 문제를 개선하기 위해 개발중인 프로토콜들을 제시하고 있다. 개인적인 경험으로는 WebSocket과 HTTP2.0 은 현업에서도 많이 언급되는 것 같아서 이 부분은 자세히 읽어보았다.
10장은 웹 콘텐츠에서 사용하는 기술로 HTML, CSS, Java, Javascript 등을 언급하고 있었다. 간단히 훑어보는 것으로 하고 다음으로 넘어갔다.
마지막 11장은 웹 공격 기술들에 대해 설명한다.
굉장히 많은 내용이 있는데 각 내용을 간단히 독서노트에 정리해 두었다. 정리한 이유는 반복적으로 살펴보면서 "이 부분은 프로그래밍할 때 주의해야겠다" 를 되새기기 위함이었다.
정독이라고는 못하겠지만, 그래도 모든 내용을 빠짐없이 읽어보았다.
나는 처음에 웹 프론트/백엔드 직무로 유지보수 업무만을 했기 때문에 굳이 이런 걸 몰라도 업무에 지장이 없었다. 그런데 이 책을 읽고나니 드는 생각은, "모르면 큰일 날 수 있겠다" 였다. FE 만이 아니라 iOS/Android 도 잘못된 Request 를 보내는 상황에 대응하기 위해서는 HTTP 프로토콜에 대해 알아야 한다.
예를 들어 쿠키를 활용한 통신을 왜 해야하는지 이해할 수 없다면, 굉장히 지루하게 관련 클래스만 공부하거나 stackoverflow 에서 코드를 복사하는 것만 하게 될 것이다. 맥락을 이해한 상태에서 기능을 구현한다면 분명 더 좋은 코드를 작성하게 되지 않을까?
모든 직무, 모든 프로그래머 중 네트워크 공부를 처음 시작해보고 싶다면 가장 많이 사용하는 HTTP 공부를 추천드리고, 그 시작으로 이 책을 추천드리고 싶다.
썸네일 : https://www.kojimaproductions.jp/en/death-stranding-pc
아주 훌륭합니다
네트워크 공부를 하긴해야지 하고 있었는데 자극받네여 굿굿