아주 기본적이고 간단한 내용만 정리한다



크게 웹 서버와 웹 브라우저로 나눌 수 있다



웹 서버란 무엇인가?


기본적으로 네트워크로 소켓이 뚫려있다


요청이 들어올 때까지 대기하는 프로세스로 상주한다


요청이 들어오면 HTTP 프로토콜 스펙에 의해 정보를 해석한다


HTTP 프로토콜에 따라 응답한다


이 때 HTTP Path 의 라우팅에 따라 여러가지로 나뉘는데,


1. 클라이언트가 요청하는 파일을 전송한다


2. 클라이언트가 요청하는 데이터를 처리하여 전송한다


이 과정에서 세션 정보의 갱신 등이 있을 수 있다


응답이 끝났으면 다음 요청을 기다린다


이게 웹 서버의 아주 기본적인 프로세스 끝



웹 브라우저란 무엇인가?


기본적으로 OS 의 GUI 에 맞게 실행된다


사용자가 페이지 주소를 입력하면 자동완성 등의 기능으로 한 번 훑는다


사용자가 페이지 접속 요청을 하면


1. HTTP 프로토콜에 따라 해당 페이지의 요청 데이터를 만든다


- 이 과정에서 User-Agent, Cookie 등의 정보가 사용된다


2. 마찬가지로 클라이언트 소켓을 통해 네트워크로 HTTP 데이터를 전송한다


3. 요청에 대한 응답을 받으면 HTTP 프로토콜에 따라 정보를 해석한다


- 이 과정에서 서버에서 Set-Cookie 한 데이터를 쿠키에 저장한다


- 304 Not Modified 같은 정보를 받으면 캐시에서 검사하고 있으면 렌더링, 없으면 재요청한다


4. HTML 페이지 데이터를 받아 DOM 으로 바꾸고 화면에 렌더링한다


- 렌더링하는 과정에서 그래픽 작업이 수행된다


5. favicon, script, stylesheet, image 등 외부에 요청해야 하는 링크를 획득한다


6. 비동기적으로 모두 요청 시작


7. 요청에 대한 응답들에 대해 처리한다


- 이미지 같은 경우 페이지의 해당 DOM 에 그려준다


- CSS 등의 스타일을 각 DOM 의 Element 에 적용하고 렌더링한다


- 스크립트 같은 경우에 V8 엔진을 통해 DOM 이 injection 된 JavaScript 로 실행한다


이제 사용자 입력을 기다리고 입력에 따라 다시 스크립트 이벤트를 발생시키거나 요청을 실행한다


여기서 웹 소켓도 쓴다면......



내가 아는 것 중에서 간단하게만 적은거임


웹 브라우저 한번 구현해보면 얼마나 해야할게 많은지 얼마나 좆같은건지 알 수 있음


네트워크, 그래픽, 데이터 처리, File I/O 온갖걸 다 해야함


사실 내부적으로 더 많은 일이 발생하고있음


게임 엔진과 웹 브라우저 개발만이 진정한 이 시대의 IT 기술의 집합체다