[실무에 활용하는 Elasticsearch 검색엔진 구축 CAMP|강사인터뷰] “똑똑한 검색 엔진 구축이요? 첫술에 배부를 수 없죠.” – 김지훈 강사님

 

[실무에 활용하는 Elasticsearch 검색엔진 구축 CAMP|강사인터뷰] “똑똑한 검색 엔진 구축이요? 첫술에 배부를 수 없죠.” – 김지훈 강사님

 
elas_inst.001

 
안녕하세요 강사님, 간단한 자기소개 부탁드립니다.

검색서비스 구축 및 컨설팅 전문 기업 쿼리젯 대표이사 김지훈입니다. 검색 서비스 구축 프로젝트 및 클라우드형 검색 서비스 플랫폼 개발 다수 수행하였습니다. 주요 연구분야는 Elasticsearch, Lucene, Solr, 검색서비스 구축 방법론, 검색 랭킹 모델, 자연어 처리를 위한 한국어 형태소 분석기, 데이터 자동 수집 및 스크래핑, 데이터 분석 및 추천 엔진 알고리즘입니다. 이번에 [ 실무에 활용하는 Elasticsearch 검색엔진 구축 CAMP ]의 강의를 맡게 되었습니다.

 

 

본 강의를 맡게 되신 동기는 무엇인가요? 기획의 어떤 부분에 동감하셔서 강의를 맡기로 결정하셨는지 궁금합니다.

강의 제안을 받았을 때 가장 먼저 한 생각은 ‘이 강의를 통해 제가 드릴 수 있는 가치가 무엇인가?’였습니다. 조금 재밌게 표현하자면 저는 흙수저 개발자입니다. 검색 엔진 관련 회사를 몇 년간 운영해오면서 정말 해당 분야의 밑바닥부터 차근차근 공부해왔고 스스로 검색엔진을 구축하면서 많은 시행착오를 경험했습니다. 저라고 한 번에 뚝딱 검색엔진을 만들어내진 못했어요. 그렇기 때문에 오히려 강의를 통해 수강생분들에게 전할 수 있는 내용이 많을 것이라 생각했습니다. 다양한 시행착오를 온몸으로 부딪히고 오랜 고민을 통해 해결한 경험이 있기 때문에 수강하시는 분들의 눈높이에 맞춰 보다 쉽게 해결법을 설명할 수 있다는 것이 제 강점이라고 생각해요. 특히, 강의를 기획하신 코스매니저분이 본 강의는 단순히 이론만 일방적으로 전하는 것이 아니라 실전에 경험을 가지고 실무에 바로 적용할 수 있는 역량을 길러주는 것이 목적이라고 말씀하신 점에 크게 공감했습니다. 제 최종 목표는 ‘누구나 검색 기술을 쉽게 사용할 수 있게 하자’입니다. 제가 가진 이런 사명과 이번 강의가 잘 부합한다고 생각했어요. 무엇보다 국내에 검색엔진 분야에 대해 공부하고 싶어도 제대로 배울 수 있는 곳이 없기 때문에 본 강의가 검색 엔진 구축에 관심을 가진 분들에게 큰 도움이 될 것이라는 생각에 강의를 맡기로 결정했죠.

 
그렇군요! 그럼 강의 커리큘럼을 구성하실 때 가장 중점을 두신 부분은 무엇인가요?

