Git & CS

URI, URL, URN, 웹 브라우저 요청 흐름

승민아 2024. 5. 25. 13:43

URI, URL 차이가 무엇인지 이번에 확실히 이해해보자.

 

URI, URL, URN?

URI는 Uniform Resource Identifier이다.

말 그대로 "리소스를 구별 식별하는 통일된 방식"이다.

 

그러면 URL, URN은 무슨 말일까?

URL는 Uniform Resource Locator으로 리소스에 위치를 지정하여 구별하는것

URN는 Uniform Resource Name으로 리소스에 이름을 지정하여 구별하는것

 

그렇다~

URL은 위치, URN은 이름으로 리소스를 구별하는 것이다.

 

그럼 URI는 "리소스를 구분하는 통일된 방식"이니깐 URL, URN을 포함하는 개념일 것이다.

출처: 김영한

 

포함하는 개념이 맞다.

URI와 URL을 구분하지 않고 불러도 괜찮다.

URI는 위치(Locate), 이름(Name) 또는 둘 다로 분류할 수 있기 때문이다.

 

URL 형식

형식은 다음과 같지만 예를 추가로 들어 쉽게 이해해보자.

scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • [userinfo@] : URL에 사용자 정보를 포함해서 인증하는 용도인데 거의 사용하지 않는다.

 

foo://example.com:8042/over/there?name=ferret#nose

 

1. foo는 scheme 부분이다.

  • 어떤 방식으로 자원에 접근할 것인지 약속인 프로토콜이 주로 온다.
    • ex) http, https, ftp

2. example.com는 host 부분이다.

  • 호스트명을 사용하며 도메인명 또는 IP 주소를 직접 사용한다.

2-1.  :8042는 port 부분이다.

  • 접속 포트를 표현한다.
  • 일반적으로 생략하며 생략시 http는 80으로 https는 443으로 입력된다.

3. /over/there는 path 부분이다.

  • 리소스 경로를 나타내며 계층적으로 표현할 수 있다.

4. ?name=ferret는 query 부분이다.

  • key = value 형태로 작성한다.
  • ?로 시작하고, &로 추가 파라미터를 연결한다.
  • 쿼리 파라미터, 쿼리 스트링으로도 불리는데 숫자 123을 넣어도 문자 형태로 넘어가기 때문에 쿼리 스트링이라고도 부름.

5. #nose는 fragment 부분이다.

  • html의 어떤 중간 위치로 이동할때 사용한다.
  • html 내부 북마크로 사용한다.
  • 서버로 전송하는 정보는 아니다.

웹 브라우저 요청 흐름

우리가 다음 경로로 요청한다고 가정해보자.

https://www.google.com:443/search?q=hello&hl=ko

 

출처 : 김영한

위와 같은 HTTP 요청 메시지를 웹 브라우저에서 만들어서 해당 서버로 전송할 것이다.

 

어떻게 전달될까?

출처: 김영한

  1. 웹 브라우저가 HTTP 요청 메시지를 생성
  2. Socket을 통해 TCP/IP 패킷을 덧 붙인다.
  3. 이 메시지를 해당 서버로 전송한다.

TCP/IP 패킷이 덧 붙여진 모습 (출처 : 김영한)

 

해당 메시지를 받은 서버는 다음과 같은 "응답 메시지"를 생성한다.

출처 : 김영한

 

우리 클라이언트는 이 응답 메시지를 웹 브라우저를 통해 HTML 렌더링하여 보는 것이다.