| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- HTTP
- 김영한님의 모든 개발자를 위한 HTTP 웹 기술 인강 꼭 들어보세요
- 자료구조
- Hashtable
- 티스토리챌린지
- URL
- 인터넷 네트워크
- 오블완
- 연결 리스트
- 과장님 죄송했어요
- URI
- queue
- array
- tcp
- 생성자
- port
- 배열
- 알고리즘
- Stack
- heap
- 기본은 충실히
- URN
- 객체
- 이진트리
- HTTP메시지
- Class
- 을 통한 웹 브라우저 흐름
- servlet
- 자바
- 기초 개념 잡기
- Today
- Total
HeadCopter
URI, URL, URN 정리와 웹 브라우저 요청 흐름 ! 본문
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 |