나는 개발자이기는 하지만 검색관련은 아니었다.
검색에 대해서 할수 있는 것이라고는
그냥 눈으로 찾던지, DB 필드들의 like 검색을 하는것,
일에 관한것은 구글을 이용, 가십거리는 네이버를 이용하고
내 컴퓨터에서 찾을때는 구글 데스크탑을 이용하는 정도..
두어달전부터 회사 서비스에 적용할수 있는 검색서비스에 관한 일을 하고 있다.
나처럼 이런 문외한도, 검색서비스를 1~2명이서 개발할수 있도록 도와주는 것이
저 lucene(루씬), solr(솔라) 라는 놈들의 덕분이다.
lucene(루씬)은 자카르타 프로젝트의 탑 시드를 받고 있는 오픈소스이다.
solr(솔라)는 루씬을 기본으로 한번 더 포장한 오픈소스이다.
요즘같이 엄청나게 폭발스러운 데이터에서 필요한 정보를 찾기 위한 검색은
포탈싸이트 같은곳에서는 필수품이 되었고 네이버에서 검색으로 얼마나 많은
돈을 버는지는 말을 하지 않아도 쉽게 알수가 있다.
네이버나 구글에서의 검색프로세스를 살펴보면(그냥 ^^ 간략히)
1. 데이터를 수집한다 (50%)
2. 데이터를 색인(인덱싱) 한다 (40%)
3. 데이터를 검색한다 (10%)
정도이다.
루씬은 검색과 색인의 API를 제공해주는 core 엔진이다.
아주 괜찮은 구조로 되어 있어서 현재 1억건 정도를 색인하고 검색을 하는데
느리다는 느낌을 받지 않는다.
하지만 루씬을 쓴다고 개발자의 할일이 없는 것은 아니다.
루씬은 엔진일뿐 http 나 socket이나 file에서 데이터를 읽어서 색인하라!! 라고 전달해주는 부분과
http나 socket으로 요청을 받아서 검색후 결과를 전달해주는 부분은 만들어야 한다.
여기서!!! 솔라가 또 한몫을 해준다
솔라는 색인과 검색을 루씬엔진을 쓰면서 http 프로토콜을 이용해서
색인 요청을 받고, 검색요청을 받고 결과를 주는 ,
어떤 정보를 어떤 방식으로 색인하고, 어떤 필드들을 저장하고 있는지에 대한 관리툴까지!!!
모두 제공해주는 역할을 해준다.
이런 멋진 엔진과 툴 덕분에 나 같은 놈도 ^^ 검색이라는 서비스까지 만들수 있는 것이다.
이 시점에서 박수!!!! 짝짝짝짝짝짝
루씬과 솔라를 이용하더라도 어쩔수 없는 부분이 있다.
그것은 역시!!! 2바이트 문자인 한글이다. 단순 2바이트 이외에도 한글의 특성상
색인부분을 뽑아내는것이 그리 녹녹하진 않다.
예를 들어보자
"우리 아버지는 대한민국을 사랑하십니다"
영어에서 색인단어를 추출하는 analyzer중 기본인 WhitespaceAnalyzer(빈공간으로 나누기)
로 자르면 [우리] [아버지는] [대한민국을] [사랑하십니다] 로 나온다.
우리빼고는 검색이 안된다.
stopword라는 불용어(색인 대상에서 제외시키는것)에 조사와 십니다, 습니다
와 같은 단어를 모두 포함시키면
[우리][아버지][대한민국][사랑하] 까지는 나오지만
사랑, 대한 같은 키워드로 검색이 안된다.
이런 단어들을 좀더 세분화해서
[우리][아버지][아빠][아부지][대한][대한민][대한민국][한국][사랑][러브] 까지 등록해서
검색할수 있도록 analyzer를 만드는 것은 우리나라 개발자들의 몫이다.
영어를 기본으로 하는 나라에서 만들어진 오픈소스의 한계라고나 할까..
그래도 analyzer를 따로 만들어서 색인시 이용할수 있다는 것이 어디야~
색인의 디테일한 정도와 색인시간은 반비례가 될수밖에 없다.
한국어 사전에 등록되어 있는 단어들로만 등록 가능하게도 할수 있다.
하지만 1억건에 데이터에 대해서 1개의 데이터별로 5~6번씩 사전을 검색해서 가능여부를 판별하는건
그만큼의 시간이 걸린다는 것을 나타낼수밖에 없다.
정확도, 색인시간, 색인용량, 검색시간... 등등
해당 서비스별로 맞춰서 하는것이 정답이다.
그래도 ^^ 루씬과 솔라를 쓰면 요고(에게~ 요고 ^^)만
고민하면 되니깐 이게 어디겠냐 ^^