이전 제 사이트의 메인 페이지에는 도메인 검색기가 존재하고 있었습니다.  이는 도메인을 하나 갖고 싶어하는 사용자들이 굳이 NIC 사이트의 Whois 검색기를 통하지 않고서도 원하는 도메인의 사용여부를 쉽게 알아볼 수 있도록 제공했던 서비스인데, 제 사이트에 방문하는 많은 초보 개발자들은 도메인을 검색하는 것 자체보다는 어떻게 이러한 서비스를 자신의 사이트에서도 구현할 수 있을까?를 더 궁금해 하시네요... ^^

이 부분에 대해서는 마소 Jr 에 필자의 기사를 기재함으로써 궁금증이 풀리기는 하였을 것이지만, 어느덧 제가 소개한 방법은 한물이 지나간 방법이 되어버렸습니다. 해서, 이 자리에서는 좀 더 쉽게 도메인 검색기를 만드는 방법을 재소개하려 합니다. 이 부분에 대한 문의가 아직도 자주 들어오기 때문이지요. (물론, 아직까지는 "태오 엉덩이는 왜 그리 크냐?"가 가장 많이 들어오는 질문이기는 합니다.. T.T)

이미 Inet 컨트롤을 통해서 다른 사이트의 HTML 소스를 긁어오는 방법을 알고 있는 여러분이라면 이 도메인 검색기도 그 컨트롤을 통해서 가능할 것이라는 생각은 할 수 있을 것입니다. 그러나, 문제는 이번 예제는 다른 사이트에 존재하는 정적인 페이지의 원본이 필요한 것이 아니라 다른 사이트의 동적인 페이지가 필요하다는 것이랍니다.

이해가 안가는 독자를 위해서 이 말을 풀어서 설명해 보겠습니다. 여러분이 NIC의 Whois 검색기를 사용하려면 어떻게 하면 되죠? 물론, 그 사이트에 들어가서 검색하고자 하는 도메인을 검색하면 됩니다. 이것은 초보자도 알고 있는 사실일 것입니다. 그렇다면, NIC 사이트에 들어가지 않고도 원하는 도메인의 사용여부를 검색하고 싶다면?  그렇다면, 그 Whois 검색기에 사용되는 CGI에게 적절한 인자를 넘겨주면 될 것입니다.  이 역시 무슨 말인지 이해가 안간다면 Whois 검색기 사이트에서 들어가서 해당 페이지의 HTML 소스를 보도록 해요.

다음 그림 1, 2는 국내 도메인을 검색하는 Whois.nic.or.kr의 페이지이며, 그 페이지의 HTML 소스입니다.


그림 1 Whois.nic.or.kr


그림 2 Whois.nic.or.kr의 HTML 소스

소스를 보면 알겠지만, 사용자가 Whois 검색창에 자신이 검색하고픈 도메인명을 기록하고 Submit 하게되면 이 도메인 명을 Value 란 인자로 /cgi-bin/newwhois.cgi 에게 전송하게 하는 것을 볼 수 있습니다.(그림 2) 그리고, 그 나머지의 처리는 CGI가 담당하고,  도메인 검색결과를 대단히 단순한 텍스트의 형태로 제공합니다. 다음 그림 3처럼 말이죠.


그림 3 Whois.nic.or.kr 검색결과

소스를 통해 우리는 Whois에서 사용하는 CGI의 완전한 경로를 유추할 수 있을 것입니다. 그 경로는 http://whois.nic.or.kr/cgi-bin/newwhois.cgi 일 것이며, 이 CGI가 요구하는 인자는 Value 라는 인자의 도메인 명이겠죠?. 그렇다면, 여기까지 알아냈다면 이제부터는 매번 도메인을 검색하고자 할 경우 해당 사이트를 들어갈 필요가 없이, 직접 브라우저의 URL 창에 이를 입력함으로써 이 CGI를 이용할 수 있을 검다. 예를 들면 브라우저에 다음과 같이 입력해서 말임다.

http://whois.nic.or.kr/cgi-bin/newwhois.cgi?VALUE=infopub.co.kr

그러면, 다음 그림 4와 같이 완전하게 검색된 결과화면이 등장하겠죠? 브라우저의 주소를 유심히 보세요


