URL이 나타내는 정보들

url은 google.com, facebook.com과 같이 웹상에서의 주소와 경로를 나타내는 문자이다. 평소에 웹서핑을 할때에는 그다지 신경쓰지 않고 지나치던 이 url에는 생각보다 많은 정보들이 들어있으며 심지어는 해킹의 수법으로도 자주 쓰인다는 사실을 알고 있었는가?

기본적으로 어느정도 구색이 갖춰진 웹사이트, 웹서비스에 경우에는 대부분 'REST API’라는 url routing 법칙을 지키고 있다. 물론 2000년도 초~중반에 설계되고 운영되는 웹사이트들의 경우에는 web/main/index.php, /hello/test.php?name1=value1&name2=value2 와 같이 정말 허술함 그 자체를 자랑하는 url을 고수하는곳도 있긴 하지만 현재 구동되는 거의 대부분의 웹서비스는 REST API를 준수하고 있다.

물론 검색 기능이나 페이징을 구현할때에는 post통신도 사용하지만 그런 특수한경우가 아닌 모든 경우에도 저런 허술한 url을 사용하는 경우가 과거에는 있었다는 의미이다. 그러면 과연 우리가 자주 사용하는 웹사이트들은 어떤 형태의 url을 사용하고 있는지 알아보자. 이번에 파헤쳐볼 사이트는 브런치, 트위터, 라프텔 이 세개의 서비스이다.

URL의 분석

먼저 기본 url부터 보도록 하자
enter image description here
보다시피 트위터를 제외하고는 메인도메인을 가지고 있는모습을 볼 수 있다. 트위터의 경우에는 현재 있는 페이지가 home이라는 것과 사용중인 언어가 lang=ko즉 한글을 사용중이라는것을 알 수 있다.

만약 여기서 게시물(또는 아이템, 이미지 등등)을 클릭하고 그 페이지로 이동하게 되면 어떤 모습인지 확인해보자.
enter image description here
브런치는 @srk1630 즉 글을 올린 게시자를 타고 231, 글 번호로 이동하는 모습을 볼 수 있다. 트위터의 경우에는 url이 조금 해괴한데, LOVERS_morakyo 즉 글 게시자를 타고 status를 넘어 113- 인 글 번호로 이동하는 모습을 볼 수 있다. 모든 게시물을 마지막 컬럼의 url로 통합한 모양인지 글 번호가 상당히 긴 모습을 보인다. 마지막으로 라프텔은 item말그대로 아이템을 타고 13300을 탄 후 아이돌-마스터로 이동하는 것을 확인할 수 있다.

여기서 흥미로운 점은 laftel.net/item/13300/아이돌-마스터laftel.net/item/13300 둘다 똑같은 페이지로 redirect된다는 점이다. 여기서 라프텔에서는 한글 url을 사용하기 위해 순번과 한글 url 두개를 중첩시키는 방식으로 어느정도 한글 url에서의 타협점을 본 것이라고 유추할 수 있다.

그렇다면 검색을 했을 경우에는 어떨까?
enter image description here
셋다 메인도메인 뒤에 /search?이 붙는 모습을 확인할 수 있는데 이것을 'GET 터널링’이라고 부른다. 보통 restful(rest api를 제공하는 웹 서비스를 restful하다고 부른다)한 웹 서비스들은 검색시 대부분 get터널링을 사용하는 모습을 볼 수 있다.

하나씩 뜯어보자면 브런치는 /search?q=로마의%20휴일 question의 q를 인용해 로마의 휴일이라는 검색어를 찾겠다는 뜻을 표하고 있다. 여기서 로마의 휴일중 중간에 들어간 %20은 HTML문서의 특수문자로 스페이스바 대신 공백효과를 주는데 쓰이는데 보통 url에서는 아무것도 들어있지 않은 공백(스페이스바)를 사용하지 않는것이 암묵적인 규칙이기 때문에 보통 -하이픈 이나 %20공백 특수문자를 이용한다.

이번에 예로 들어본 웹서비스는 3개뿐이지만 세상에는 다양한 목적을 가진 웹서비스들이 존재하고 그 서비스들을 만들때에 항상 비슷한 방식의 url을 사용하지는 않는다. 따라서 웹 서비스를 이용할때에 사이트 주소를 보는 습관이 생긴다면 server side를 개발할때 url routing을 더욱 수월하게 할 수 있을것이다. 다음 글에서는 가장 유명하고 자주 시도되는 SQL인젝션과 XXS스크립팅과 url의 상관관계, 그리고 웹의 발전에 따른 url의 해킹을 방지하기 위한 점진적인 발전과정을 알아볼것이다.