티스토리 뷰
오픈소스 프레임워크를 활용한 검색엔진 구현
이태원
Hyun-Ok Song, A-Yong Kim, Hoe-kyung Jung
Department of Computer Engineering, Paichai University, Daejeon 302-735, Korea
Abstract
인터넷이 대중화 된 이후 검색엔진은 야후, 네이버, 구글과 같은 대형 IT업체들의 주도적인 활약을 통해 발전되어 왔고, 웹사이트와 사용자를 연결해주는 주요 수단으로서 역할을 하여왔다. 이제는 오픈소스 검색엔진 Lucene의 등장으로 검색엔진에 대한 개발자들의 접근성이 용이해지고 이를 활용한 소프트웨어 개발이 활발하게 이루어지고 있다. 본 논문에서는 네임노드, 보조 네임노드, 데이터 노드 등으로 분산된 환경 위에 Hadoop, Nutch, Solr, Zookeeper 등의 오픈소스 프레임워크를 활용하여 가용성 높은 검색 시스템을 구현하였다.
Why
IT 기술의 발전과 스마트기기의 대중화로 생산되는 데이터의 크기가 점점 증가하고 있는 상황에서 여러 조직마다 데이터 활용에 대한 요구가 커지고 있다. 이러한 상황에서 Lucene의 등장은 소규모 개발자 그룹 및 1인 개발자로 하여금 검색엔진을 응용하여 소프트웨어를 개발할 수 있는 환경을 마련하였다. 특히 고가의 서버가 아닌 저가형 서버나 PC를 여러 대 연결한 분산 환경을 지원하는 점은 많은 비용을 지불하지 않아도 검색 시스템을 구축할 수 있게 해주었다.
What
- Hadoop
Nutch의 분산처리를 지원하기 위해 개발된 Apache Lucene의 하부 프로젝트이다. 하둡 분산 파일 시스템 (HDFS: Hadoop Distributed File System)과 맵리듀스를 구현한 것이다. 분산파일 시스템인 HDFS에 데이터를 저장하고, 맵리듀스를 이용해 데이터를 처리한다. - Nutch
Lucene을 기반으로 만든 오픈소스 검색엔진이다. 본 논문에서는 데이터를 크롤링하기 위한 용도로 사용한다. - Solr
Lucene을 기반으로 만든 오픈소스 검색엔진이다. 본 논문에서는 데이터를 인덱싱하기 위한 용도로 사용한다. - Zookeeper
분산 시스템을 위한 코디네이션 서비스 시스템이다. 시스템 간의 정보 공유, 클러스터에 있는 서버의 상태 체크, 분산된 서버들 간의 동기화 등의 문제를 처리한다.
How
- 검색 시스템 설계
- 네임노드
HDFS의 메타데이터를 관리하고, 클라이언트가 HDFS에 저장된 파일에 접근할 수 있게 해준다. 데이터를 저장할 때 블록으로 나누어진 데이터를 여러 데이터노드에 분산하여 저장한다. - 보조네임노드
- 데이터노드
주기적으로 네임노드에게 핫빗(Hearbeat)과 블록의 목록 리포트를 보낸다. 네임노드는 핫빗을 통해 데이터노드가 정상적으로 작동하는지 확인한다. 데이터노드의 리포트를 바탕으로 파일 복제본의 위치를 결정한다. - 검색 시스템 구현
- JDK, Tomcat 설치
- SSH를 설정하여 노드 간에 비밀번호 없이 접속 가능한 환경을 조성
- Zookeeper 설치 후 zoo.cfg에 환경변수 설정
- Nutch 설치 후 nutch-site.xml에 환경변수 설정
- Solr 설치 후 Tomcat 연동
- 단일노드 및 분산노드에서 Nutch를 실행
- Nutch의 크롤링 결과를 Solr로 인덱싱
- 검색어 쿼리
Critic
그러나 이것을 실무에 그대로 적용했을 경우 한글검색의 품질이 낮아 원하는 검색결과를 얻기 어려울 수 있다. 그리고 뉴스나 사회적 이슈를 다루는 오피니언 리더들의 글과 같이 비교적 최근에 생성된 문서들은 검색결과의 상단에 위치시키는 것이 바람직하다. 이에 대한 처리 방안을 추가하면 좀 더 최신 동향이 잘반영된 검색결과를 얻을 수 있을 것이다.