그림 4 검색된 결과화면

이 결과로 알 수 있는 것은 우리가  http://whois.nic.or.kr/cgi-bin/newwhois.cgi?VALUE=infopub.co.kr 라는 페이지를 Inet 컨트롤로 접근하게 되면 위의 그림과 같은 결과를 얻어낼 수 있다는 것이랍니다.

그렇다면, 이제 Inet 컨트롤을 통해서 도메인 검색기를 만들어 보도록 하자구요. 어떻게 하면 될 것인지 감이 오기 시작할 것이라 생각하는데요... 아니신가요?

DomainSearch.asp

<% Option Explicit
Dim inet Dim url, str, domain, domainInfo Dim iStart, iEnd

'① 폼에서 받아온 도메인명, 값이 없다면 기본값은 태오 사이트로 지정한다. domain = request("domain")
if domain = "" then domain = "taeyo.pe.kr" end if
'② Nic의 Whois로 전체경로를 완전하게 설정한다.
url = "http://whois.nic.or.kr/cgi-bin/newwhois.cgi?VALUE=" & domain
'③ Inet 컨트롤을 사용해서 해당 페이지의 결과 HTML 소스와 str 이라는 변수에 담는다.
Set inet = Server.CreateObject("InetCtls.Inet")
inet.RequestTimeOut = 20
inet.Url = url
str = inet.OpenURL
'④ 소스중의 "# KOREAN","# ENGLISH" 이라는 문자가 시작하는 곳의 위치값을 얻는다.
iStart = instr(str, "# KOREAN")
iEnd = instr(str, "# ENGLISH")
'⑤ "# KOREAN"라는 문자와 "# ENGLISH"라는 문자가 존재하지 않는다면..
'이 도메인은 등록되지 않은 도메인이다.
if iStart = 0 and iEnd = 0 then
domainInfo = "사용 가능한 도메인입니다."
else
domainInfo = Mid(str,iStart,iEnd-iStart)
end if
%>
<HTML> <BODY>
<form method="post" action="DomainSearch.asp">
검색할 도메인 : <input name= "domain"value="<%=domain%>"> (국내 도메인만 가능)
</form>
<hr width= "600" align= "left"><b><%= domain%></b>도메인 검색결과<p>
<pre><%=domainInfo%></pre>
</BODY>
</HTML>

그리고, 결과화면은 다음과 같을 것입니다. 그림 5는 존재하는 도메인을 검색했을 경우,  그림 6은 존재하지 않는 도메인을 검색한 경우의 화면이지요.

그림 5 존재하는 도메인을 검색했을 경우

그림 6 존재하지 않는 도메인을 검색한 경우의 화면

그렇다면, 이제 소스를 하나씩 이해해보도록 할까요?

① domain = request("domain")
if domain = "" then
domain = "taeyo.pe.kr"
end if

이 부분은 폼에서 domain 이라는 인자로 넘어온 값이 있는지를 체크하는 것이랍니다. 
만일, 그 값이 없다면 기본 값으로 domain 에 taeyo.pe.kr 값을 지정하구요....

② url = "http://whois.nic.or.kr/cgi-bin/newwhois.cgi?VALUE=" & domain

domain 이라는 변수의 값과 Whois 검색기의 완전한 URL을 합치는 부분입니다.
이로써 검색하고자 하는 도메인 명을 Whois 검색기를 통해 조회할 수 있게 되겠지요?.

③ Set inet = Server.CreateObject("InetCtls.Inet")
inet.RequestTimeOut = 20
inet.Url = url
str = inet.OpenURL

이 부분은 Inet 컨트롤을 통해서 지정된 URL의 소스를 가져오게 하는 부분이랍니다.
이제 도메인이 검색된 내용은 str 이라는 변수에 HTML 소스로 담기게 됩니다.

④ iStart = instr(str, "# KOREAN")
iEnd = instr(str, "# ENGLISH")

Inet 컨트롤이 받아온 소스 중에서 "# KOREAN"라는 문자열과 "# ENGLISH" 라는 문자열이 자리하는 위치값을 얻어오게 합니다. 도메인 정보중에 한국말 정보는 "# KOREAN" 이라는 글자 이하로 나타나며, 영문 정보는 "# ENGLISH"라는 글자를 시작으로 등장하지요.

