URI
나는 평소에 남들처럼 URL만 알았지 URI라는게 있는지 처음 알았다.
심지어 URI는 URL을 포함하는 개념이었다.
URI (Uniform Resource Identifier)
• Uniform: 리소스 식별하는 통일된 방식
• Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음)
• Identifier: 다른 항목과 구분하는데 필요한 정보
라고 한다!
이러한 URI는 한마디로 자원(리소스)를 식별하는 통합된 방법인데, 크게 두 가지로 나뉜다.
- URI
1-1. URL(Uniform Resource Locator) : 리소스가 있는 위치를 지정
1-2. URN(Uniform Resource Name) : 리소스에 이름을 지정
URN은 잘 안쓰고 다들 아는 URL이 사람들이 보통 아는 것이다.
다이어그램으로 표현하자면 이렇게 된다.
URL의 구성
URL은 프로토콜, 호스트 명, 포트 번호(Port), 경로(Path), 쿼리 파라미터 총 다섯 가지로 구성된다.
예를 들어, https://www.google.com:443/search?q=hello&hl=ko 라는 URL이 있다고 가정하자.
- 프로토콜 : https
- 호스트명 : www.google.com
- 포트번호 : 443 (얘는 생략가능! 프로토콜 디폴드 값이 있음 http -> 80 https -> 443 등등)
- 경로 : /search
- 쿼리 파라미터 : q=hello&hl=ko (key=value 형태)
웹 브라우저의 요청 흐름
사용자가 https://www.google.com:443/search?q=hello&hl=ko 링크를 요청했다고 가정하자.
- DNS 서버를 뒤져서 구글의 ip 주소와, 프로토콜을 보고 포트 번호를 받아온다.
- 웹 브라우저가 HTTP 요청 메세지를 생성한다.
2-1. 이 메세지에는 HTTP 메서드(get, post, put~), 경로, 쿼리 파라미터, 호스트 등등 적혀있음
- 소켓 라이브러리를 통해 TCP/IP 연결 (SYN, SYN/ACK, ACK) 후 데이터를 전달한다.
- OS 계층에서 HTTP 메세지를 포함한 TCP/IP 패킷을 생성한다.
- 인터넷으로 흘러감
- 서버도 html 데이터, TCP/IP 패킷 등등 들어간 응답 패킷을 생성한다.
- 클라이언트는 응답 패킷을 뜯어서 뷰를 출력한다.
음.. 좀 재미있다 ㅋㅋ