Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

유감스런 엠파스(Empas)의 검색엔진

(원래는 좀더 자극적인 제목을 썼다가 시간이 좀 지나고 그러다 보니 약간 노말(?)한 제목으로 바꾸었다. 낮에 포스팅 할라다가 바빠서.. ㅡ..ㅡ)

오늘 내가 자주가는 사이트중 하나인 SLRClub에 갔더니 엠파스 관련 글이 많이 올라와있었다. 먼가 했더니 자유게시판(다른 게시판도 되는지는 잘...)의 글이 엠파스에서 검색이 된다는 것이었다

사용자 삽입 이미지
실제로 가서 해보니 검색이 아주~ 잘 되었다.... 안그래도 사람많은데 너두나두 가서 검색하다보니 자유게시판에서 유명한 닉들이 하나하나씩 급상승 실시간 검색어에 오르는 헤프닝까지 발생했다. 자유게시판에 올린글이 다 올라오고 사진을 같이 올린 글은 썸네일까지 제공하고 있었다. ㅡ..ㅡ

대부분 아는 사항이겠지만 혹시 잘 모를 분들을 위해(나도 잘 모른다.) 검색에 대해서 조금 얘기를 하자면 검색사이트를 제공하는 곳에서는 크롤러라는 게 있다. 검색봇이라고도 한다.(물론 물리적으로 존재하는 건 아니다. ㅡ..ㅡ) 하여튼간 이 크롤러가 웹페이지를 미친듯이 돌아다니면서 웹페이지의 정보를 가져오고 그걸 분석해서 제공하는게 우리가 쓰는 검색엔진이다. 그래서 이 크롤러의 성능에 따라도 많이 달라지고(요즘은 다들 잘 긁어오는듯...) 구글처럼 가져온 데이터를 어떻게 분석하느냐에 따라 검색의 결과가 많이 달라지게 된다.

나두 크롤러의 내부구조같은건 잘 모르지만 일단 이녀석은 우리가 들어갈 수 있는 대부분의 웹사이트에는 다 들어갈 수 있다. 하지만 당연히 웹페이지란건 다 html소스이므로 이걸 분석해서 긁어오는 것이다. 실제 기술 구현을 해본건 아니지만 html과 웹이란 특성을 생각했을때 긁어오는 것 자체는 막을 방법이 없다. 그냥 와서 긁으면 되니까...

하지만 웹이란건 오픈이 일반적이지만 모두 그런건 아니다. 여자친구랑 비밀얘기를 하고 싶을 수도 있고 개인 일기장으로 사용할 수도 있다. 개인 공간이라고 생각하고 비밀스런 내용을 적었는데 네이버에서 검색한방에 나와버린다면 참으로 난감한 일이 아닐 수 없다. 그러면 누가 웹을 맘놓고 쓰겠는가.....

그래서 robots.txt라는 게 있다. 파일명을 보듯이 알겠지만 그냥 텍스트 파일이다. 이게 표준안이고 사이트도 있다.
아까 말한 크롤러가 사이트를 긁어갈라고 웹사이트에 오면 일단 루트경로에 robots.txt파일을 까본다. 그러면 표준안에 맞게 내용을 어디는 긁어가도 되고 어디는 긁어가면 안되는 지가 써있다. 그걸 보고 허용된 만큼 수집을 해가는 것이다.

물론 표준안이기 때문에 법적 구속력은 없기 때문에 크롤러가 이 표준안을 따르지 않고 수집하려면 할 수 있다는 얘긴데 이게 이제 막 제정된 표준도 아니고 개인적으로 만든 검색엔진도 아니고 상업적으로 운영되는 크롤러라면 당연히 준수해 주어야 할 상도같은 거다. 그리고 이걸 지키지 않으면 비난을 면치 못할 꺼라고 생각했다.

근데 그런 일이 벌어졌다. 그것도 어디 듣도 보도 못한 곳도 아니고 한국 검색사이트하면 5-6번만에 이름 나올만한 엠파스에서.....

사용자 삽입 이미지

자유게시판에 이에대해 많이 올라오는 글을 보고는 SLR클럽의 robots.txt를 보았다. SLR클럽 이하 모든 내용을 어떤 검색엔진도 크롤링을 허용하지 않겠다는 의미이다. 표준안을 지키는 크롤러라면 루트에 와서 저거 열어보고는 그냥 다시 다른 사이트로 가면 된다.

사용자 삽입 이미지

엠파스에 가서 좀 이름 유명한 닉으로 검색하면 열린게시판이란 부분에서 마구 쏟아지고 친절하게 썸네일까지 제공해주고 있다. 물론 누르면 SLRClub으로 간다. 자유게시판 같은 부분은 로그인을 안해도 볼 수가 있는 곳이기 때문에 뭐가 문제냐고 생각할지도 모르지만 이건 솔직히 개념을 상실한 거라고까지 생각이 된다. 더군다나 얘기를 듣자하니 이문제로 여러번 항의를 했는데도 고쳐지지가 않는다고 한다.