소스에서는 한국말 정보만을 나타나게 할 것이므로, 이 각각의 위치값이 필요할 것입니다. 그리고, 만일, 도메인이 등록되지 않은 것이라면 "# KOREAN", "# ENGLISH"라는 문자열은 존재하지 않겠죠? 그러므로, 그런 경우 각각의 변수의 값은 0 이 됩니다.

⑤ if iStart = 0 and iEnd = 0 then
    domainInfo = "사용 가능한 도메인입니다."
else
    domainInfo = Mid(str,iStart,iEnd-iStart)
end if

만일, iStart 라는 변수의 값과 iEnd 라는 변수의 값이 모두 0 이라면, 이것은 등록되지 않은 도메인입니다. 즉, 여러분이 사용할 수 있는 도메인인 것이지요. 그럴 경우는 "사용 가능한 도메인입니다."라는 메시지를 domainInfo를 통해서 출력하게 해줍니다. 그리고, 등록되어져 있는 도메인이라면 한국말 도메인 정보를 뽑아내서  domainInfo 란 통해서 출력하게 하는 부분입니다.

어때요?

이전에 태오의 기사나 사이트의 강좌를 보셨던 분들은 서버 컴포넌트인 웹 스파이를 만들어 사용할 경우에 비해서 몰라보게 소스가 간편해졌다는 것을 느낄 수 있을 것입니다. 서버 컴포넌트로 제작할 필요도 없고, 너무나도 간편하게 ASP에서 사용이 가능합니다. (이전 서버 컴포넌트로 만드는 방법이 궁금하실지도 모르겠지만 그 방법은 아실 필요가 없습니다. 지금 같이하는 방법이 보다 훨씬 뛰어나고 쉬운 방법이니까요..  ^^)

하지만, 대단히 주의할 점이 있는데요. 그것은 아무리 강조해도 지나치지 않은 것인데, 웹 상의 모든 정보에는 정보 제공처가 있으며, 그 정보를 가져다가 쓸 경우는 정보 제공처의 위치를 밝힐 것이며, 무료 공개정보가 아닌 경우는 반드시 그 정보 제공회사의 허락을 받아야 한다는 검다. 그렇지 않으면 저작권 문제에 휘말릴 수도 있어요.

현 사회에서 저작권의 문제는 대단히 민감한 편에 속한다는 것을 알고 계실 겁니다. 함부로 남의 정보를 자신인 것인양 사용하다가는 불미스러운 일을 당할 수도 있어요. 확실하게 그 출처를 밝히도록 하세요. (위와 같은 무료 공개 정보들을 사용할 경우도 예의상 감사의 메일을 보내는 것은 매너좋은 행동이랍니다.)

이것이(여기까지가) 제가 여러분과 함께 이야기 나누고 싶었던 첫 번째 예제의 이야기였습니다. 가벼운 수준의 이야기였지만 나름대로는 재미있는 예제가 아니었나 싶습니다만.. (어째 분위기가.. -.-)

Inet 컨트롤의 메소드에는 이번 예제에서 주로 사용한 OpenURL 메소드외에도 Execute 라는 메소드가 존재하고 있는데 이를 사용하면 GET, POST 방식에 의한 동적인 요청 결과물도 쉽게 얻어올 수 있게됩니다.

또한, Inet 컨트롤은 HTTP 뿐 아니라 FTP도 지원하기에 상당히 유용한 컨트롤이 아닐 수 없습니다. 여력이 있는 독자라면 이 컨트롤에 대해서 조금은 더 관심을 가져보는 것도 나쁘지 않을 것 같네요.  강좌중에 알려드린 MSDN의 Using Inet 컨트롤 강좌에서 말이지요..  ^^

'asp' 카테고리의 다른 글

계층형 게시판 로직  (0) 2007.05.02
ServerVariables 개체  (0) 2007.05.02
접속자 정보 기록  (0) 2007.05.02
접속자 정보 기록  (0) 2007.05.02
Global.asa와 사이트 카운터  (0) 2007.05.02

+ Recent posts