URL은 Uniform Resource Locator의 약자로써 사용자가 원하는 자원이 네트워크 상 어디에 있는지를 알려주기 위한 규약이다.
URL 내부에는 네트워크에서 찾고자 하는 특정 정보 자원의 종류와 위치가 기록되어 있다.
우리가 흔히 알고 있는 URL이란 "http://~"혹은 "https://~"로 시작하는 웹 사이트 주소겠지만 사실 "ftp://~", "file://~", "mailto://~" 등 많은 종류의 URL이 존재한다.
그렇다면 왜 이렇게 많은 URL이 존재하는 것일까?
브라우저는 우리가 흔히 사용하는 웹 서버에 액세스 하기 위한 Client로써 활용할 수 있지만 파일을 다운로드/업로드하는 FTP 기능이나 Mail 기능 또한 가지고 있다.
그렇기 때문에 브라우저가 가지고 있는 다양한 기능 중 어떤 기능을 통해 데이터에 액세스 할지 판단하는 재료가 필요하며 이를 위해 http, file, ftp, malito 등의 다양한 프로토콜이 준비되어 있는 것이다.
[프로토콜]://[호스트]/[파일 경로]
위에서 기입한 여러 Protocol 중 FTP와 File 프로토콜 사이에 혼동이 올 수도 있을 것 같다.
둘 다 파일을 가져오는 프로토콜인데 왜 나눠놨을까?
FTP는 File Trasnfer Protocol의 약자로써 파일을 업로드/다운로드할 때 사용하는 프로토콜이다.
이때 중요한 것은 FTP는 "웹 서버에 있는 파일"을 업로드/다운로드하기 위한 프로토콜이라는 것이다.
File 프로토콜은 단순히 지정한 PC에 존재하는 파일을 읽어오는 프로토콜이다.
즉, FTP 프로토콜은 웹 서버에 있는 파일을 가져와야 하므로 네트워크를 통해 파일을 가져오지만 File은 지정한 PC에 존재하는 파일을 가져오면 되기 때문에 굳이 네트워크를 사용할 필요는 없다.
Protocol은 Client가 어떻게 웹 서버에 존재하는 자원에 접근할지 알려주는 통신 규약이다.
대표적으로 이메일 주소를 지정하는 malito:, 파일을 주고받는 ftp:, 브라우저와 웹 서버 사이에서 웹 문서 및 구성 자원을 전송하는 https:, http:가 존재한다.
HTTP는 HyperText Transfer Protocol이다.
여기에서 HyperText란 참조(하이퍼링크)를 통해 User가 다른 문서로 바로 접근할 수 있는 텍스트 파일을 의미한다.
HTTPS는 HyperText Transfer Protocol Secure의 약자로써 HTTP에 보안성을 더한 프로토콜이다.
HTTP와 HTTPS는 가장 많이 활용되는 프로토콜로써 일반적으로 보안성이 더 강력한 HTTPS가 많이 활용된다.
브라우저는 웹 서버에 보낼 Request Message를 만들기 위하여 URL을 해독한다.
먼저 브라우저는 프로토콜에 맞는 형식으로 URL 요소를 분해시킨다.
"http://www.sample.com/dir/index.html" URL을 분해해 보자.
브라우저는 이 URL을 "http:", "//", "www.sample.com", "/dir/index.html"로 나눈다.
"http:"는 프로토콜로써 어떤 데이터에 액세스 할지를 나타낸다.
위에 설명한 대로 http는 웹 서버에 존재하는 웹 문서 및 구성 자원에 액세스 하기 위한 프로토콜이다.
"//"는 이후 나오는 문자열(www.sample.com)이 서버의 이름(도메인명) 임을 나타내기 위한 구분자이다.
도메인에 대해서는 추후 DNS를 다룰 때 자세히 공부할 것이다.
"/dir/index.html"은 데이터 출처(파일)의 경로명을 나타낸다. 즉, "www.sample.com"이라는 웹 서버에 존재하는 여러 파일 중 "/dir/index.html" 파일을 가져오고 싶다는 것이다.
즉, URL을 해독하면 "www.sample.com"이라는 웹 서버의 /dir/index.html이라는 웹 문서 및 구성 자원을 가져온다는 의미이다. 웹 서버는 이 요청을 받아 index.html 및 index.html을 완벽하게 나타내기 위해 필요한 데이터들을 받아올 것이다.
만약 아래와 같은 URL을 통해 웹 서버에 접근한다고 가정하자.
"www.sample.com"이라는 웹 서버에 존재하는 /dir/라는 디렉터리에 접근하는 것까지는 알겠는데 반환받고 싶은 파일명을 기입하지 않았다.
이렇게 파일명이 기입되지 않은 경우 dir에 존재하는 여러 파일 중 어떤 파일에 액세스 하고 싶어 하는지가 모호해진다.
이런 상황을 대비하여 미리 서버 측에 Default 파일명 설정을 해두는데 서버에 따라 다르지만 주로 "index.html" 혹은 "default.html"로 설정해 둔다.
우리가 흔히 보는 방식인 아래와 같은 URL도 파일명을 생략한 것이다.
끝에 "/"(Root Directory)로 설정되어 있으므로 Root Directory에 저장되어 있는 Default 파일을 가져올 것이다.
즉, /index.html 또는 /default.html 파일에 파일에 액세스 할 것이다.
정말 극한의 극한까지 생략하여 마지막 "/"까지 생략해 버린 URL이다.
이렇게 디렉터리명까지 생략해 버릴 경우 무엇을 요청하는지 애매해지기 때문에 지나친 생략일 수도 있지만 URL 규약에선 이것 또한 허락하고 있으며, "/"가 마지막에 붙어있는 경우와 똑같이 작동한다.
문제는 아래와 같이 미묘한 URL이 입력되었을 때이다.
/fileordir로 끝이 났는데 이 fileordir을 Root Directory 아래 존재하는 파일명으로 봐야 하는지 Directory로 봐야 하는지 모호하다.
이 경우 존재하는 것으로 알아서 판단하는 것이 일반적이다.
예를 들어 fileordir이라는 파일이 있을 경우 파일로, fileordir이라는 디렉터리가 있을 경우 /fileordir/index.html을 반환하는 형식으로 작동하는 것이다.
같은 이름의 파일과 디렉터리를 동시에 만들 수 없으므로 이런 처리가 가능해지는 것이다.
네이버에서 스포츠 기사 1개 URL을 가져와보자.
https://sports.news.naver.com/news
까지는 익숙한 형태이지만 ?, &, = 같은 이상한 기호들이 보인다.
이들을 "URL Parameter"라고 한다.
URL 파라미터란 웹 서버에서 얻어오는 데이터에 대하여 추가적인 정보 주고 싶을 때 사용하는 값이다.
특히 GET 방식에서 많이 활용되는데 GET 방식에 대해선 훗날 HTTP 및 HTTP Method을 공부할 때 자세히 알아보도록 하고 지금은 URL 해석에 대해 공부하고 있으므로 URL Parameter 각각이 어떤 뜻을 가지는지 알아보자.
먼저 Query String이다.
Query 1개는 "[Parameter Name]=[Parameter Value]" 쌍으로 구성되어 있으며 Query 여러 개를 "&" 문구를 통해 이을 수 있고 이렇게 모든 Query를 이은 문자열을 Query String이라고 한다.
이때 "?" 기호를 사용하여 Query String과 URL을 구분한다.
"?" 기호 앞에 있는 문자열은 URL, "?" 기호 뒤에 있는 문자열은 Query String으로 간주하는 것이다.
위 예시 URL은 "oid"라는 Parameter 값은 076, "aid"라는 Parameter 값은 0003975750으로써 할당한 것이다.
Bookmark라는 것도 존재한다. 벨로그 아무 글이나 들어가 오른쪽 Section 중 1개를 선택해 보자.
이때 "#"이라는 문구가 존재하는 것을 볼 수 있는데, 이 # 뒤에 나온 값이 bookmark이다.
이는 하이퍼링크를 클릭했을 때 특정 위치로 이동하기 위해 사용하는데 이 때 콘텐츠(페이지) 내용이 바뀌는 것은 아니고 특정 참조 지점(Anchor;앵커)으로 이동하기 위함이다.
만약 특정 버튼을 클릭했을 때 갑자기 똑같은 창에서 다른 위치로 이동할 경우 이 Bookmark를 활용한 것이다.
URL Parameter는 2가지 종류로 나눌 수 있는데 "액티브 파라미터"와 "패시브 파라미터"이다.
파라미터 값이 변동되면 화면의 내용이 바뀌는 경우 액티브 파라미터라고 부른다.
반대로 파라미터 값이 변동되더라도 화면의 내용이 바뀌지 않으면 패시브 파라미터라고 부른다.
패시브 파라미터는 웹 로그 분석 툴을 통한 통계나 데이터 처리 등을 위해서 활용한다.