URL 간단히 알아보기

URL은 어떤 구조로 되어있는걸까?

프로토콜

출처 : Lin Shengyi 블로그

네트워크 5계층에서 응용계층에 해당하는 네트워크 프로토콜을 의미한다.

우리가 실습하는 목적은 로컬환경에서 서블릿으로 만든 서버로 요청받은 리소스를 제대로 반환받는지 확인하는 애플리케이션이므로 네트워크 프로토콜은 HTTP(Hyper Text Transfer Protocol)를 사용했다.

응용계층의 또 다른 프로토콜로 SMTP와 FTP도 존재한다.

  • SMTP(Simple Mail Transfer Protocol) : 이메일 전송 프로토콜
  • FTP(File Transfer Protocol) : 파일 전송 프로토콜

도메인

네트워크(HTTP)로 통신할 서버 주소에 해당한다. 서버 주소는 IP주소를 의미한다.

주소창에서 사용된 URL에서 도메인은 localhost에 해당하는데, localhost는 무엇을 의미하는걸까? localhost는 본래 127.0.0.1의 IP주소를 대신한다. 그냥 127.0.0.1:8080으로 접속하는것과 localhost:8080은 정확히 같은 URL이다.

127.0.0.1은 어떤걸 의미하는걸까?

일단 IP주소에 대해 잠깐 알아보자. IP주소는 32 비트로 구성되어 있는데, 8 비트씩 구분하여 . 으로 구분한다.

출처 : 위키백과

위의 이미지처럼 각각의 주소가 8비트로 구성되어 총 32 비트로 구성된다. 이렇게 할당할 수 있는 IP주소는 232개에 해당한다.

그런데 이건 IPv4(Internet Protocol Version 4)에 해당한다. IP주소는 네트워크 통신을 하는 모든 디바이스에 할당되는데 스마트폰 보급과 IoT 디바이스들이 탄생하며 발행할 수 있는 IP주소(232)가 고갈되었다.

6번째 인터넷 프로토콜인 IPv6(Internet Protocol Version 6)가 등장하게된 배경이다.

출처 : Edgestrider

IPv6에서 IP주소는 128 비트의 주소 체계를 갖으며, 2128개의 IP주소를 할당할 수 있다.

출처 :


다시 127.0.0.1로 돌아오면, 127.0.0.1은 현재 클라이언트의 PC를 웹서버로 사용한다는 의미이다. 그럼 어떻게 localhost라는 도메인과 127.0.0.1이 맵핑되는 것일까?

운영체제에 IP주소를 맵핑하는 파일(hosts)이 있다.

잠깐 웹 애플리케이션에서 요청의 흐름을 정리해보면, 다음과 같다.

  • 클라이언트(브라우저)에서 요청(Request)
  • 클라이언트 PC의 hosts 파일에서 도메인 등록여부 확인하고, 등록되어 있는 도메인이면 해당 IP주소로 요청을 전달, 안되어있으면 통신사 DNS 서버에 넘김
  • 통신사 DNS 서버에서 도메인을 파악하며 IP주소를 통해서 해당 웹서버에 요청

필자가 사용중인 맥OS에서 hosts 파일을 확인하면, 다음과 같다.

1
sudo vim /etc/hosts

여기서 localhost가 loopback 인터페이스로 정의되어 있다고 주석으로 처리되어 있고, 실제로 IP주소 127.0.0.1에 localhost가 맵핑되어 있는걸 확인할 수 있다.

여기에 없는 도메인 즉, naver.com이나 coupang.com은 통신사 DNS에서 IP주소를 찾아서 요청으로 전달되게 된다.

출처 : 코딩LevelUp - 로컬호스트에 대한 개념 그리고 127.0.0.1?


포트 번호

웹서버의 어떤 포트와 통신할지를 의미하는 프로토콜이다. 프로토콜이라 함은 약속과 같다. 포트 번호는 다음과 같이 분류된다.

  • Well-known Port : 0 ~ 1023
    • HTTP : 80
    • HTTPS : 443
    • SMTP : 25
    • POP3 : 110
    • IMAP : 143
  • Registered Port : 1024 ~ 49151
    • 8080 : HTTP 포트(80)를 대체하는 포트
    • 1433 : MSSQL 포트
    • 3306 : MySQL 포트
  • Dynamic Private Port : 49152 ~ 65535

이런 체계는 IANA(Internet Assigned Numbers Authority)에 의해 지정된다.

8080번 포트는 여기서 Registered Port에 해당하는데, 로컬호스트 환경에서 웹 통신을 가능케하기 위한 포트정도로 알고있다.

출처 : 손으로 익히며 배우는 네트워크 첫걸음


URI

URI(Uniform Resource Identifier)는 요청하고자 하는 리소스의 웹서버상 경로 또는 API를 의미한다.

1
GET https://myaccount.nytimes.com/auth/login

예를 들어, 위의 주소를 브라우저에서 요청하면 뉴욕타임즈의 로그인 페이지를 반환하는데, 여기서 https가 프로토콜, myaccount.nytimes.com이 웹서버 주소(도메인)이라면, /auth/login이 URI에 해당한다.

여기서 URI를 /auth/register로 바꾸면 계정을 생성하는 페이지가 반환받을 수 있다. 이걸 토대로 auth 패키지 하위에 loginregister 리소스가 있음을 추론할 수 있다.