HTTP 기초 - 3 - URI 분리하기

고은연·2021년 2월 17일
2

URI 분리해 보기

http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument 형태로 된 주소를 많이 본 적이 있으실 겁니다. 위와 같은 인터넷 주소를 URI(Unique Resource Identifier) 라고 부릅니다. URI를 부분별로 분리해 보겠습니다.

http

http는 프로토콜입니다. 웹 자원은 http 혹은 https 프로토콜을 사용합니다. 다른 표현으로는 스킴(scheme) 이라고 부르기도 합니다. 일반적인 http 외에도 데이터를 나타내는 data, 로컬 파일을 나타내는 file, 파일 전송 프로토콜인 ftp, 메일 전송을 나타내는 mailto, 전화번호를 나타내는 tel 등도 스킴에 속합니다.
프로토콜 뒤에는 ://를 붙여서 프로토콜이 끝났음을 나타냅니다.

도메인

www.example.com이 도메인에 해당합니다.
도메인은 웹 서버의 주소를 결정하는 이름입니다. 도메인은 ICANN 이라는 곳에서 관리합니다.
원래 인터넷 세상의 주소는 IP(Internet Protocol)이라고 불리는 12자리의 숫자로 이루어져 있습니다.127.0.0.1 (=127.000.000.0001) 처럼 말이죠. 그런데 웹 사이트 주소를 숫자로만 외우기는 너무 어려우니 사람이 식별하기 쉬운 글자로 치환해 놓은 것이 도메인입니다.
우리가 인터넷에 도메인 이름을 입력하면 DNS(Domain Name Server - 도메인 네임 서버 - 네임서버라고 줄여 부르기도 합니다.) 에서 해당 도메인에 해당하는 IP 주소를 검색해서 실제 자원이 위치한 서버의 IP로 연결하게 됩니다.
최근에는 12자리로 이루어진 IPV4(Internet Protocol Version 4)가 부족해짐에 따라 128비트로 이루어진 IPV6로 서버의 주소를 설정하기도 합니다.

포트

80이 포트에 해당합니다. 포트는 :80처럼 :으로 시작하고 숫자로 표기합니다.
포트는 하나의 서버에서 외부와 통신하는 통로의 번호를 나타냅니다. 하나의 서버에는 여러개의 프로그램이 실행될 수 있는데, 예를 들어 웹서버와 데이터베이스 서버가 동시에 실행되기도 합니다.
예를 들어 웹 서버와 데이터베이스 서버는 둘 다 외부와 통신해야 하는 프로그램이기 때문에 각자 통로가 필요합니다. 따라서 웹서버는 80포트, 데이터베이스 포트는 3306 포트 등으로 각자 통신 통로를 따로 열어두게 됩니다.
HTTP의 기본 포트는 80이기 때문에 도메인 뒤에 :80이 생략되면 웹 브라우저는 기본값을 80이라고 생각합니다. HTTPS의 경우 :443이 기본 포트입니다.

자원의 경로(path)

/path/to/myfile.html 이 경로에 해당합니다. 하나의 웹 서버 안에는 여러개의 자원이 있을 수 있는데, 자원을 식별하는 방법으로 경로가 사용됩니다.

쿼리 스트링(Query String)

?key1=value1&key2=value2이 쿼리 스트링에 해당합니다. 쿼리 스트링은 자원의 경로에 부가적인 정보를 전달할 때 쓰입니다.
쿼리 스트링은 ?로 시작하고 각 항목을 &로 이어붙이며 개별 항목은 키=값 형태로 구성되어 있습니다. 따라서 위 예제를 PHP 코드로 표기해 보면 아래와 같은 데이터를 서버에 전달합니다.

[
    "key1" => "value1",
    "key2" => "value2"
]

쿼리 스트링은 URI의 일부로 표기되는 파라미터이기 때문에 HTTP GET 메소드에서 주로 사용됩니다.

프레그먼트(fragment)

#SomewhereInTheDocument가 프레그먼트(조각)에 해당하며, 프레그먼트는 문서 내의 위치를 가리키는 식별자입니다.
하나의 자원 주소 내에서 프래그먼트가 있을 경우 브라우저는 프래그먼트의 위치를 찾아 바로 해당 섹션으로 이동하는 특성을 가집니다.

profile
중년 아저씨. 10 + n년차 백엔드 개발자. 스타트업과 창업, 솔로프리너와 1인 기업에 관심 많아요.

1개의 댓글

comment-user-thumbnail
2022년 5월 18일

정처기 공부할 때 대충 지나갔던 개념들을 이렇게 이해하게 됐습니다. 감사합니다.

답글 달기