커리큘럼을 구상하기 전에 먼저 개인적으로 리서치를 진행했습니다. 검색 엔진과 관련되어 잠재적인 수강생들이 가장 필요한 부분을 짚어주고 싶었기 때문이죠. 그 결과 공통적으로 검색 서비스 구축에 있어 겪는 가장 큰 어려움은 ‘검색이 잘 안된다.’ 즉, 검색 품질(Recall)의 문제였습니다. 다른 한 가지는 ‘검색이 마음에 안 든다.’ 즉, 검색 정확도(Precision)의 문제죠. 전자는 결국 형태소 분석에 관련된 부분이고, 후자는 랭킹 모델을 이야기하는 겁니다. 랭킹 모델에 대해 좀 더 구체적으로 이야기하자면, 랭킹 모델이라는 것이 어떻게 보면 회사 차원에서 매우 은밀한 부분일 수 있습니다. 물론 랭킹 모델을 공개하는 곳도 있지만 대부분의 핵심 랭킹은 공개하지 않고 꽁꽁 숨겨두죠. 그리고 Elasticsearch 관련된 번역서적을 봐도 랭킹 모델에 대해 사용법은 알려주지만, 구체적인 적용 및 활용법에 대해서는 알려주지 않습니다. 또 한편으로는 랭킹이라는 것 자체가 받아들이는 사람에 따라 그 만족도가 천차만별이기 때문에, 굉장히 머리아픈 모델이기도 해요. 때문에 랭킹 모델을 지속적으로 튜닝하는 과정만이 있을 뿐, 끝이 없습니다. 한글 형태소 분석 같은 경우에도 Lucene 자체가 영어를 기반으로 하기 때문에 한글 부분이 약할 수밖에 없습니다. 아직 발전 가능성이 많죠. 그만큼 분석에서의 어려움도 많고요.
정리하자면, 커리큘럼을 구성하며 중점을 둔 것은 Lucene이나 Elasticsearch의 사용법이 아니라 이 두 가지 즉, 형태소 분석과 랭킹 모델이었습니다. 실무에서 사용자의 만족도를 보다 더 높일 수 있는 검색 엔진을 구축하실 수 있도록 최대한 활용과 응용력을 길러드리는 것을 목표로 커리큘럼을 구성했습니다.

 

실무자 분들에게 정말 필요한 강의가 될 것 같습니다. 앞서, 검색 엔진 구축에 있어 느끼는 공통적인 어려움에 대해 말씀해주셨는데요, 혹시 이 외에도 겪을 수 있는 어려움이 있을까요?
비기술적인 측면을 이야기하자면 아무래도 비용적인 측면이 있을 것 같습니다. 일단, 기업에서 검색 엔진 도입을 하고자 할 때 가장 먼저 상용 검색엔진에 접근하게 됩니다. 편리하기 때문이죠. 비용적인 부담이 있기는 대신에 검색 서비스를 만들기 위해 필요한 모든 것을 제공하기 때문입니다. 하지만 비용 문제로 인해 오픈 소스로 검색엔진을 구축하려고 하는 경우도 많습니다. 솔직히 이러한 경우에는 ‘엔지니어 파워’가 필요합니다. 해당 서비스를 전담하는 검색 엔지니어가 필수적이죠. 결국 비용을 줄이기 위해 오픈소스 검색 엔진에 관심을 가질 수 있지만, 결국 장기적인 관점에서 봤을 때는 전담 엔지니어의 교육 및 역량 강화에 대한 비용이 발생하죠. 그러나, 대부분의 회사들이 이 비용에 대해 절약 아닌 절약(?)을 하려고 하다 보니 전담 엔지니어 없이 기존의 개발자들에게 검색 엔진 구축을 요구하는 경우가 많아요. 게다가 오픈 소스의 경우 문제 상황이 발생했을 때 책임을 져주는 곳이 없습니다. 오롯이 담당 엔지니어의 몫이 되죠. 때문에 검색 엔진 분야에 접근하는 것을 두려워하는 웃지 못할 경우가 생기기도 합니다. 하지만, 꼭 당부드리고 싶은 말씀은 ‘두려워할 필요가 없다.’라는 겁니다. 그 어떤 문제 상황에 부딪히더라도 그 문제는 필시 전 세계 누군가가 이미 경험한 것이에요. 전 세계의 누구라도 경험해보지 못한 문제는 발생할 수 없습니다. 어떻게서든 해결 가능한 문제이기 때문에 오픈 소스로 접근하는 것에 두려움을 가지지 않으셨으면 좋겠습니다.
기술적인 측면에 대해서는 앞서 말씀드렸던 형태소 분석과 랭킹 모델에 대해서 말씀을 드려야 할 것 같은데요. 둘 다 현실적으로 처음부터 완벽한 결과물이 나올 수가 없습니다. 지속적으로 문제점을 트레킹하고 튜닝해나가는 과정이 필요하죠. 중요한 건 바로 이것입니다. 구글이나 네이버마저도 10년 20년의 시간 동안 수정 보완하는 과정을 거쳐 현재의 서비스 완성도를 갖추게 된 것입니다. 기존 검색 서비스의 문제점을 끊임없이 탐구하고 분석해서, 해결해나가는 그 프로세스 자체를 정립하는 것이 그만큼 중요한 부분이죠. 어렵기도 하고요. 결국 이런 프로세스를 통해 회사 내의 노하우를 오랫동안 쌓아가는 것이 경쟁력이 되는 거예요.

 

 