명시적으로 수집을 거부했는데 그것도 지키지 않다니.... SLR클럽같이 좀 크고 공통단어로 나오는 결과가 많기 때문에 확인이 가능했지만 공개하기를 거부한 어떤 내용을 엠파스가 검색결과로 보여주고 있는지는 모를일이다.

일단 현재로선 많은 항의가 들어와서인지 (일시적인지 몰라도) SLR클럽의 글들은 오후늦게부터는 검색결과에 나타나지 않고 있다. 물론 그에대해 특별히 엠파스의 입장 표명은 없었던듯 하다.(있
2007/12/06 23:35 2007/12/06 23:35

prototype.js로 스크립트 제거하기

prototype.js의 대단함에 또한번 놀랐다. 프레임워크를 쓴다는 것은 프레임워크에서 제공하는 편리함을 이용하고자 함인데 실제로는 별로 못쓰고 있다. 몇천줄짜리 js파일을 불러오고는 기껏 쓰는데 $와 $F가 전부이다. js프레임워크에 관심이 많아서 사용성을 늘리고 싶지만 생각처럼 쉽게 안되더군...

그래서 하나씩 쓸때마다 정리를 하려고 한다. 한번 쓴것은 다시 쓸 가능성이 높다? 정도? ㅋㅋㅋㅋ

스크립트를 날려버릴 필요가 있었다. 정확히는 게시판에 에디터를 달았는데 보통 에디터에서 그렇듯이 HTML모드와 편집모드가 있는데 스크립트를 처리하는 부분이 없어서 HTML모드에서 스크립트를 작성하면 그게 그대로 먹어버린다.

얼마전에 내 홈페이지에서도 제로보드가 처리 안되어 있어서 당했었는데... 단순히는 alert로 당난칠수도 있지만 좀 악의적으로 쓰려면 게시판의 HTML모드에서


<script type="text/javascript">
    window.onload = function() {
        document.location.href="http://www.naver.com";
    }
</script>

이런 소스를 넣어버리면 글을 읽으려고 제목을 누르는 순간 네이버로 바로 가버린다. ㅡ..ㅡ 이렇게 되어버리면 리스트에서 관리자가 글 삭제기능이 있지 않는한은 DB를 직접 만져줘야 한다.

그래서 이런 저런 고민중 script를 전체적으로 날려버리기로 했다. <script></script>가운데는 뭐가 올지 모르기 때문에 정규식으로 이부분을 다 날려버려야 했고 좋은 의도로 스크립트를 쓸일은 없으니 그냥 날리기만 하면 됐다. 난 정규식을 잘 못쓰기 때문에 의례 그렇듯이 검색에 들어갔고 곧 네박사에서 민이님의 블로그에서 내가 필요한 걸 얻었다.


// script부분 정규식으로 없애기
function removeScript()
{
    var re = /\r\n/g
    var strBox1 = document.all.box1.value;
    strBox1 = strBox1.replace(re, "@!-_-!@");
    re = /<\s*script.+?<\/\s*script\s*>/gi
    strBox1 = strBox1.replace(re, "");
    re = /@!-_-!@/g
    strBox1 = strBox1.replace(re, "\r\n");
    re = /^\r\n/g
    document.all.box2.value = strBox1.replace(re, "");
}

내가 짠 소스는 아니지만 소스를 좀 비교하기 위해서 발췌했다.(ㅡ..ㅡ) 딱 봐도 복잡하지만 찬찬히 보면 아주 어렵지는 않다. 줄바꾸기를 이모티콘(??)으로 교체한뒤에 스크립트 부분을 다 날려버리고 다시 이모티콘을 줄바꿈으로 교체해 준 다음에 다시 원래 값에 할당해 준 것이다.

잘 돌아가고 만족하고 있던 가운에 추가로 검색을 하던 가운데 구글링에서 중간에 prototype.js가 나와있는 글의 일부가 보였고 이 역할을 해주는 메서드가 들어있는 걸 알았다 ㅡ..ㅡ

이미 prototype.js를 사용하는 상황에서 이걸 사용안할 이유는 없었다.


$("box2").value = $F("box2").stripScripts();

이렇게 간단히 바뀌었다. ㅡ..ㅡ(이거 돌아가겠지? $F가 신경쓰이네.. ㅡ..ㅡ 실소스에선 에디터라 변수를 사용한 관계로 그냥 보고 적었는데.. ㅎㅎㅎ 어쨌든...) 12줄의 코드가 단 1줄로 바뀌었다. 진짜 prototype.js만 잘 써도... ㅡ..ㅡ
 
참고로 HTML태그를 벗겨내고 내용만 가져오는 stripTags()도 있다.
2007/12/04 01:16 2007/12/04 01:16