도메인 연결과 관련한 궁금증을 해결해 보자(URL 조작 포함)

여러분이 노력을 들여서 인터넷 공간에 집(웹사이트)을 하나 만들었다고 가정하자. 다음 중 어떤 형식의 주소로 연결되기를 원하겠는가? 아래에 예시한 주소는 모두 나하고는 관계가 없는 사이트임을 유의할 것.
  1. blog.naver.com/haeyoung
  2. haeyoung.tistory.com
  3. haeyoung.com 
당연히 3번이다. 짧고, 따라서 기억하기 쉽고, 다른 서비스에 세들어 사는 것이 아니라 내 집을 갖고 있는 듯한, 다시 말하자면 내 정체성을 확실히 드러내주는 주소이기 때문이다. 여담이지만 haeyoung.com은 2015년 1월 12일 현재 3,095 달러에 팔리기 위해 시장에 나와 있다! 3번 방식으로 내 웹사이트를 운영하려면 haeyoung.com이라는 도메인을 구입해야 함이 당연하다. 기술적으로도 해결할 일이 많다. 서버나 웹사이트를 외부 호스팅 서비스 업체에 맡기든, 혹은 내가 직접 컴퓨터에 웹 서버와 사이트를 구축하여 운영하든, 많은 공부가 필요하다. 단지 컨텐츠만 제공하고 웹사이트 구축부터 운영까지 모든 것을 일괄적으로 서비스 업체에 맡기는 것이 아니라면 말이다.

자기 도메인을 소유하고 있다 가정한 상태에서 다중 사이트를 운영하기를 원한다고 해 보자. haeyoung.com/research, haeyoung.com/hobby 등 서브폴더 형태가 좋은가, 혹은 subdomain1.haeyoung.com, subdomain2.haeyoung.com과 같은 서브 도메인 형태가 좋은가? 여기에는 절대적인 해답은 없는 것으로 보인다.

제목은 간단하게 적었을지 모르나 이를 낱낱이 분해해 보면 다음과 같이 조금씩 다른 요구 사항으로 나뉜다. 정확히 말하자면 해결 방법도 서로 다르다. 이 문서에서는 이와 관련하여 내가 갖고 있는 궁금증과 그 해결 방안을 정리해 보고자 한다. 이 문서의 작성이 완결되는 데에는 다소 시간이 걸릴 것이다. 그리고 100% 올바르게 작동함을 보장할 수 없음에 유의하라.

자, 내가 원하는 것은 다음 중 어느 것에 해당하는가? 웹브라우저 주소창에 입력한 주소를 "내 입맛대로" 보내고 싶다는 면에서는 마치 유사해 보이지만 실제는 꽤 복잡하다. 이렇게 정의해 보면 어떨까? "나는 mydomain.com의 소유자이다. 외부 사용자가 mydomain.com을 URL의 일부로 포함하는 주소를 웹브라우저에 입력할 경우 나는 내가 의도한 사이트가 나타나게 하고 싶다. 내가 직접 웹 서버를 운영하든 혹은 호스팅에 의존하든 그것은 중요하지 않다"
  1. blog.naver.com/user_id라는 네이버 블로그를 운영하고 있다. 내 소유 도메인 mydomain.com을 치면 이 네이버 블로그로 연결되게 하고 싶다. 또는 blog.mydomain.com을 입력하면 이 네이버 블로그로 연결되게 하고 싶다.
  2. 서로 다른 곳에 여러 웹페이지가 운영되고 있다. 이를 www.mydomain.com info.mydomain.com forum.mydomain.com 등 별도의 서브도에인으로 접속하게 하고 싶다.
  3. mydomain.com www.mydomain.com 어느 것을 주소창에 넣더라도 동일한 사이트에 연결되게 만들고 싶다.
  4. aaa.com을 접속했을 때 자동으로 bbb.com으로 가게 하고 싶다(리다이렉트와 리라이트)
  5. 도메인 관리 업체의 포워딩 서비스란?
그러면 간단한 솔루션부터 알아보자.

