본문 바로가기
Back-end

[모든 개발자를 위한 HTTP 웹 기본 지식] 2. URI와 웹 브라우저 요청 흐름

by kkkdh 2022. 11. 29.
728x90

URI (Uniform Resource Identifier)

간단히 설명하자면, resource를 식별하는 통합된 방법을 의미한다.

 

표준 스펙에서 정의하는 말은 다음과 같이 URI를 정의한다고 한다.

"URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다."

 

이 말을 이해하기 이전에 URI?, URL?, URN? 얘네들의 차이점은 뭘까??

도식화한 개념

정리하자면, URI는 자원 자체를 식별하는 방법을 의미하고 여기에는 크게 두 가지의 종류가 있다.

  • URL (Resource Locator): 자원의 위치
  • URN (Resource Name): 자원의 이름

위와 같이 URL은 우리가 흔히 알고 있는 개념으로 자원의 주소와 다양한 정보를 통해 자원을 식별하는 방식인데 반해, URN은 자원의 이름만을 표기해놓은 방식으로 그냥 이러한 것들이 있다 정도만 알고 넘어가자.

 

URI 단어 뜻

  • Uniform: 리소스를 식별하는 통일된 방식
  • Resource: 자원, URI로 식별할 수 있는 모든 것
  • Identifier: 다른 항목과 구분하기 위해 필요한 정보

 

URL: Uniform Resource Locator, URN: Uniform Resource Name 단어 뜻

  • URL - Locator: 자원이 있는 위치를 지정
  • URN - Name: 자원에 이름을 부여
  • 위치는 변할 수 있지만, 이름은 변하지 않는다.
  • urn:isbn:8960777331 (어떤 책의 isbn URL?)
  • URN 이름만으로 실제 resource를 찾을 수 있는 방법이 보편화되어 있지 않다.
  • 따라서 앞으로 URI를 URL로 생각하자.

URL 전체 문법

 

URL의 구성 요소

  • Scheme, 주로 프로토콜 (https)
    • 주로 프로토콜을 사용한다.
    • 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속된 규칙을 의미
      • ex) http, https, ftp 등..
    • http는 80번 포트, https는 443 포트 등을 주로 사용한다. 포트는 특별한 경우를 제외하고 생략 가능하다.
    • https는 http에 보안 기능이 추가된 프로토콜이다. (HTTP Secure)
  • userinfo
    • URL에 사용자 정보를 포함해 인증하기 위해 사용
    • 거의 사용하지 않는다.
  • 호스트명 (www.google.com)
    • domain name 또는 IP address를 직접 사용도 가능
  • 포트번호 (443)
    • PORT
    • 접속 포트를 의미
    • 일반적으로 생략 가능하다. (주로 사용하는 protocol에 따라 결정되기 때문이다.) 
  • 경로, path (/search)
    • 리소스 경로(resource path), 계층적 구조를 이룬다.
    • ex) /home.file1.jpg, /members, /members/100, /items/iphone13...
  • 쿼리 파라미터 (q=hello&hi=ko)
    • key=value 구조
    • ?로 시작하며, &로 다른 쿼리 파라미터를 추가할 수 있다. 
    • query parameter, query string 등으로 불린다. 웹 서버에 제공하는 파라미터이다.
    • 숫자를 입력해도 문자 타입으로 서버로 전송된다.
  • fragment
    • html 내부에서 북마크 용도로 사용
    • 서버에는 전송되지 않는 정보이다.

웹 브라우저 요청 흐름

먼저 client의 웹 브라우저에서 url을 parsing 해서 서버의 ip address를 DNS 서버를 통해 조회한다. port number는 사용하는 프로토콜에 따라서 결정한다.

HTTP request message는 간단하게 위와 같이 생겼고, 위 메시지는 HTTP get method에 따른 요청임을 확인할 수 있다. 쿼리 파라미터로는 q, hl이 전달되는 것 또한 확인할 수 있다.

이렇게 생성된 HTTP request message는 위와 같이 socket을 걸쳐 TCP/IP로 넘어가 그에 맞는 정보를 패킷에 붙여서 다음과 같은 패킷을 생성한다.

패킷을 정말 간단하게 설명하면 위처럼 생겼다. 여기에 전송하고 싶은 데이터 (웹에서는 아마 HTML 문서)가 message에 더해져서 요청에 대한 응답으로 전송된다.

 

이때, TCP/IP 프로토콜에 따라 동작하기 때문에 client와 server는 3-way handshake를 통해 connection을 형성하고 난 이후에 통신을 하게 된다.

 

Reference

 

게시글에서 사용한 모든 이미지는 김영한 님의 "모든 개발자를 위한 HTTP 기본 지식"의 강의자료에서 가져왔습니다.

728x90

댓글