인터넷 주소의 의미 ( URL / URI )
URL의 정확한 의미를 알지 못하는 사람일지라도 웹 브라우저 주소창에 입력하는 http://www.. 으로 시작하는 저 문장을 보편적으로 URL이라고 부른다. 그렇기에 URL이 정확히 무엇인지 모른다해도 사는 데는 아무런 문제가 없다. '야 그 기사 URL 좀 보내줘'하면 인터넷을 사용하는 이들은 누구나 내가 원한 그걸 보내주는데 굳이 상세히 알 것 까지야..
그러나 웹 개발을 하겠다는 사람은 그러면 안된다. URL이 무엇인지 정확히 모른다는 것 자체가 웹에 대한 정확한 이해가 없다는 건데 그런 사람이 웹을 개발한다는 것 자체가 앞뒤가 안 맞는 얘기 아닐까? 그리고 이 질문은 스스로에게 보내는 반성이기도 하다. 사실 나도 이에 대해 어렴풋이 아는 정도였기에 이 참에 제대로 공부하며 정리하려 포스팅한다.
- URL의 구성
먼저 URL의 각 부위가 무엇을 의미하는지 부터 알아보자
위키 백과에 나와있는 URL의 문법은 아래와 같다.
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
참고 : https://ko.wikipedia.org/wiki/URL
하지만 저걸 보니 무슨 말인지 더 헷갈렸다.
그래서 좀 더 쉽게 정리한 포스팅을 찾았다. 거기엔 아래와 같이 정리되어 있었다.
http:// | www | example.com | /folder | /file.html | #id |
URL Scheme | 호스트 명 (서버) | 도메인 네임 | 폴더 이름 | 파일 이름 | Fragment 아이디 |
호스트 네임 (IP 주소) | 리소스 |
참고 : https://ourcstory.tistory.com/69
좋군. 역시 웹에는 은인이 많다. 부연 설명만 덧대본다.
- URL Scheme
이는 자원에 접근할 방법을 정의해 둔 프로토콜 이름 ( ex : gopher,telnet, ftp,http .. 등등 ) 을 의미한다.
그러니까 http://라고 적힌 위의 URL에서는 HTTP 프로토콜을 통해 뒤의 자원에 접근하면 된다는 얘기다.
- 호스트 네임
먼저 호스트 네임 옆의 괄호안에 IP 주소라고 적힌 부분에 주목할 필요가 있다. 모든 웹서비스는 어떤 서버 컴퓨터에서 제공(호스팅)하고 있는 것이고 개방된 인터넷 상의 모든 컴퓨터는 IP라는, 숫자로 된 고유 주소를 가지고 있다. 그러니까 서버 컴퓨터도 당연히 IP주소를 가지고 있다는 말.
그러나 사람들이 이 숫자로 된 주소를 일일이 기억하긴 어렵다. 이를 극복하기 위해 개발된 게 DNS (도메인 네임 시스템)이다. 이 DNS가 IP 주소를 영문과 숫자 조합으로 기억하기 쉬운 도메인 네임, 위의 예시에선 example.com으로 변경해준다.
이 도메인 네임이 호스트명 (홈페이지 파일을 제공하는 호스트 컴퓨터(웹서버)의 이름, 위의 예에선 www. 호스트명은 www, domain, hosting, ftp 등등 다양하다.) 과 합쳐진 풀네임이 호스트 네임이다.
참고 : http://library.gabia.com/contents/domain/4005
- 리소스
리소스는 찾고자 하는 자원을 의미한다. 이 당연한 말을 굳이 집고 넘어가는 건 위 표대로 리소스 = 폴더이름, 파일이름이라고 설명하면 아래에서 URI와 URL의 차이를 설명할 때 혼동이 올 것이기 때문이다. 근데 그건 나중 얘기고 일단 URL의 개념대로만 설명하자면 URL에서 리소스는 위의 표에서 보이듯 폴더이름 + 파일이름이다.
- Fragment 아이디
#뒤의 값은 서버로 전달하지 않고 브라우저 내부에서만 사용된다고 한다. 정확히 어떨 때 사용되는지는 검색해도 말이 다 달라서 나도 정확히 모르겠다. ( 아시는 분 댓글 달아주시면 감사드리겠습니다! )
URL의 구성은 이렇다. 오케이. 근데 이건 구성에 대한 설명일뿐. 이를 통해 URL이 정확히 뭐냐는 물음에 답하기는 약간 부족해 보인다. 그래서 덧대어 보자면
- URL vs URI
URL이 정확히 무엇인지 알기 위해서는 URL과 굉장히 헷갈리는 표현인 URI와 비교하는 게 가장 효과적인 것 같다.
먼저 약자를 풀어보자.
URL ( Uniform Resource Locator )
URI ( Uniform Resource Identifier )
URL이나 URI나 앞에 붙은 UR이 Uniform Resource를 의미한다는 것은 같다. 영알못인 나는 앞에 Uniform이 뭘 의미하는건지 모르겠지만 ( 네이버에 검색해보니 '균일화된' 이라는 의미가 있다는데 딱 붙는 느낌은 아니다 아무튼 ) 그런 나도 Resource가 자원을 의미한다는 것 정도는 아니까 앞의 것들은 어쨌든 자원을 의미하는 거겠고
결국 Locator와 Identifier의 차이인데
Locator는 위치 탐사 장치를
Identifier는 식별자를 의미한다.
이것만 대충 조합해봐도
URL은 자원이 위치하고 있는 정보를 의미하고
URI는 자원을 식별할 수 있는 정보를 의미한다고 해석할 수 있다.
그래서 어쩌라고? ( 나는 저런 사전적 정의를 마주하면 이런 물음이 가장 먼저 떠오른다 )
나와 같은 의문이 드는 사람이라면 아래 두가지 인터넷 주소를 함께 보자
http://info.cern.ch/hypertext/WWW/TheProject.html
https://takeknowledge.tistory.com/28
(굳이 들어가 볼 필요는 없다)
위의 info.cern .. 은 세계 최초 인터넷 웹사이트의 일부분이고 takeknowledge ..는 내 블로그 최근 포스팅 글의 주소다.
일단 자세한 설명을 하기전에 위에서 해석한 URL과 URI의 뜻을 이 두 주소에 가져다 대보자.
두 주소 모두 해당 주소를 입력하면 딱 그 페이지가 나오는 걸로 봐서는 자원을 식별할 수 있는 정보, 그러니까 URI의 의미에는 부합하는 것 같다.
그러나 위의 주소는 .html 이라는 확장자로 끝나는 걸로 봐서 화면에 보여져야 하는 문서의 위치가, 그러니까 hypertext 폴더안의 WWW폴더 안의 TheProject.html 파일을 불러줘! 라고 정확히 정의되어 있는 반면 아래 주소는 호스트 네임 뒤에 /28이라는 숫자만 적혀있는 걸로 봐서 저게 자원이 위치하고 있는 정보를 정확히 기술하고 있는 것 같지 않다. 그러니까 URL에 의미에 부합하지 않는다.
이런 차이가 생긴 이유는 웹 개발 기술의 발전과도 연관이 있다. 과거의 웹은 클라이언트가 요청한 HTML 문서를 보여주는 것만으로도 그 역할이 충분했기에 클라이언트가 보고 싶은 html의 파일의 위치만 정확히 요청하면 됐지만 한 페이지에서 읽고 쓰고 수정하고 삭제하고 실시간으로 어떤 작업을 할 수 있게 되는 등 웹이 점점 복잡해짐에 따라 클라이언트의 요청이 다양해 질 필요가 있었고 그 수요를 해결하기 위해 다양한 요청을 간단하게 Rewrite해줄 수 있는 Handler들이 등장하며 단순히 클라이언트가 보고 싶은 자원의 위치를 기술해 요청하는 것만으로는 부족한 상황이 되어버린 것이다.
그렇기에 과거에 개설된 웹 페이지들의 인터넷 주소는 URL이라고 표현해도 무방했지만 최근엔 URL이라기 보단 URI라 부르는 것이 더 합당한 경우가 많다. 그것이 더 큰 개념이기도 하고 지금의 웹은 인터넷 주소창에 단순히 보고 싶은 문서의 위치를 요청하는 정도로 응답하기엔 굉장히 많은 기능을 담고 있기 때문이다.
ps. 배우는 입장에서 작성된 글입니다. 최대한 정확한 정보만 제공하기 위해 노력했지만 혹시 틀린 부분이 있으면 언제든 댓글 남겨주세요