5. 도메인 포워딩
가장 간단하고 이해하기 쉽다. 대부분의 도메인 관리 업체에서 제공해주는 서비스이다. 웹 페이지 소스코드를 건드리거나 DNS 설정을 조절할 필요가 없는 경우이다. targt.com을 목적지로 하여 포워딩을 세팅하면 mydomain.com 혹은 www.mydomain.com 무엇이라고 입력하든 내가 설정한 주소인 target.com으로 연결해준다. 주소창에 입력한 그대로가 보이면 고정 포워딩, 실제 목적지의 주소를 그대로 드러나게 한다면 유동 포워딩이다. 간단한만큼 모든 것을 다 입맛에 맞게 하기는 어렵다. 예를 들어 목적지가 target.com이고, 그 하위에 target.com/wiki라는 하위 주소도 존재한다고 하자. mydomain.com -> target.com으로 이동하도록 포워딩을 했다면, mydomain.com/wiki라고 쳐서 target.com/wiki로 보낼 수는 없다. 뿐만 아니라 웹 서버를 확장했다 하여도 info.mydomain.com service.mydomain.com 등 다양하게 연결을 하지 못한다. 단, mydomain.com을 any.site.com/path/to/here로 보낼 수는 있다. 다시 말하자면 포워딩 목적지 주소에는 슬래쉬 뒤에 하위 주소가 있어도 된다.

1번 요구사항의 해결
mydomain.com이라고만 쳐서 blog.naver.com/user_id로 곧바로 가게 만드는 가장 쉬운 방법은 5. 도메인 포워딩을 사용하는 것이다. blog.mydomain.com과 같이 서브도메인(blog)을 포함하여 주소창에 입력했을 때 blog.naver.com/user_id로 가게 하려면 도메인 관리업체 <가비아>의 경우 네임플러스를 쓰면 된다. 가비아에서는 네임플러스 서비스의 호스트(IP) 정보 관리에서 텍스트큐브, 다음 Tstory, 이글루스 및 네이버의 블로그에 대해서 원하는 내 도메인의 주소(blog.mydomain.com과 같이 서브도메인 형태여야 함)와 실제 IP 주소를 매핑하게 해 준다. 이것으로 끝나는 것이 아니고, 각 블로그 사이트에 가서 내 계정이 어떤 도메인으로 불려지는지를 설정해 주어야 한다. 왜 그래야 하는가? 서비스 제공업체에서 공개한 IP 주소는 여러 사용자가 공유하는 것이므로, 각 사용자마다 원하는 맞춤 주소를 해석하여 내부 사이트로 연결하려면 당연히 이러한 인증 작업이 필요할 것이다. 예를 들어 네이버 블로그는 125.209.214.79를 IP 주소로 사용하도록 되어있다. 정확히 말하자면 DNS 설정의 A 레코드에 해당한다. 이 주소는 네이버 블로그를 사용하는 철수, 영희, 미경 전부가 공통적으로 사용하는 것이므로, 네이버 블로그의 입장에서는 이들 사용자가 각자 소유의 어떤 도메인 주소를 통해 들어오는지를 알아야만 하는 것이다.

2번 요구사항 - 구글 사이트 도구 또는 구글 블로그(Blogger)에서 만든 페이지를 연결하려면
이건 약간 복잡하다. 어떻게 보면 2번 요구사항과 일부 겹치는 면이 있다. 구글 사이트 도구와 구글 블로그(Blogger)에서 만들어진 웹사이트의 주소는 다음과 같은 형태를 하고 있다.
  1. https://sites.google.com/site/jeong0449/  <= 여러분이 읽고 있는 문서가 바로 여기에 만들어진 것이다.
  2. http://haeyoungsblog.blogspot.com