이 강의가 그런 경쟁력을 갖추게 하는 발판이 될 것 같네요! 기술적인 부분에 대해 추가적으로 질문을 드리고 싶습니다. 일반적으로 ‘한국어’가 가진 언어적 특성으로 인해 검색 엔진을 구축하는 데 있어 좀 더 어려움이 있다고 하는데요. 그 부분에 대해 구체적으로 설명 부탁드립니다. 
보통 언어를 구분할 때 여러 가지 기준 있지만, 띄어쓰기로 의미가 구분되는 단위를 어절이라고 하는데 어절이 어떻게 구성되느냐에 따라 교착어, 굴절어, 고립어 등으로 나뉩니다. 그렇다고 하나의 언어가 특정 카테고리로 딱 잘라 구분되는 것은 아닙니다. 한국어는 굴절어나 고립어의 특성도 일부 가지고 있지만, 교착어에 가까운 언어입니다. 교착어라는 건 쉽게 설명하자면, 어떤 단어가 있을 때 접사 혹은 조사가 붙어서 전체적인 어절의 의미를 한정 지어주는 것을 의미합니다. 이로 인해서 생기는 알고리즘적 복잡도가 있습니다. 단어와 접사/조사를 어떻게 분리해야 하는지. 다시 말해 어떻게 경계를 내려야 하는지가 까다롭기 때문이죠. 두 번째로는 ‘어순’의 다양성에 있어요. 영어의 경우에는 어순에 따라 해당 위치에서 단어가 가지는 의미, 역할이 고정이 됩니다. 하지만 한국어는 그렇지 않아요. 예를 들어, ‘나는 밥을 먹었다.’, ‘밥을 먹었다 나는’, ‘먹었다 나는 밥을’ 이 모든 게 하나의 의미로 통하게 됩니다. 어순만으로 의미를 구분할 수 없게 되는 거죠. 그렇다 보니, 하나의 어절의 의미를 규정짓는데 어려움이 생깁니다. 세 번째로는 축약이 많이 생깁니다. 단어 자체의 중의적인 의미도 많고요. 예를 들어 ‘나는 밥을 먹었다.’가 ‘나 밥 먹음’으로 축약되는 현상이 비일비재하게 발생하죠. 그리고 ‘감기는’이라는 어절을 놓고 봤을 때 이게 질병을 나타내는 ‘감기’인지 혹은 ‘무언가를 감다’라는 동사의 변형인지 어절만 놓고 파악이 어렵습니다.  이처럼 용언의 변형이 정말 다양하기 때문에 이런 경우의 수를 모두 처리하기 위한 알고리즘의 복잡도도 높아질 수밖에 없습니다. 이 밖에도 복합명사의 존재도 한국어를 기반으로 한 검색엔진 서비스 구축에 어려운 부분인데요. 영어도 물론 복합명사가 존재합니다. BoyFriend도 복합 명사이죠. 그렇지만 명사 간 구분이 쉽습니다. boy + friend가 아니면 구분해낼 수 있는 경우의 수가 없기 때문입니다. 하지만 한국어는 그렇지 않습니다. 예를 들어, ‘대학생 선교회’라는 단어가 있을 때 ‘대학생 + 선교회’라고 구분할지 ‘대학 + 생선 + 교회’로 구분할지 판단해야 합니다. 또한 영어는 띄어쓰기 단위가 곧 어절이기 때문에 띄어쓰기 단위만 잘 Tokenizing을 하면 어느 정도 쓸만한 분석이 되지만 한국어는 띄어쓰기를 하지 않는 경우가 많기 때문에 이 부분도 어려운 점 중에 하나입니다.

 
그렇다면 이런 한국어 기반 검색 엔진 구축에 있어서의 어려운 점을 강의를 통해 어떻게 해결해 주실 수 있으신가요? 
크게 먼저 말씀드리자면, 혼자서 튜토리얼만 보면 배울 수 있는 Elasticsearch의 기본적인 사용법을 가르쳐드리는 강의가 아니라, 정보 검색 이론부터 형태소 분석의 원리 등에 대해서 깊이 있게 짚어드릴 예정입니다. 한글 형태소 분석기의 소스를 하나하나 뜯어보고 배웠던 이론이 이 분석이 내에서 어떻게 구현되어 있는가에 대해 확인해 볼 것입니다. 진짜 실력을 기르기 위해서는 툴 사용법이 아니라 원리에 대해 이해하는 것이 중요하기 때문입니다.
먼저 정보 검색 이론에 대한 배경부터 아키텍처의 구성, 다시 말해 하나의 단어를 가지고 문서를 가지고 오는 원리에 대해 배우시게 됩니다. 그리고 boolean model, vector space model 같은 다양한 모델들이 어떻게 활용이 되고 있는지 알려드릴 겁니다. 그리고 한국어의 특성 및 한국어를 분석하는 알고리즘에 대해 배우게 됩니다. 그리고 실제 분석기를 뜯어서 어떻게 이런 이론들이 적용되어 있는지 살펴보는 거죠. 마지막으로 Lucene에 대해 학습하게 됩니다. 솔직히 Elasticsearch를 사용하는데 Lucene을 모른다고 해도 크게 문제 될 것은 없습니다. 하지만, Elasticesearch가 Lucene 기반이기 때문에 Lucene을 제대로 이해하지만 못하면 실무에서 내가 원하는 대로 customize 하는 것이 불가능합니다. 필요에 맞게 검색엔진을 customize 하는 것이 실무에서는 엔지니어에게 꼭 필요한 역량이기 때문에 Lucene을 짚고 넘어갈 생각입니다.

