한국어판(초판) 출간에 부쳐
저는 지금 『루씬 인 액션』 초판이 출간된 지 9개월 만에 한국어판의 서문을 쓰고 있습니다. 그동안 루씬과 너치에 대해 많이 배우고 경험했습니다. 저는 지금도 버지니아 대학의 ARP(Applied Research in Patacriticism) 팀에서 일하고 있습니다. 그동안 배우고 이 책에서 설명하기도 했던 루씬의 다양한 기능을 사용해 로제티 아카이브(Rossetti Archive)에서 강력한 전문 검색, 결과 하이라이팅, ‘비슷한 작품 보기’와 같은 기능을 구현할 수 있었습니다. 단테 가브리엘 로제티가 쓴 작품 중에서 1860년에서 1870년 사이에 쓰였고 ‘love’와 인접한 ‘wife’ 단어를 포함하는 모든 시를 찾고 싶다면 어떻게 하시겠습니까? 루씬이라면 쉽게 답을 찾을 수 있습니다!
현재 저는 ‘구글’, ‘플리커’, ‘del.icio.us’의 19세기 문학 버전에 해당하며 HTML, URL, JPEG 파일보다 훨씬 다양한 메타 정보를 관리할 수 있는 사이트 구축 프로젝트에 참여하고 있습니다. 너치는 연합된 NINES(19세기 전자 장학재단을 위한 네트워크 인터페이스) 사이트에서 숨겨진 RDF 데이터를 포함한 다양한 정보를 수집할 때 중요한 역할을 담당합니다. 사용자 정의 형태로 작성된 루씬의 색인 코드는 브라우징과 전문 검색 수행이 용이하게 수집된 데이터를 처리합니다. 학자들은 독립적인 형태의 기록 저장소에 걸쳐 존재하는 내용을 조회하고, 자신만의 수집 목록에 추가하고, 개체와 다른 학자 사이의 상관관계를 탐색할 수 있을 것입니다. 수집된 개체를 이용해 목록을 만들고, 출판할 수 있고, 그 결과로 자신만의 개체를 최상위 정보로 시스템에 피드백할 수 있습니다. 이 책을 쓰는 동안 이와 같은 구조를 증명하기 위해 시스템을 설계하고 프로토타입을 만들었습니다. 곧 이 시스템을 NINES에 설치할 예정입니다. 관심을 갖고 http://www.nines.org를 지켜봐 주세요!
ARP 외에도 다양한 SpanQuery군을 제공하는 사용자 정의 질의 파서 개발에 대해 컨설팅도 하고, 이런 과정에서 좀 더 발전된 코드는 루씬에 다시 반영하기도 했습니다. 이 기회에 오픈소스로서 루씬이 갖는 장점을 강조하고 싶고, 더불어 루씬을 처음 공개한 더그 커팅에게 다시 한 번 감사드립니다. 루씬은 헌신적인 수많은 개발자들의 노력으로 발전되어 왔습니다. 루씬 관련 커뮤니티(특히 자바 유저 메일링 리스트)에서는 엄청난 도움을 받을 수 있고, 활발하게 교류하고 있습니다. 여러분도 저희와 함께 하시기를 바랍니다.
2005년 9월 15일
텍사스주 댈러스의 자바 사용자 그룹에서
루씬에 대해 발표하고 돌아오는 비행기 안에서
에릭 해쳐
루씬이 어느덧 8살이 되었군요. 곧 다가올 영문판 『루씬 인 액션』의 첫 번째 생일을 즈음해 저희 책이 한글판으로 새롭게 탄생하는 경사스러운 일에 함께 하게 되어 더없이 기쁩니다.
『루씬 인 액션』이 출간된 이후에도 루씬 프로젝트는 끊임없이 발전해오고 있습니다. 개별 프로젝트였던 너치는 이제 루씬의 하위 프로젝트가 됐고, 왕성하게 활동하는 개발자들 덕분에 튼튼한 그룹으로 만들어졌습니다. http://lucene.apache.org/에서 보듯이 루씬도 아파치 소프트웨어 재단ASF의 최상위 프로젝트로 성장했습니다. 또 9장에서 다룬 루씬의 일부 포팅 버전도 하위 프로젝트로 ASF에 추가됐습니다. 루씬의 이슈 트래킹 시스템인 지라(JIRA)는 점점 더 커지고 있습니다. 물론 버그가 아닌 수많은 개발자의 헌신과 확장을 통해서 말입니다.
『루씬 인 액션』은 2005년 8월 슬래시닷에서 리뷰점수 10점 만점에 9점을 받았습니다. 이 책의 공식 사이트인 http://lucenebook.com/은 슬래시닷 사이트를 통해 접속해오는 사용자 때문에 부하를 좀 겪었지만, 역시 죽지 않고 살아남았습니다. 몇 년 동안 저는 여러 개의 루씬 프로젝트에 참여해왔는데, 그 중에서도 심피 프로젝트는 가장 인상 깊었습니다. 심피는 수천 명의 사용자에게 제공되고 있고, 루씬을 중심으로 소셜 북마크 서비스에 태그 처리, 전문 검색 등 수많은 기능을 제공하고 있습니다. 또 심피 이외에도 루씬에 대한 컨설팅을 시작했고, 나날이 늘어나는 루씬의 인기를 지켜보면서 눈에 띄는 일부 프로젝트에 서비스를 제공했습니다.
마지막으로 한국 독자들이 『루씬 인 액션』을 더 많이 읽을 수 있게 이 책을 번역해주신 역자들에게 감사드립니다.
2005년 9월 15일
미국 뉴욕주 브루클린에서
오티스
저자 서문
루씬을 처음 사용하기 시작한 건 『루씬 인 액션』 초판이 출간된 지 1년 정도 지나서였습니다. 루씬을 사용하기 전에도 검색 엔진을 사용해본 경험이 있지만, 루씬 자체에 대해서는 별로 알지 못하는 상태였죠. 그래서 에릭과 오티스가 저술했던 『루씬 인 액션』을 손에 들고 읽기 시작했는데, 이후에는 완전히 루씬에 사로잡히고 말았습니다.
처음 루씬을 사용할 때 여기저기에 자잘하게 개선할 부분이 보여 조금씩 코드를 고치기도 하고, 문서를 작성하기도 하고, 루씬 메일링 리스트에서 특정 주제를 놓고 토의도 하기 시작했습니다. 결과적으로는 이후에 아파치 프로젝트의 커미터가 되어 수년간 다양한 코드를 커밋했고, PMC(Project Management Committee), 프로젝트 관리 위원회에도 참여하고 있습니다.
『루씬 인 액션』 초판이 출간된 지 벌써 4년 반이 흘렀는데, 엄청나게 빠르게 변화하는 오픈소스 세계에서 4년 반이면 엄청나게 오랜 시간이라고 볼 수 있죠. 그동안 루씬은 두 번의 메이저 업그레이드를 거쳤고, 지금은 수많은 새로운 기능을 갖고 있습니다. 예를 들어 숫자 필드도 있고, 재사용하기 좋은 분석기 API도 있고, 적재 기능도 있고, 준실시간 검색 기능도 있고, 색인과 검색에 대한 트랜잭션도 지원합니다.
매닝 출판사와 연락하기 시작했을 때는 『루씬 인 액션』의 개정판이 필요한 시점이었습니다. 또한 활발하게 활동하는 커미터의 한 명으로서 수많은 코드를 커밋하고 추가된 기능에 대한 설명을 해야 할 필요가 있겠다는 약간의 책임감도 느끼고 있었죠. 그래서 『루씬 인 액션』 개정판 작업에 참여하기로 하고, 루씬에 새로 추가된 내용에 대해 설명하는 원고를 정말 열심히 작성했으며, 그 결과에도 상당히 만족하고 있습니다. 검색 애플리케이션을 개발하고 있다면 『(개정판) 루씬 인 액션』이 큰 도움이 되리라 믿으며, 사용자 또는 개발자 메일링 리스트에서 재미있는 질문에 대해 함께 토론하고, 루씬이 계속해서 발전할 수 있도록 도와주길 바랍니다.
- 마이클 맥캔들리스
인터넷이 처음 시작될 무렵부터 검색이나 색인과 같은 작업을 이래저래 시작했습니다. 1991년쯤에는 majordomo, MUSH(Mail User's Shell)에 펄과 awk를 셸 스크립트로 묶어 메일링 리스트를 관리하는 프로그램을 만들기도 했죠. 그 때는 grep을 이용해 메일링 리스트에 저장된 메일과 사용자 정보를 검색할 수 있는 프로그램을 CGI로 구현해 웹으로 사용할 수 있게 만들었습니다. 그러고 나서 야후!를 비롯해 알타비스타나 익사이트와 같은 검색 사이트가 나타났고요.
첫 아이인 제이콥이 태어난 이후로 디지털 카메라로 찍은 사진들이 엄청나게 늘어나기 시작했습니다. 사진이 많아지니 관리하기도 어려워서 ‘간단한 사진 관리 프로그램’을 만들어보려 했습니다. 사진마다 날짜나 주제어, 찍은 장소 등을 미리 입력해두고 원하는 정보를 기준으로 쉽게 찾아볼 수 있는 것이었죠. 90년대 말에는 마이크로소프트의 제품군을 기반으로 만들어보려 했습니다. 이를테면 인덱스 서버, ASP, 영상 처리를 위한 COM 객체 등을 사용하는 거죠. 그 당시에는 이런 제품들로 작업하는 직업을 갖기도 했고, 이들을 잘 조합해 며칠 작업하면 프로그램 하나를 뚝딱 만들 수가 있었습니다.
시간이 흐르다 보니 직업적으로 마이크로소프트의 제품을 사용하는 일은 줄어들고, 점점 자바 언어를 사용하는 경우가 많아졌습니다. 예전에 만들었던 사진 관리 프로그램을 자바, 특히 플랫폼 독립적으로 만들려다 보니 루씬을 사용하게 됐습니다. 루씬은 기대했던 것보다 훨씬 사용하기 쉽더군요. 여러 오픈소스 프로젝트의 라이브러리를 많이 사용해봤지만 루씬처럼 간단한 것은 별로 없었습니다.
2001년에는 스티브 로런(Steve Loughran)과 『Java Development with Ant』라는 책을 써서 매닝 출판사에서 출간했습니다. 예전의 사진 관리 프로그램을 ‘문서 관리 프로그램’으로 좀 더 확장해 이 책에 예제로 넣었는데, 조금만 확장하면 이미지 검색 엔진으로도 사용할 수 있는 수준이었죠. 앤트(Ant)와 루씬이 연결되는 건 단순히 컴파일하고 패키징하는 앤트의 기능 외에도 〈index〉라는 앤트 태그 때문이었습니다. 〈index〉 태그를 이용해 프로그램을 빌드하는 도중에 색인을 구축할 수 있었죠. 이때 만들었던 태그는 아직도 사용되며 현재 루씬 샌드박스에서 찾아볼 수 있고, 『루씬 인 액션 1판』 의 8.4절에서도 볼 수 있습니다.
이렇게 만들었던 〈index〉 태그는 제 개인 블로그인 블로그씬(BlogScene)(http://www. blogscene.org/erik/)에서도 사용하고 있습니다. 블로그씬에서 글을 쓰면 자동으로 앤트 작업이 돌아가게 했고, 〈index〉 태그를 통해 제가 쓴 글을 색인에 추가하고 서버에 저장합니다. 블로그씬 서버는 서블릿(servlet), 벨로시티 템플릿, 루씬을 사용해 다양한 검색 쿼리를 사용할 수 있고, 통합 연동까지 가능하죠. 다른 많은 블로깅 제품만큼 장점이 많지는 않지만 루씬을 사용한 검색만큼은 최고임이 분명합니다.
요즘은 버지니아 주립대학에서 ARP(Applied Research in Patacriticism) 프로젝트에 참여하고 있습니다. 저는 물론 텍스트 분석과 색인, 검색과 관련한 경험을 살리고 양자 물리학이 문학에 어떤 영향을 미쳤는지에 대해 토론하며 안목을 넓히고자 합니다.
“문학은 이 세상에 알려지지 않은 공학도이다.”
- 에릭 해쳐
제가 미들베리 대학(Middlebury College)에 다닐 때부터 정보 검색과 관리에 흥미와 관심을 갖기 시작했습니다. 그때쯤 인터넷과 웹이 엄청난 정보의 바다라는 걸 깨달았고, 아직 초창기였지만 장기적으로는 웹에서 찾아볼 수 있는 자료를 모아서 분석, 관리하고 검색할 수 있으면 좋겠다고 생각하고 있었습니다. 곧 웹에서 정보를 수집하는 프로그램을 만들어 수집한 정보를 쌓아두다 보니, 그 많은 자료 가운데 필요한 정보를 검색할 필요가 생겼습니다. 특히 검색 기능이야말로 아직 알려지지 않았지만 훗날 인터넷 세상에서 꼭 필요한 기능이 되리라 짐작하고 있었죠. 이런 생각에 모든 작업에 항상 필요한 수집과 검색 두 가지 기능에 대한 프로젝트를 시작했습니다.
1995년경 학교 동기인 마샬 레빈(Marshall Levin)과 개인 주소록 정보를 모아두고 찾아볼 수 있는 WebPh라는 오픈소스 프로젝트를 만들었습니다. 말이야 거창하지만 간단한 개인 주소록을 웹 CGI로 구현한 것뿐이었는데, 그 당시를 생각해보면 요즘 PIMS개인 정보 관리 시스템라고 말하는 프로그램의 초창기였다고 생각됩니다(심지어는 90년대 후반 어느 법정에서 선구적인 작품으로 언급되기도 했습니다). 대학이나 정부 기관에서 WebPh를 많이 사용했고, 아직까지도 사용하고 있는 걸로 알고 있습니다. 1997년에는 WebPh를 만들었던 경험을 살려 파퓰러스(Populus)라는 나름대로 인기 있었던 일종의 전화번호부 서비스를 시작했습니다. 기술 자체는 WebPh와 별반 다를 게 없었지만, 파퓰러스는 그 당시 유명하던 WhoWhere, BigFoot, Infospace 같은 서비스에 뒤처지지 않는 서비스였다고 생각됩니다.
위의 두 가지 프로젝트에서 개인 정보 관리를 목표로 했었으니, 새로운 사업 영역을 찾아볼 차례였죠. 그래서 인포점프(Infojump)라는 벤처를 시작했는데, 수많은 온라인 신문이나 뉴스레터, 저널, 잡지 등의 내용을 수집하고 제공하려는 시도였습니다. 인포점프는 직접 만들었던 수많은 펄 스크립트와 웨비네이터(Webinator)라는 웹사이트 수집 프로그램과 텍시스(Texis)라는 텍스트 검색 엔진을 사용했습니다. 인포점프는 요즘 서비스하고 있는 FindArticle.com이라는 사이트와 비슷하죠.
WebPh와 파퓰러스, 인포점프가 기술적으로 목표한 바를 충분히 달성하긴 했지만, 모두 기술적 한계를 갖고 있었죠. 역파일 색인 같은 훌륭한 구조를 가진 성능 좋은 텍스트 검색 라이브러리를 알고 있었다면 훨씬 나은 서비스를 제공할 수 있었으리라 생각합니다. 그런 라이브러리를 만들기보다는 오픈소스에서 찾아보려 했는데, 2000년쯤 찾아낸 게 바로 루씬이었습니다. 뭔가 빠진 것 같던 바로 그 부분을 채워주는 오픈소스 프로젝트였죠!
그래서 루씬이 소스포지에서 개발될 당시부터 프로젝트에 참여했고, 루씬은 점점 제가 작업하는 프로젝트의 핵심 부분을 차지하기 시작했습니다. 그 중의 하나는 취미로 만들기 시작한 심피(Simpy)(http://www.simpy.com/)인데, 사용자들이 웹에서 찾아낸 정보들을 올려두고 서로 공유하며 검색해볼 수 있는 서비스죠. 심피는 루씬이 없으면 만들 수 없었다고 생각될 만큼 루씬을 기반으로 하고, 더그 커팅의 또 다른 프로젝트인 너치(『루씬 인 액션 1판』의 10장 참조)를 통해 수천 개의 색인을 관리하고 있습니다. 루씬 커뮤니티에서 활발하게 활동하다 보니 매닝 출판사에서 에릭 해쳐와 함께 루씬 책을 써보지 않겠냐는 제의가 있었던 거구요.
『루씬 인 액션』은 최강의 오픈소스 검색 엔진 루씬 관련 기술과 정보를 하나로 모은 최고의 책이라고 자부합니다. 루씬의 기초부터 고급 기술까지 여러 장에 걸쳐 살펴보는데, 루씬을 이용해 검색 기능을 구현하려 할 때 꼭 필요한 정보와 지식을 싣고 있습니다. 이 책을 쓰는 동안 루씬 커뮤니티에서 활동하던 것과 비슷하게 에릭을 비롯한 다른 커뮤니티 구성원과 어울려 손쉽게 작업할 수 있었습니다. 루씬과 『루씬 인 액션』을 함께 작업하다 보니, 직접 얼굴을 맞대지 않더라도 공통의 관심사만 있다면 각자의 지식과 경험을 한군데에 모아 뭔가를 만들어내는 게 충분히 가능하다는 걸 새삼 느끼게 됐습니다.
- 오티스 고스포드네티치
옮긴이의 말
2005년에 『루씬 인 액션』 초판을 출간한 이후 루씬은 눈부시게 발전해왔습니다. 루씬 2.x 버전으로도 정말 다양한 검색 애플리케이션을 충분히 만들 수 있었지만, 버전 3.x와 4.x를 거치면서 정말 많은 기능을 추가하며 성능도 개선됐고, 이런 발전 과정과 함께 계속해서 내부적인 구조를 바로잡아 가는 리팩토링을 거치고 있기도 합니다.
국내에서도 최근 루씬 사용자 층이 넓어지면서 소스코드가 공개되거나 공개되지 않은 한글 형태소 분석기가 나타나고 있습니다. 예를 들어 ‘한글 형태소 분석기’라고 검색해보면 테스트 용도나 상업적인 용도로 사용할 수 있는 루씬 분석기 형태의 클래스를 받아와 적용할 수 있습니다.
또한 한글을 담고 있는 아래아 한글(.hwp), 마이크로소프트 오피스(.doc, .ppt, .xls) 등의 문서도 몇 년 전보다 훨씬 처리하기가 쉬워졌습니다. 특히 『(개정판) 루씬 인 액션』에서 소개하는 아파치 티카(Apache Tika) 프로젝트를 사용하면 마이크로소프트 오피스 문서를 포함해 다양한 문서를 한 번에 손쉽게 처리할 수 있고, 필요한 경우 아래아 한글 역시 SDK를 제공하고 있으니 라이선스를 얻어 사용할 수 있습니다.
요즘에는 루씬을 직접 호출하는 대신 아파치 솔라(Apache Solr)나 일래스틱서치(Elastic Search) 등 루씬 기반 검색 서버를 사용하는 경우도 많습니다. 둘 다 오픈소스 프로젝트이며, HTTP REST 스타일의 API를 제공해 사용하기 편리하고, 검색할 대상 문서의 양이 많아지더라도 분산 검색 기능 등을 통해 손쉽게 확장할 수 있기 때문이죠. 그렇더라도 솔라와 일래스틱서치 등에서 핵심 역할을 맡고 있는 루씬에 대해 충분히 이해하고 있어야 최적의 결과를 얻을 수 있습니다. 특히 검색 결과가 올바르게 나오지 않거나 속도에 문제가 있는 경우 루씬의 내부 구조와 동작하는 방법을 알아야 적절히 대응할 수 있습니다.
한국어판이 출간되는 2013년 8월 현재 루씬의 최신 버전은 4.4이며, 2.x 버전과는 물론 3.x 버전과 비교해도 API가 엄청나게 많이 바뀌었습니다. 이 책의 예제는 3.0.1 버전을 기준으로 작성했으며, 루씬 웹사이트에서 3.x 버전을 내려받아 사용하면 모든 예제를 돌려볼 수 있습니다.
『(개정판) 루씬 인 액션』을 발판 삼아 최고의 성능을 자랑하는 루씬 검색 엔진을 활용하는 멋진 애플리케이션, 모바일 앱 또는 웹사이트를 만들어보시기 바랍니다.
강철구
---본문 중에서