검색엔진 그 험난함,

회사에서 3분기부터 검색엔진에 대한 요구들이 있었고, 1인프로젝트로 검색엔진 개발을 진행했다.

좌충우돌 후기(?) 경험기(?)를 써볼까 한다.

목표는 SNS서비스로 운영되고 있는 커뮤니티게시판에 저장된 글을 검색하는 일(=게시판검색)

기존에는 일부트래픽이 많은 컨텐츠의 경우(=특정게시판의 경우) C++ 기반의 서버로 자체제작을 하여 MemoryDB 처럼 검색을 처리하고있었다.

솔루션을 도입하자니 비용이 문제이고, DB의 FullTextSearch를 쓰자니 한글검색 어쩌구저쩌구의 단서가 붙어 찝찝한 감들이 있고…

그런 분위기에서 시작된 파일럿프로젝트 이다.

구글데스크탑엔진

워낙 무지하다보니, 처음에는 좀 쉽게 접근할 수 있는 부분으로 접급했다.

“외국에는 게임이나 어플리케이션만들때 간단하게 구글데스크탑엔진을 활용하여 컴포넌트형태로 검색엔진 붙인다고 하는데 붙여볼까?”

구글데스크탑엔진(http://code.google.com/intl/ko-KR/apis/desktop/)의 레퍼런스를 찾아보고 이것저것 찾아보니 프록시서버를 개발하면 데스크탑의 결과를 웹으로 전송가능하겠다는 결론이 나왔다.

데스크탑엔진이 XML형태로 잘 가공을 해주어서 별무리없이 프록시서버를 개발하고 검색엔진을 붙였다.

내부에서 진행되는 인덱싱이라든지 검색결과도 괜찮은듯하여 2백만건 인덱싱해두고 성능테스트를 진행하였다.

TPS 50정도, 만족할만한 수준은 아니지만 병렬처리하면 가능할듯하여 데이터건수를 더 늘려 테스트를 진행하였다.

4천만건 이상 인덱싱된 상태에서는 TPS가 1,2….

간단한 어플리케이션에서 모듈형태로 붙여 API로 의도에 맞는 처리를 진행하는건 가능해보였지만,

다름 조금 무거운 어플리케이션에서 사용되기에는 데스크탑엔진이라는 컨셉자체가 맞지않았던 것이다.

Lucene 검색엔진

예전부터 관심있었고, 2년전에 사두고 너무 어려워 모셔둔 Lucene In Action 책이 눈에 들어왔다.

“직접 라이브러리로 짜는게 좋지않을까?”

라는 생각으로 여러가지 루씬성능에 대한 레퍼런스자료 한국적용사례 등을 조사하였고 책에서 나온 예제도 있어서 루씬으로 간단하게 인덱싱하고 검색하는거 금방이였다.

금방결과가 나오니 생각보다 쉬운느낌이였다.

금방할 수 있겠구나라는 오만한 착각으로 사로잡히게 된것이다.

난 빙산의 일각만보고 있었으니…..

검색엔진 루씬 Lucene… : 루씬 쓰지 마세요.http://lucene.egloos.com/1507127

루씬은 좋은 엔진이기는 하지만 쉬운엔진은 아닙니다. 루씬은 제대로 가이드할 컨설턴트도, 물어볼 엔지니어도 없는 오픈소스의 단점을 그대로 가지고 있는 엔진입니다. 루씬이 쉽다고요? 전혀 안쉽습니다. 쉽게 쓰려면 그냥 시중에 나와있는 엔진 쓰세요.

괜히 저렇게 얘기한게 아닌게다……

자, 이제부터 고난이 시작된다.

내가 해야할건 4-5천만건에 대한 인덱싱 TPS 200을 견딜 검색서버를 만드는 것.

인덱싱을 진행하는데만 3일이 걸리고 데이터사이즈가 몇백기가가 되니 코드몇줄(진짜 몇줄이다….) 테스트하는데 일,이주일이 후딱가버린다.

새벽에 일어나 인덱싱이 잘되는지 확인하고 잘안되면 왜 그런지 출근하자마자 계속찾고 또찾고…

지금 실행하는 형태가 내가 원하는 것인지 루씬 소스코드레벨에서 디버깅하며 혈투를 벌인다.

  • 자바기반의 루씬을 선택하여 Heap에 대한 제약사항, GC할때의 로드
  • Sort처리, 최신순|오래된순|히트순|마지막갱신일 등….
  • 추가된글,삭제된글,변경된글 의 경우 처리

위의 이슈는 루씬을 사용해서 생기는 이슈는 아니다.

검색엔진개발에 대한 무지에서 나타나는 것이다.

한국에서 레드오션으로 분류된 시장이고 기술난이도도 높다보니 자료는 손에꼽을 정도다.

외국사이트,루씬메일링리스트,루씬커미터의 블로그 등의 글로벌한 자료를 찾으며…..

어찌되었든 좌충우돌 이슈를 해결하였고 현재 서비스를 운영중에 있다.

루씬은 정말 잘만들어진 오픈소스 라이브러리이다. 하지만, 오픈소스이기에 그만큼 많은 이해가 필요하다.

일정기준이상으로 품질이 보증되려면, 시간과 노력이 분명이 수반되는 오픈소스이다.

검색엔진 그 험난함,”에 대한 2개의 생각

  1. 좋은글입니다.
    루씬과 C++ 검색엔진 개발에 대한 조사차 들리게되었습니다.

    전직장에서도 프로젝트 특성상 루씬을 붙여 사용했는데
    좀 더 살펴봐야할 부분인 듯 싶네요

  2. 좋은 글 잘읽었습니다!
    이제 막 웹페이지에 대해 배우기 시작했지만
    차차 지향하는 검색엔진을 만들어보고자 둘러보다가 보게되었는데, 유익한 글 감사합니다ㅎㅎ

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중