정말 실용적이면서도 쉴 틈이 없는 강의가 될 것 같네요! 그럼 어떤 분들에게 이 강의를 추천하고 싶으신가요?
일단은 회사에서 검색 서비스를 구축하거나 도입하려는 개발자 혹은 엔지니어 분들에게 이 강의를 추천하고 싶습니다. 실무에서 바로 쓸 수 있는 역량을 기르는데 최적의 강의가 될 거예요. 더불어, 검색 엔지니어를 꿈꾸는 학생분들도 이 강의를 들으시면 좋을 것 같습니다. 검색 전문 엔지니어가 아직 국내에 많지 않기 때문에 이번 강의가 검색 분야에 전문가로 성장하는 발판이 될 수 있을 거라 생각합니다.

 

 

강의뿐 아니라 검색 엔진 분야에 대해 많은 것을 알 수 있었던 뜻깊은 인터뷰였습니다. 마지막으로, 본 강의에 관심을 가지고 계시는 분들에게 한 말씀 부탁드립니다. 

강의가 평일 7시 30분에 시작합니다. 저도 강의를 들어본 경험이 있지만, 실무에 있으면서 평일 저녁 강의를 듣는다는 게 정말 쉽지 않은 일이에요. 게다가 검색 분야는 아직은 국내에서 생소하기 때문에 배우기가 쉽지 않을 수도 있습니다. 그럼에도 불구하고 본 강의에 참석하시는 분들은 배움에 대한 큰 열정을 가지고 계신 분들일 거라 믿어 의심치 않습니다. 그 열정에 제가 도움이 되고, 더 큰 열정을 키울수 있도록 최선을 다해 강의하겠습니다. 감사합니다.

 

elas_ins_2.001

 

 

Recent Posts