만약 site.mydomain.com을 입력했을 때 1번으로, blog.mydomain.com을 입력했을 때 2번으로 연결되기를 바란다면 어떻게 하면 될까? 해결 방법은 두 가지 경우가 조금 다르다. 구글 사이트 도구 검색말 중에는 내 도메인에 사이트 매핑하기라는 항목이 있다. 반면 구글 블로그에서는 약간 다른 해결책을 제시하고 있다(맞춤 도메인을 위한 CNAME 레코드 만들기). 전자(구글 사이트)의 경우 DNS 설정에서 CNAME 레코드에는 ghs.googlehosted.com를 입력해야 하고 후자(Blogger)에서는 ghs.google.com을 입력해야 한다. 또한 Blogger에서는 보조 CNAME 레코드를 추가로 입력해야만 한다(2015년 1월 31일 현재 보조 CNAME 레코드 입력은 필요가 없어진 것으로 보인다). 어떤 경우든 구글 서비스의 설정 측에 하위 도메인 형태로 내 도메인명을 공급해 주어야 한다. 구글 사이트 도구는 최대 5개까지, 구글 블로그는 하나의 주소만 연결 가능하다.

2번 요구사항 - 일반적인 웹호스팅 서비스를 이용 중이라면
서비스 제공업체에 물어봐야 될 것이다. Ncity에 구입한 유료 호스팅 서비스의 경우 이를 요청하니 DNS 설정의 A 레코드에 넣을 수 있는 IP 주소를 알려주었다.

3번 요구사항
이는 의외로 복잡하다. 엄밀하게 말하자면 www.mydomain.com과 mydomain.com은 다른 주소이다. 우리는 습관적으로 www를 넣지 않는 것에 익숙해졌고, www 존재 여부에 관계 없이 동일한 사이트가 나오기를 기대하고 있다. 우선 다음의 글 블로그 주소에서 www와 non-www 문제를 읽어보라.

4번 요구사항
이를 해결하기 위한 이론적인 배경 역시 간단하지 않다. 웹서버(apache), DNS, html 소스 변경 등 여러가지 방법을 동원할 수 있다. 먼저 html 코드를 변경하는 방법을 알아보자. index.html 파일의 <head>..</head> 안에 다음과 같은 내용을 넣으면,  지정된 시간(여기서는 5초) 후에 bbb.com으로 이동한다. 주소창에는 새로 연결되는 주소인 bbb.com이 나타난다.

<meta http-equiv="refresh" content="5; url=http://bbb.com/">

Apache의 rewrite(재작성) 기능을 사용하여 유사한 일을 할 수 있다. 재작성이란 어떤 규칙을 가지고 다시 쓰는 것이라고 생각하면 된다. .htaccess 파일에 다음의 내용을 넣어라. 다음의 사례에서는 http://aaa.com을 http://bbb.com으로 보내는 것은 물론, http://aaa.com/sub를 http://bbb.com/sub로 보내게 된다. 정규표현식을 쓰면 좀 더 정교한 제어가 가능하다. 주소창에는 bbb.com이 나타난다.

RewriteRule (.*) http://bbb.com/$1

상세한 설명과 실제 적용 사례는 아파치 URL 재작성 지침서[아파치] RewriteRule을 이용한 주소 이동을 쓰는 것이다. 보다 단순한 방법은 redirect를 쓰는 것이다. Redirect는 새로 작성함이 아니라 단순히 지정된 주소로 목적지를 바꾸어 줌을 의미한다. htaccess Redirect: How to redirect webpages에 풍부한 사례가 나와 있다. 존재하지 않는 URL에 대한 전송 요청이 온 경우 .htaccess 파일에 다음과 같은 내용을 넣어서 새로운 위치로 가게 할 수 있다.

Redirect /~aaa http://bbb.com

다음의 경우는 어떨까? 이때엔 http://aaa.com/test를 http://bbb.com/test로 보낼 수 있다. 단, Redirect문의 target 주소 맨 끝에서 슬래쉬(/)를 빼먹으면 안된다.

Redirect / http://bbb.com/

내부 주소로 리다이렉트를 할 때에는 순환 오류에 빠지기 쉬우므로 조심해야 한다. 예를 들어 mydomain.com/doku/doku.php?라고 전체 주소를 다 쓰지 않고 단지 mydomain.com이라고만 주소창에 적어도 한번에 연결되게 하려면 다음과 같이 한다.

Redirect /index.html http://mydomain.com/doku/doku.php?
(Redirect / <내부 사이트>라고 하면 순환 오류에 빠지기 쉽다)
Comments