20100122 :: 인터넷 주소(url)은 대소문자를 구분할까?

인터넷 주소 입력창에 입력하는 인터넷 주소. 인터넷 주소는 과연 대소문자를 구분할까요?

딱히 집어서 그렇다, 아니다를 구분할 수가 없습니다. 특정 웹 문서의 인터넷 상의 주소를 우리는 URL이라고 합니다. 이 URL의 구성을 먼저 살펴보도록 하지요.

예를 들어 http://www.myservice.com/somepage.jsp?articlenum=5 라는 URL은 크게 5개 부분으로 구성되어 있다고 볼 수 있습니다. 이는 다음과 같이 구성됩니다.

  1. http:// -> 서버로부터 웹 문서 정보(html)와 이미지 등의 리소스를 받아올 프로토콜입니다. 프로토콜은 데이터를 어떤 순서로 넘겨주는 방식을 미리 정해 놓은 것이라 생각하시면 됩니다.
  2. www.myservice.com/ -> 서버의 도메인 네임입니다. 인터넷에 물려있는 컴퓨터들은 고유의 주소인 ip를 가지고 있습니다. 하지만 ip는 숫자로 구성되어 사람이 기억하기 힘드므로, 도메인네임을 부여하여 구분 및 기억을 쉽게 하도록 합니다. 우리는 흔히 이런 도메인까지만 주소창에 입력하여 웹 사이트로 접근하곤 합니다.
  3. /somepage.jsp -> 해당 서버 내의 특정 파일 위치입니다. 해당 서버의 웹 서버가 서비스를 제공하는 디렉터리 혹은 그 하위 디렉터리 어딘가에는 저 이름의 파일이 존재합니다.
  4. jsp등의 서버 사이드 스크립트에서 동적인 내용을 구성할 때 미리 전달되는 파라미터 입니다. 내부적으로 articlenum이라는 값을 받아주는데, 예를 들자면 5번 게시물을 표시하겠다는 의미 정도가 됩니다.

이러한 URL의 구성에서 먼저, 도메인 네임은 대소문자를 구분하지 않습니다. 도메인 네임은 도메인 네임 서버 (DNS)에서 확인하여 해당 주소의 컴퓨터 ip를 브라우저에게 돌려줍니다. 그러면 웹 브라우저는 DNS가 알려주는 ip로 접속하여 웹 페이지의 정보를 내려받게 됩니다. 이 도메인 네임 서버들은 대소문자에 무관하게 동작합니다. (주소창에 구글이나 네이버의 주소를 대문자나 소문자 혹은 섞어서 사용해도 아무런 문제 없이 잘 접속하는 것으로 확인이 가능합니다.)

문제는 서버까지 도달한 다음입니다. 우선 윈도 기반의 운영체제로 가동되는 서버들은 우리가 흔히 사용하는 윈도XP나 비스타, 윈도7에서와 마찬가지로 디렉터리 명이나 파일명에서 대소문자를 구분하지 않습니다. 따라서 위의 예시 주소를 http://www.myservice.com/SomePage.jsp, http://www.myservice.com/SOMEPAGE.JSP 등으로 변경하여 입력하여도 올바른 페이지를 보여주게 됩니다.

그런데 웹서버 중에서는 리눅스나 유닉스 계열의 서버들도 아주 많이 있습니다. 이들 운영체제는 명령어나 파일, 디렉터리 이름에 사용되는 문자에 대해 모두 대/소문자를 구분합니다. 즉 이들 운영체제에서는 somepage와 SomePage, SOMEPAGE는 모두 엄연히 다른 이름입니다. 따라서 만약 www.myservice.com에 해당하는 서버가 리눅스 서버라면 http://MY.SERVICE.COM/somepage.jsp 는 올바로 접속이 가능하지만, http://my.service.com/SomePage.jsp는 올바른 접속이 되지 않고 HTTP 404 에러가 발생하게 됩니다. (물론 별도의 SomePage.jsp 파일이 있다면, 그 파일의 내용이 표시될 것입니다.)

변수값으로 전달되는 ?이후의 부분들도 마찬가지 입니다. 이는 운영체제 보다는 서버사이드 스크립트에 사용된 언어가 무엇인가에 의존적이지요. 예를 들어 언어 자체의 문법이 대소문자를 구분하는 jsp, php의 경우에는 이 부분에서도 대소문자를 구분합니다. (윈도 서버에 설치되었다 하더라도 말이지요) 반대로 비주얼베이직의 특성을 물려 받은 asp 같은 경우에는 대소문자를 구분하지 않으므로 상관 없습니다.

따라서 오늘의 궁금증에 대한 결론을 정리해 보자면

  1. 도메인 주소명은 대소문자를 구분하지 않는다.
  2. 디렉터리 명 이하의 주소는 서버의 운영체제에 따라 다르다. 윈도 서버는 대소문자를 구분하지 않지만, 리눅스나 유닉스 계열의 서버는 대소문자를 구분한다.
  3. 매개 변수명은 웹 서비스를 구성한 스크립트 언어 특성에 따른다. asp를 제외한 대부분의 서버 사이드 스크립트는 대소문자를 구분하는 편이다.

결국 MS 제품들은 거의 대소문자를 구분하지 않는 것으로 나타나네요. 뭐 그렇다고해서 그것이 반드시 편하고 좋다는 이야기는 아닙니다. 그저 제가 궁금해서 이래 저래 조사해본 내용이고, 별 영양가는 없는 포스팅이 되어 버렸네요. ㅠㅠ

  • 요즘 트위터에서 많이 사용하는 bit.ly같은 주소 줄여주는 서비스들은 대소문자를 구별하더군요. 좋은 글 감사합니다.

    • 주소를 줄여주는 서비스들은 그 원리가 참 신기하긴 합니다만, 아마 주소 자체를 변수값으로 사용하기 때문에 대소문자를 구분하는 듯 보입니다. 사실 대소문자 구별과 관련해서는 신경을 쓰다보면 여러모로 헷갈리고 어려운 것들이 많아지지요.

  • 부들

    마침 궁금했는데 …
    좋은 자료 감사합니다. ^^