2장

1. URL의 구성요소

1장에서 간단히 설명했듯이 URI는 서버에서 호스팅하는 리소스에 접근하기 위한 식별자이다. URI에는 URL과 URN이 있다. URL은 리소스의 위치로 리소스를 식별하고 URN은 리소스의 이름으로 리소스를 식별한다. 그렇다면 URL은 어떻게 구성되어 있을까?

png

일반적으로 URL은 스킴, 호스트 그리고 경로로 구성된다. 스킴은 클라이언트가 서버에 리소스를 요청할 때 사용할 프로토콜을 의미한다. 대표적인 프로토콜에는 http가 있다. 호스트는 리소스가 저장된 서버의 위치를 의미한다. 경로는 서버에 존재하는 리소스 중 클라이언트가 요청한 리소스의 위치를 의미한다.

2. URL 문법

모든 URL은 같은 형식으로 리소스를 주고받을까? 안타깝게도 URL 문법은 사용할 프로토콜에 따라 달라진다. 그러나 일반적인 문법은 동일하므로 크게 걱정할 필요는 없다. 대부분의 URL 스킴의 문법은 아래 그림과 같이 9개 부분으로 나뉜다.

png

각 문법이 무엇이며 어떻게 사용하는지 간단한 예시를 통해 알아보자.

# URL의 예시
https://jiunkoo.github.io/web/chapter2.html

# 스킴
https://

# 아래 두 스킴은 동일하다.
https://
HTTPS://

스킴은 사용할 프로토콜을 의미한다. 스킴은 ':' 문자로 구분한다. 스킴 명은 알파벳으로 시작하고 대소문자를 가리지 않는다.

# URL의 예시
ftp://jiunkoo.github.io/web/chapter2.html

# 사용자 이름과 비밀번호가 없는 경우
ftp://jiunkoo.github.io/web/chapter2.html

# 사용자 이름만 있는 경우
ftp://username@jiunkoo.github.io/web/chapter2.html

# 사용자 이름과 비밀번호가 있는 경우
ftp://username:password@jiunkoo.github.io/web/chapter2.html

사용자 이름과 비밀번호는 리소스에 접근하기 위해 필요한 정보이다. 사용자 이름과 비밀번호는 '@' 문자로 구분한다. 사용자 이름과 비밀번호가 없는 경우 기본 사용자 이름과 비밀번호를 사용한다(기본 값은 클라이언트마다 다르다).

# URL의 예시
https://jiunkoo.github.io/web/chapter2.html

# 경로
/web/chapter2.html

# 경로 조각
/web
/chapter2.html

경로는 리소스의 위치를 가리킨다. 리소스는 '/' 문자를 기준으로 경로 조각으로 나뉜다. 각 경로 조각은 각자 파라미터 컴포넌트를 가질 수 있다.

# URL의 예시
https://jiunkoo.github.io/web;type=folder/chapter2.html;img=false

# 파라미터
type=folder
img=false

파라미터는 리소스에 대한 추가 정보를 나타낸다. 파라미터는 ';' 문자로로 구분한다.

# URL의 예시
https://jiunkoo.github.io/web/chapter2.html?item=&color=red

# 질의
item=1000&color=red

질의는 리소스의 범위를 제한한다. 질의는 '?' 문자로 구분한다. 질의 컴포넌트 형식에 제약사항은 없다.

# URL의 예시
https://jiunkoo.github.io/web/chapter2.html#fragment

# 프래그먼트
fragment

프래그먼트는 리소스의 특정 부분을 나타낸다. 프래그먼트는 '#' 문자로 구분한다. 서버는 객체를 전체 단위로만 전송하기 때문에 클라이언트는 프래그먼트를 서버로 전송하지 않는다. 대신 클라이언트는 서버로부터 응답받은 리소스에 프래그먼트를 사용해서 일부만 보여준다.

3. 단축 URL과 URL 확장

3.1. 단축 URL

만일 URL이 엄청나게 길어지면 어떻게 될까? 사용자도 요청할 리소스를 가리키기 힘들뿐더러 리소스를 제공하는 작성자도 HTML 작성에 상당한 시간이 걸릴 것이다. 이러한 불편함을 극복하기 위해 단축 URL을 사용한다.

png

URL은 상대 URL과 절대 URL로 나뉜다. 절대 URL은 리소스에 접근하는데 필요한 모든 정보를 가진다. 상대 URL은 일부 정보만 가지고 있기 때문에 리소스에 접근하기 위해 기저 URL을 활용한다. 기저 URL이란 상대 URL의 기준이 되는 경로로 절대 경로의 일부이다.

png

위 그림과 같은 방법으로 상대 URL을 절대 URL로 변환할 수 있다.

3.2. URL 확장

URL 확장은 사용자가 URL을 입력한 다음 혹은 입력하는 동안 자동으로 확장하는 기능을 말한다. 확장 기능은 호스트 명 확장과 히스토리 확장으로 나뉜다. 호스트 명 확장은 사용자가 'google'을 입력했을 때 'www.'와 '.com'을 붙여서 'www.google.com'을 만든다. 히스토리 확장은 과거에 방문했던 URL 기록을 저장한 상태에서 사용자가 URL를 입력했을 때 완결된 형태의 URL을 선택하게끔 한다.

4. 안전하지 않은 문자

URL에 이진 데이터나 알파벳 외의 문자가 포함되는 경우 안전하지 않은 문자를 안전한 문자로 인코딩한다. 좀 더 구체적으로 말하자면 안전하지 않은 문자는 퍼센티지 기호(%)로 시작해 ASCII 코드로 표현되는 두 개의 16진수 숫자로 이루어진 '이스케이프'문자로 바꾼다. URL에서 예약된 문자들을 본래의 목적이 아닌 다른 용도로 사용하려면 그 전에 반드시 인코딩해야 한다.

Last updated