1. URI? URL? URN?
1) URI(Unifrom Resource Identifier)
URI = URL + URN

Uniform : 리소스를 식별하는 통일된 방식
Resource : 자원 = URI로 식별할 수 있는 모든 것(제한 X)
Identifier : 다른 항목과 구분하는데 필요한 정보
2) URL(Unifrom Resource Locater), URN(Uniform Resource Name)
Locater: 리소스가 있는 위치를 지정
Name : 리소스에 이름을 부여
전체문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
scheme
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
userinfo
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko
host
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko
port
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko
path
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko
query
scheme://[userinfo@]host[:port][/path][?query][#fragment]
htps://www.google.com:443/search?q=hello&hl=ko
fragment
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-introducing-spring-boot
웹 브라우저에 URL 입력

IP, PORT 정보로 HTTP 요청 메세지 생성
IP는 DNS를 조회해서 얻고, PORT는 생략되어 있으면 포로토콜(https)를 보고 유추한다.

<HTTP 요청 메세지>

HTTP 메서드 전송
SOCKET 라이브러리를 통해
1) 헤더 부분에 IP, PORT 정보를 넣어 3way-handshake로 웹 브라우저(클라이언트)와 웹서버(서버)를 연결한다
2) 연결이 되면, HTTP메시지를 TCP/IP 계층에 전달한다.

패킷 생성
헤더 부분에 출발지 IP, PORT, 목적지 IP, PORT 정보등을 담고 데이터 부분에 HTTP 메시지를 담아 TCP/IP 패킷을 생성한다.

요청 패킷 전달
TCP/IP 패킷이 웹 브라우저(클라이언트)에서 수많은 중간 노드를 거쳐 웹서버(서버)에 패킷을 전달한다.

서버에 요청 패킷 도착

서버에서 HTTP 응답 메시지 생성
웹서버 (서버)에 도착한 패킷의 헤더 부분은 버리고 HTTP 메시지(데이터 부분)을 서버가 해석하여 HTTP 응답 메시지를 만든다
<HTTP 응답 메시지>

서버에서 응답 패킷 전달
헤더 부분에 출발지 IP, PORT, 목적지 IP, PORT 정보 등을 담고 데이터 부분에 HTTP 응답 메시지를 담아 만든 응답 패킷을 웹 브라우저(클라이언트)에 전달한다.

웹 브라우저에 응답 패킷 도착

웹 브라우저 HTML 렌더링
웹 브라우저(클라이언트)가 웹 서버로부터 받은 응답 패킷에서 헤더 부분을 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.
<웹브라우저 요청 흐름 정리>
웹 브라우저 = 클라이언트, 웹 서버 = 서버
1) 웹 브라우저에 입력된 URL로 부터 IP, PORT 정보를 얻고 웹 브라우저가 HTTP 요청 메시지를 생성한다.
2) 애플리케이션 계층의 소켓 라이브러리를 통해 IP, PORT 정보를 헤더 부분에 담아 연결을 위한 패킷을 만들고 3-way-handshake 로 웹 서버와 연결한다.
3) 소켓 라이브러리를 통해 HTTP 메시지를 TCP/IP 계층으로 전달한다
4) 헤더 부분출발지 IP, PORP, 목적지 IP, PORT등)과 데이터 부분(HTTP요청 메시지)를 합쳐 TCP/IP 패킷을 생성한다.
5) 웹 브라우저에서 인터넷망(수많은 노드들)을 거쳐 웹 서버로 패킷을 전달한다.
6) 웹 서버는 도착한 패킷의 헤더 부분은 버리고 데이터 부분(HTTP 요청 메시지)를 해석하여 HTTP 응답 메시지를 만든다.
7) 헤더 부분(출발지 IP, PORT, 목적지 IP, PORT 등)과 데이터 부분(HTTP 응답 메시지)을 합쳐 TCP/IP 응답 패킷을 생성한다.
8) 웹 서버에서 인터넷망(수많은 노드들)을 거쳐 웹 브라우저로 응답 패킷을 전달한다.
9) 웹 브라우저는 도착한 응답 패킷의 헤더 부분은 버리고 HTTP 응답 메시지의 데이터(HTML)을 렌더링하여 화면에 뿌려준다.