URL(Uniform Resource Locator)은 인터넷 상의 리소스(웹 페이지, 이미지, 비디오 등)의 고유 위치를 나타내는 문자열이며, 해당 리소스에 접근하기 위해 사용됩니다. URL은 웹 주소라고도 불리며, 웹 브라우저에 입력하여 인터넷 상의 리소스를 가져오는 데 사용할 수 있습니다.
URL은 다음과 같은 구성 요소로 이루어져 있습니다.
예를 들어, 다음과 같은 URL 구성 요소를 살펴볼 수 있습니다:
https://example.com:443/path/to/resource?query=value#fragment
URL을 사용하여 웹 브라우저는 인터넷 상의소스를 식별하고, 접근하여 웹 페이지를 렌더링하거나 파일을 다운로드할 수 있습니다.
URI(Uniform Resource Identifier)와 URL(Uniform Resource Locator)은 서로 관련되어 있지만 차이점이 있습니다.
URI는 인터넷 상의 고유한 식별자를 나타냅니다. 즉, 인터넷 상의 어떤 리소스든지 식별하는 데 사용됩니다. URI는 URL과 URN(Uniform Resource Name)으로 구분됩니다.
URL은 URI의 하위 개념이며, 인터넷 상의 리소스의 위치를 나타냅니다. 예를 들어, http://www.example.com/index.html은 웹 사이트의 홈 페이지를 나타내는 URL입니다.
반면에 URN은 리소스의 이름을 나타냅니다. 예를 들어, urn:isbn:0-486-27557-4은 "Introduction to the Theory of Computation" 책을 식별하기 위한 URN입니다. 우리는 이 URN을 사용하여 책을 찾고 가져올 수 있습니다.
따라서 URL은 인터넷 상의 리소스의 위치를 찾기 위한 식별자이고, URI는 인터넷 상의 어떤 리소스든지 식별하기 위한 식별자라는 차이가 있습니다.
DNS 캐싱이란, 이전에 방문한 도메인 이름에 대한 IP 주소를 메모리 또는 디스크에 저장해 두고, 동일한 도메인 이름에 대한 다음 요청에서 IP 주소를 빠르게 반환하는 기술을 말합니다. DNS 캐싱을 사용하면 사용자의 웹 브라우저나 컴퓨터에서 다시 DNS 서버로 요청을 보내지 않고, 이전에 수행했던 DNS 조회 결과를 로컬에서 참조할 수 있습니다.
DNS 캐시는 DNS 조회 속도를 크게 향상시키며, DNS 서버의 부하도 감소시킵니다. DNS 조회 요청이 캐시된 결과를 불러온다면, 원격 DNS 서버에 다시 요청을 보내지 않아도 되므로 전체적인 인터넷 연결 속도 향상을 가져올 수 있습니다.
그러나 DNS 캐싱은 항상 최신 정보를 제공하는 것이 아닙니다. IP 주소가 변경된 경우 DNS 캐시는 이에 대한 업데이트를 수행하지 않으므로 사용자는 변경된 IP 주소를 직접 찾게 됩니다. 이는 웹 사이트를 호스팅하는 서버를 전환하는 경우 또는 DDoS 공격을 받는 경우 등에서 문제가 될 수 있습니다. 따라서, DNS 서버는 캐시된 정보의 유효 기간을 설정하고, 일정한 주기로 DNS 조회 결과를 갱신하는 작업이 필요합니다. 이를 통해 DNS 캐시의 무효한 내용을 최소화하고, 사용자가 항상 최신 IP 주소를 찾을 수 있도록 도와줍니다.
HTTP(Hypertext Transfer Protocol)는 월드 와이드 웹(World Wide Web)에서 웹 서버와 클라이언트(웹 브라우저) 간에 데이터를 교환하는 데 사용되는 통신 규약입니다. HTTP는 클라이언트에서 서버로 요청(Request)을 보내고 서버에서 클라이언트로 응답(Response)을 제공하는 방식으로 동작하며, 기본적으로 비연결성 특성을 가지고 있습니다.
HTTP는 다음과 같은 주요 구성 요소로 이루어져 있습니다
메서드(Methods): HTTP 요청을 표현하는 동작입니다. 주로 사용되는 메서드에는 GET, POST, PUT, DELETE, PATCH 등이 있습니다.
헤더(Headers): 요청과 응답 모두에 포함되는 메타데이터입니다. 헤더를 통해 클라이언트와버간에 다양한 정보를 전달할 수 있습니다. 예를 들어, 콘텐츠 유형(ContentType), 인증(Authorization) 정보 등이 헤에 포함될 수 있습니다.
본문(Body): 요청과 응답에 포함되는 실제 데이터입니다. 본문은 주로 POST 및 PUT 요청에 사용되며, 서버로 전송되는 데이터를 담고 있습니다.
상태 코드(Status Codes): 서버로부터의 응답 상태를 나타내는 세 자리 숫자입니다. 상태 코드를 통해 클라이언트는 요청에 대한 결과를 알 수 있습니다.
요약하면, HTTP는 웹 서버와 웹 브라우저 간의 통신을 위한 표준 프로토콜, 요청/응답 메커니즘을 통해 데이터를 송수신합니다. HTTP는 메서드, 헤더, 본문 및 상태 코드와 같은 여러 구성 요소를 사용하여 이러한 통신을 가능하게 합니다.
TCP 연결 설정은 3-way handshake 과정을 거쳐 이루어집니다.
DNS(Domain Name System)은 인터넷에서 도메인 이름을 IP 주소로 매핑하는 시스템입니다. 인터넷에서 이메일을 보내거나 웹 사이트에 접속하는 등의 작업을 할 때 DNS를 이용하여 도메인 이름을 IP 주소로 변환합니다.
DNS 서버는 전세계적으로 분산되어 있는데, 인터넷에서 도메인 이름에 대한 요청을 받으면 이를 처리하여 적절한 IP 주소로 매핑합니다.
웹 페이지의 렌더링이란, 웹 브라우저가 서버로부터 수신한 HTML, CSS, JS 등의 코드를 해석하고, 이를 화면에 그리는 과정을 말합니다.
웹 브라우저는 HTML 코드를 분석하여 DOM(Document Object Model) 트리라는 구조를 구성합니다. DOM 트리는 HTML 문서의 각 요소(element)들의 상하위 포함구조를 나타내기 위한 구조체입니다. 그리고 CSS 코드를 분석하여 CSSOM(Cascading Style Sheets Object Model) 트리라는 구조를 구성합니다. CSSOM 트리는 각 요소에 대한 CSS 스타일 정보를 포함하는 구조체입니다.
DOM 트리와 CSSOM 트리가 완성되면, 두 개의 트리를 결합하여 렌더 트리(Render Tree)를 구성합니다. 렌더링 엔진은 렌더 트리를 생성하면서 각 노드의 레이아웃과 스타일 정보를 결정합니다. 이후, 브라우저는 렌더링 엔진을 사용하여 렌더 트리를 기반으로 요소 위치, 크기, 색상 등의 다양한 속성을 계산하고, 이를 화면에 표시합니다.
이러한 렌더링 과정은 웹 페이지의 레이아웃 및 디자인에 대한 사항을 결정하고, 사용자의 눈에 보여지는 최종 결과물을 생성합니다. 따라서, 웹 페이지의 렌더링 품질과 속도는 사용자 경험을 유지하기 위해 매우 중요합니다.