URL 파싱

https://john.doe:password123@www.example.com:8080/path/to/resource?query=search&lang=en#details

브라우저는 이 문자열을 받으면, 다음과 같이 각 부분을 체계적으로 분해합니다.

  1. 스킴 (Scheme) 또는 프로토콜 (Protocol)

  • 예시: https

  • 목적: 브라우저에게 어떤 통신 방식(규칙)을 사용해서 서버에 접근해야 하는지 알려줍니다.

    • https://: TLS/SSL을 통해 암호화된 보안 연결(HTTPS)을 사용하라는 의미입니다.

    • http://: 암호화되지 않은 일반 연결(HTTP)을 사용하라는 의미입니다.

    • ftp://: 파일 전송 프로토콜을 사용하라는 의미입니다.

    • file://: 내 컴퓨터의 로컬 파일을 열라는 의미입니다.

  • 우편 주소 비유: 어떤 배송 서비스(우체국 등기, 일반 택배, 퀵서비스)를 이용할지 결정하는 것과 같습니다.

  1. 사용자 정보 (User Information)

  • 예시: john.doe:password123

  • 목적: 특정 리소스에 접근하기 위한 사용자 이름과 비밀번호를 포함합니다. @ 기호로 호스트 이름과 구분됩니다.

  • 주의: 보안상의 이유로 현재는 거의 사용되지 않습니다. URL에 비밀번호를 그대로 노출하는 것은 매우 위험하기 때문입니다.

  • 우편 주소 비유: "이 편지는 '김대리'라는 특정 직원만 열어볼 수 있음"이라는 특별 지시사항과 같습니다.

  1. 호스트 (Host) 또는 도메인 이름 (Domain Name)

  • 예시: www.example.com

  • 목적: 요청을 보낼 목적지 서버의 이름을 나타냅니다. 브라우저는 이 호스트 이름을 DNS 조회를 통해 서버의 실제 IP 주소로 변환해야 합니다.

  • 우편 주소 비유: 편지를 보낼 빌딩의 이름 또는 주소 (예: 서울시청, 강남파이낸스센터)와 같습니다.

  1. 포트 (Port)

  • 예시: 8080

  • 목적: 목적지 서버 내에서 어떤 통로(프로그램)로 연결할지를 지정하는 번호입니다. 콜론(:)으로 호스트 이름과 구분됩니다.

  • 주의: 포트 번호는 보통 생략됩니다. 생략될 경우, 스킴에 따라 기본 포트가 자동으로 사용됩니다.

    • http의 기본 포트: 80

    • https의 기본 포트: 443

  • 우편 주소 비유: 빌딩에 도착한 후 찾아가야 할 정확한 부서 또는 창구 번호 (예: 8층 민원실, 443번 창구)와 같습니다.

  1. 경로 (Path)

  • 예시: /path/to/resource

  • 목적: 서버 내에서 요청하려는 리소스(파일 또는 데이터)의 구체적인 위치를 나타냅니다. 슬래시(/)로 구분되는 계층적 구조를 가집니다.

  • 우편 주소 비유: 빌딩의 특정 부서에 도착한 후 찾아야 할 서류 캐비닛과 파일의 위치 (예: '인사과/2024년/채용서류')와 같습니다.

  1. 쿼리 문자열 (Query String)

  • 예시: query=search&lang=en

  • 목적: 서버에 추가적인 정보나 매개변수(parameter)를 전달하기 위해 사용됩니다.

    • 물음표(?)로 경로와 구분됩니다.

    • key=value 형식으로 이루어지며, 여러 개일 경우 앰퍼샌드(&)로 연결됩니다.

  • 우편 주소 비유: 서류를 요청하면서 "2024년 채용 서류 중에서 '개발 직군'과 관련된 것만 찾아주세요" 라고 덧붙이는 메모와 같습니다.

  1. 프래그먼트 (Fragment) 또는 해시 (Hash)

  • 예시: details

  • 목적: 웹 페이지의 특정 부분을 가리키는 북마크와 같은 역할을 합니다.

    • 해시 기호(#)로 시작합니다.

    • 중요: 프래그먼트는 서버로 전송되지 않습니다. 브라우저는 서버로부터 전체 페이지를 받은 후, 이 프래그먼트에 해당하는 부분으로 화면을 스크롤하거나 특정 스크립트를 실행하는 등 클라이언트 측에서만 사용합니다.

  • 우편 주소 비유: 책을 배송받은 뒤, "책의 153페이지를 펼쳐보세요" 라고 적어둔 책갈피와 같습니다. 배송 과정(서버 통신)과는 무관합니다.


파싱 후, 브라우저는 이 정보를 어떻게 사용하는가?

  1. 스킴 (https) 확인: "아, TLS 보안 연결을 해야겠군."

  2. 호스트 (www.example.com) 확인: "이 도메인의 IP 주소를 DNS에 물어봐야지."

  3. 포트 (8080) 확인: "IP 주소를 찾으면, 8080번 포트로 TCP 연결을 시작해야겠다." (만약 포트가 생략되었다면 443번 포트를 사용합니다.)

  4. 경로 (/path/to/resource)와 쿼리 (?query=...)로 HTTP 요청 생성: "연결이 되면, GET /path/to/resource?query=... HTTP/1.1 라는 요청 메시지를 보내야지."

  5. 프래그먼트 (#details) 처리: "서버로부터 페이지(HTML)를 다 받고 렌더링한 뒤, id="details"인 요소를 찾아서 그 위치로 스크롤해야겠다."

결론적으로 URL 파싱은, 브라우저가 인터넷의 특정 위치에 있는 리소스에 정확하게 접근하고, 상호작용하는 데 필요한 모든 정보를 체계적으로 얻는 첫 번째이자 가장 중요한 단계입니다.

Last updated