URL 파싱
https://john.doe:password123@www.example.com:8080/path/to/resource?query=search&lang=en#details
브라우저는 이 문자열을 받으면, 다음과 같이 각 부분을 체계적으로 분해합니다.
스킴 (Scheme) 또는 프로토콜 (Protocol)
예시: https
목적: 브라우저에게 어떤 통신 방식(규칙)을 사용해서 서버에 접근해야 하는지 알려줍니다.
https://: TLS/SSL을 통해 암호화된 보안 연결(HTTPS)을 사용하라는 의미입니다.
http://: 암호화되지 않은 일반 연결(HTTP)을 사용하라는 의미입니다.
ftp://: 파일 전송 프로토콜을 사용하라는 의미입니다.
file://: 내 컴퓨터의 로컬 파일을 열라는 의미입니다.
우편 주소 비유: 어떤 배송 서비스(우체국 등기, 일반 택배, 퀵서비스)를 이용할지 결정하는 것과 같습니다.
사용자 정보 (User Information)
예시: john.doe:password123
목적: 특정 리소스에 접근하기 위한 사용자 이름과 비밀번호를 포함합니다. @ 기호로 호스트 이름과 구분됩니다.
주의: 보안상의 이유로 현재는 거의 사용되지 않습니다. URL에 비밀번호를 그대로 노출하는 것은 매우 위험하기 때문입니다.
우편 주소 비유: "이 편지는 '김대리'라는 특정 직원만 열어볼 수 있음"이라는 특별 지시사항과 같습니다.
호스트 (Host) 또는 도메인 이름 (Domain Name)
예시: www.example.com
목적: 요청을 보낼 목적지 서버의 이름을 나타냅니다. 브라우저는 이 호스트 이름을 DNS 조회를 통해 서버의 실제 IP 주소로 변환해야 합니다.
우편 주소 비유: 편지를 보낼 빌딩의 이름 또는 주소 (예: 서울시청, 강남파이낸스센터)와 같습니다.
포트 (Port)
예시: 8080
목적: 목적지 서버 내에서 어떤 통로(프로그램)로 연결할지를 지정하는 번호입니다. 콜론(:)으로 호스트 이름과 구분됩니다.
주의: 포트 번호는 보통 생략됩니다. 생략될 경우, 스킴에 따라 기본 포트가 자동으로 사용됩니다.
http의 기본 포트: 80
https의 기본 포트: 443
우편 주소 비유: 빌딩에 도착한 후 찾아가야 할 정확한 부서 또는 창구 번호 (예: 8층 민원실, 443번 창구)와 같습니다.
경로 (Path)
예시: /path/to/resource
목적: 서버 내에서 요청하려는 리소스(파일 또는 데이터)의 구체적인 위치를 나타냅니다. 슬래시(/)로 구분되는 계층적 구조를 가집니다.
우편 주소 비유: 빌딩의 특정 부서에 도착한 후 찾아야 할 서류 캐비닛과 파일의 위치 (예: '인사과/2024년/채용서류')와 같습니다.
쿼리 문자열 (Query String)
예시: query=search&lang=en
목적: 서버에 추가적인 정보나 매개변수(parameter)를 전달하기 위해 사용됩니다.
물음표(?)로 경로와 구분됩니다.
key=value 형식으로 이루어지며, 여러 개일 경우 앰퍼샌드(&)로 연결됩니다.
우편 주소 비유: 서류를 요청하면서 "2024년 채용 서류 중에서 '개발 직군'과 관련된 것만 찾아주세요" 라고 덧붙이는 메모와 같습니다.
프래그먼트 (Fragment) 또는 해시 (Hash)
예시: details
목적: 웹 페이지의 특정 부분을 가리키는 북마크와 같은 역할을 합니다.
해시 기호(#)로 시작합니다.
중요: 프래그먼트는 서버로 전송되지 않습니다. 브라우저는 서버로부터 전체 페이지를 받은 후, 이 프래그먼트에 해당하는 부분으로 화면을 스크롤하거나 특정 스크립트를 실행하는 등 클라이언트 측에서만 사용합니다.
우편 주소 비유: 책을 배송받은 뒤, "책의 153페이지를 펼쳐보세요" 라고 적어둔 책갈피와 같습니다. 배송 과정(서버 통신)과는 무관합니다.
파싱 후, 브라우저는 이 정보를 어떻게 사용하는가?
스킴 (
https
) 확인: "아, TLS 보안 연결을 해야겠군."호스트 (
www.example.com
) 확인: "이 도메인의 IP 주소를 DNS에 물어봐야지."포트 (
8080
) 확인: "IP 주소를 찾으면, 8080번 포트로 TCP 연결을 시작해야겠다." (만약 포트가 생략되었다면 443번 포트를 사용합니다.)경로 (
/path/to/resource
)와 쿼리 (?query=...
)로 HTTP 요청 생성: "연결이 되면, GET /path/to/resource?query=... HTTP/1.1 라는 요청 메시지를 보내야지."프래그먼트 (
#details
) 처리: "서버로부터 페이지(HTML)를 다 받고 렌더링한 뒤, id="details"인 요소를 찾아서 그 위치로 스크롤해야겠다."
결론적으로 URL 파싱은, 브라우저가 인터넷의 특정 위치에 있는 리소스에 정확하게 접근하고, 상호작용하는 데 필요한 모든 정보를 체계적으로 얻는 첫 번째이자 가장 중요한 단계입니다.
Last updated