HeadCopter

URI, URL, URN 정리와 웹 브라우저 요청 흐름 ! 본문

개발관련

URI, URL, URN 정리와 웹 브라우저 요청 흐름 !

JungMonkey 2022. 7. 12. 21:46

 URI(Uniform Resource Identifier) ?

- 어리석은 중생이 URI가 무엇입니까 하고 물어보았고 , 위키백과께서 말씀하시기를 

"통합 자원 식별자"

 

- URI는 인터넷에 있는 자원을 나타내는 유일한 주소라 한다. 

 scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

- 영문 그대로 URI는 리소스를 가리키는 녀석이다. 

우리가 사자를 표현하기 위해서 사자를 직접 들고오지 않고 "사자"라고 적거나 말하여 표현하듯이 생각하는 개념인것이다. 

- URI는 위 그림처럼 URL(위치 지정), URN(이름 지정) 또는 둘 다 추가로 분류될 수 있다.(URI가 가장 큰 개념 )

- 즉 URI는 인터넷의 우편물 주소 같은 것으로, 정보 리소스를 고유 식별하고 해당 위치를 지정할 수 있다.

 

URL (Uniform Resource Locator)

- URL은 리소스가 위치를 지정한다. 

 scheme://<user>:<password>@<host>:<port>/<url-path>

ex) https://www.google.com/search?q=apple&hl=ko 

- scheme:// 에는 주로 프로토콜을 사용한다. (http,https,ftp 등)

- <user><password>@ : URL에 사용자 정보를 포함해서 인증을 입력하는데 거의 사용하지 않는다.

- <host>: 호스트명이라 불리며 도메인명 또는 IP 주소를 직접 사용한다. (www.google.com)

- <port>: 접속 포트를 입력하는곳으로 일반적으로 생략 가능하다 생략하면 기본 http는 80 https는 443으로 세팅된다. 

- <url-path> : 리소스 경로 계층적 구조로 되어있다 (/home/file.jsp, users/100  등 url을 설계한다.)

- <query> : key= value 형태이며 '?'로 시작하고 &로 추가할 수 있다. (?q=apple&hl=ko )

 

URN (Uniform Resource Name)

- URN은 URL이 위치한 곳을 지정하고 훗날 URL을 변경했을 때 기존에 위치하던 URL로는 더이상 찾을 수 없는 한계로 인해 나왔다.

- 그래서 URN을 사용하여 URL의 리소스가 달라져도 지정한 URN을 통해서 리소스의 위치를 찾을 수 있다.

* 오~ 그럼 URL말고 URN이 더 좋은거 아냐 ? 라고 생각했지만 이미 URL이 대중화 되었고 그 외 많은 문제로 아직 대중적으로 사용하지는 않고 있다 한다 

 

웹 브라우저의 요청 흐름

- https://www.google.com/search?q=apple&hl=ko 라고 요청을 보내면 

- www.google.com  이라는 DNS를 조회한다

- 조회를 하게되면 해당 서버의 IP와 포트 정보가 나오고 HTTP 요청 메시지를 생성한다 

// HTTP 요청 메시지는 이렇게 생겼다.
GET /search?q=apple&hl=ko HTTP/1.1
Host: www.google.com

- 그리고 웹 브라우저에서 SOCKET 라이브러리를 통해 TCP/IP로 앞서 공부했던 3-way handshake

로 연결을 하고 데이터를 전달한다. 

- TCP에서 내가 전달한 데이터에 TCP/IP 패킷을 한번 씌우고(HTTP 메시지를 포함) 조회한 해당 서버에게 이 패킷을 전달한다. 

- 요청 패킷이 서버에 도착하고 TCP/IP 패킷 안 HTTP 메시지를 파싱한다. 

- 파싱이 완료되면 서버에서 HTTP 응답 메시지를 생성한다.

// HTTP 응답 메시지 
HTTP/1.1 200 OK
Content-Type : text/html;charset=UTF-8
Content-Length: 3423

<html>
	<body>....</body>
</html>

- 이렇게 똑같이 서버도 응답 패킷을 만들어서 다시 웹 브라우저에 응답 패킷을 보낸다. 

- 응답 패킷을 받은 웹 브라우저는 HTTP 응답 메시지를 파싱한다. 

- 그리고 웹 브라우저에 HTTP 응답 메시지에 담겨있던 HTML을 렌더링하여 화면을 보여준다. 

 

 

 

 

 

 

 

 

공부가 끝나고..

2년전에 회사에 처음 입사에서  첫 프로젝트를 진행할때 그때 당시 생각해보면 화면에서 Request할 때

타입이 달라 데이터 전송이 안되었던걸로 기억한다.. 

근데 거기서 과장님이 "URL에 직접 담아서 데이터 태워봐 " 라고 하셨는데

순간 태워? 뭘? 어디에? 어떻게? 라는 생각으로  우물쭈물 하다가 

결국 한숨을 쉬셨던 과장님이 생각난다... 

죄송해요 과장님 .. 

 

 

 

이제 진짜 알았어요 ! !

'개발관련' 카테고리의 다른 글

본격! HTTP(2)  (0) 2022.07.14
본격 ! HTTP(1)  (0) 2022.07.13
클라이언트 서버 구조  (0) 2022.07.13
인터넷 네트워크 관련 정리  (0) 2022.07.12
웹 서버, 웹 애플리케이션 서버 ?  (0) 2022.07.11