URL 입력, 렌더링 과정, 네트워크 프로토콜과 주소, 웹 캐시

Previous Next

TL;DR

네트워크 프로토콜

HTTP, HTTPS, FTP, DNS, ARP, DHCP


네트워크 주소

MAC 주소, IP 주소


URI vs URL vs URN


URL 입력과 렌더링 과정

  1. 사용자가 브라우저의 주소창URL을 입력한다.

  2. 브라우저는 DNS를 통해 서버의 진짜 주소(IP 주소) 찾기 (캐시 -> DNS 서버)

  3. HTTP 프로토콜 사용해 HTTP 요청 메세지 생성

  4. SOCKET 라이브러리 통해 TCP/IP로 3-way Handshake 실행해 서버와 연결

  5. TCP/IP 연결을 통해 웹 서버에 HTTP 요청 전송

  6. 서버는 요청을 처리하고 HTTP 프로토콜 활용해 HTTP 응답 메세지 생성

  7. TCP/IP 연결 통해 요청한 사용자에게 HTTP 응답 전송

  8. 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 렌더링 되어 사용자에게 화면으로 출력

    a. 서버에서 HTML을 받아온다.

    b. HTML을 구조별로 분류하여 DOM 트리를 생성

    c. CSS 파일과 스타일 요소를 분류하여 CSSOM 트리를 생성

    d. DOM Tree와 CSS Tress를 Render Tree로 조합 (화면에 어떻게 배치할지 요소들의 크기와 위치를 계산)

    e. Render Tree 정보를 통해 어떻게 색칠할지 Painting 과정

    f. 화면에 출력


웹 캐시





네트워크 프로토콜



기본 네트워크 주소들




URI vs URL vs URN

Screen Shot 2022-10-03 at 11 39 09 PM URI는 인터넷의 자원을 식별할 수 있는 문자열을 의미한다.
그 중 어떠한 표준을 지켜서 자원을 식별하는 문자열을 URL, URN이라고 한다.
   


URI (Uniform Resource Identifier)



URL (Uniform Resource Locator)


URL 구조

URL 구조


https://www.youtube.com/watch?v=RUjG1et23ZM
file://127.0.0.1/Users/username/Desktop/



URN (Uniform Resource Name)

urn: ietf:rfc:2141 - 'RFC 2141' 문서


👆 여기서 잠깐!

URN은 왜 필요할까요?

URL은 주소이지 실제 이름이 아니라서 특정 시점에 위치한 곳을 알려줍니다. 그래서 리소스의 위치가 옮겨지면 이전의 URL로는 해당 자원을 찾을 수 없게 됩니다. URN은 위치(주소)나 접근법에 대한 명시 없이 리소스에 대해 이야기할 때 사용할 수 있습니다.

예를 들면, ISBN 시스템에서 ISBN 0-486-27557-4은 셰익스피어의 작품 로미오와 줄리엣의 특정 에디션을 지칭합니다. 이를 URN으로 나타내면 urn:isbn:0-486-27557-4으로 표기할 수 있습니다. 단, 이 표기법에는 어디에서 책의 사본을 찾아야 할지에 대한 정보는 포함하고 있지 않습니다.




URL 입력과 렌더링 과정

1. 웹 브라우저에 URL을 입력했을 때의 수행 과정

Screen Shot 2022-10-04 at 12 35 08 AM

  1. 사용자가 브라우저의 주소창URL을 입력한다.

  2. 브라우저는 DNS를 통해 서버의 진짜 주소(IP 주소) 찾기

    • 우선 DNS 기록 캐시를 확인 (browser, OS, router, ISP 등 여러 단계의 캐시로 구성)
    • 캐시에 없으면 ISP의 DNS 서버는 DNS query 보내서 해당 URL 갖는 서버의 IP 주소 찾기
      • ISP : Internet Service Provider의 약자로 인터넷을 통한 데이터 전송을 제공하는 업체 (SK, KT, …)
  3. HTTP 프로토콜 사용해 HTTP 요청 메세지 생성

  4. SOCKET 라이브러리 통해 TCP/IP로 3-way Handshake 실행해 서버와 연결

  5. TCP/IP 연결을 통해 웹 서버에 HTTP 요청 전송

    ✅ more information

    페이지에 대해서 묻는다면 GET 요청을, 증명 정보를 입력하거나 폼을 제출한다면 POST 요청을 보낼 것이다. 해당 요청에는 브라우저 식별 정보, TCP 연결 유지를 요청하는 헤더 등의 정보를 담고 있다.

  6. 서버는 요청을 처리하고 HTTP 프로토콜 활용해 HTTP 응답 메세지 생성

  7. TCP/IP 연결 통해 요청한 사용자에게 HTTP 응답 전송

    ✅ more information

    서버는 요청한 페이지와 상태코드, 인코딩 방식, 캐싱 방법, 프라이빗 정보등을 담아서 응답을 보낸다.

  8. 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 렌더링 되어 사용자에게 화면으로 출력

    ✅ more information

    브라우저는 HTML의 뼈대만 렌더링한 뒤, HTML의 태그를 확인하여 이미지, CSS stylesheet, JavaScript 파일과 같은 추가적인 요소에 대한 get 요청을 보내어 받고 표시한다. (static한 파일은 브라우저에 의해 캐시되기 때문에 다음에 동일한 페이지를 방문했을 때 다시 fetch해오지 않아도 된다.)




2. HTTP 응답의 렌더링 과정

Screen Shot 2022-10-04 at 1 01 18 AM

HTTP 렌더링이란?

화면에 표시할 웹 페이지를 만드는 것으로 HTML, CSS, 자바스크립트 등 개발자가 작성한 문서가 브라우저에 출력되는 과정을 의미한다.


렌더링 과정

  1. 서버에서 HTML을 받아온다.

  2. HTML을 구조별로 분류하여 DOM 트리를 생성

  3. CSS 파일과 스타일 요소를 분류하여 CSSOM 트리를 생성

  4. DOM Tree와 CSS Tress를 Render Tree로 조합

    (화면에 어떻게 배치할지 요소들의 크기와 위치를 계산)

  5. Render Tree 정보를 통해 어떻게 색칠할지 Painting 과정

  6. 화면에 출력


👆 여기서 잠깐!

누가(무엇이) 렌더링을 해주나요?

모든 웹 브라우저는 렌더링 엔진과 자바스크립트 엔진을 가지고 있습니다.

  • HTML, CSS 문서는 렌더링 엔진이,
  • 자바스크립트 코드는 자바스크립트 엔진이 읽어내 렌더링합니다.




웹 캐시


캐시 적용


캐시의 개선

유효 시간이 아니라 서버의 데이터가 변동된 경우에만 데이터를 가져오는게 효과적이지 않을까?

-> 검증 헤더와 조건부 요청 방법 사용하기


Last-Modified, If-Modified-Since


ETag, If-None-Match




더 알아보기




질문

URL에 https://www.naver.com 을 쳤을 때 일어나는 일에 대해 아는대로 설명해주세요


DNS를 사용하는 이유는?

인터넷은 서버를 유일하게 구분할 수 있는 IP 주소를 사용하게 되는데 이를 일일히 외우지 않아도 DNS 를 사용하여 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 용이하게 하기 때문에 사용합니다




References