[인터뷰] 똑똑한 Elasticsearch 검색 엔진 구축이요? 첫술에 배부를 수 없죠.

>

안녕하세요. 강사님, 간단한 자기소개 부탁드려요. 검색 서비스 구축 및 컨설팅 전문 대기업 퀄리젯 대표이사 김지훈입니다. 검색 서비스 구축 프로젝트 및 클라우드형 검색 서비스 플랫폼 개발을 다수 수행하고 있습니다. 주요 연구 분야는 Elastic search, Lucene, Solr, 검색 서비스 구축 방법론, 검색어 모델, 자연어 처리를 위한 한국어 형태 소분석기, 데이터의 자동 수집 및 스크래핑, 데이터 분석 및 추천 엔진 알고리즘입니다. 이번에 ‘실무에 활용하는 Elastic search 검색엔진 구축 CAMP’ 강의를 맡게 되었습니다. 본 강의를 맡게 된 계기가 뭐죠? 기획의 어떤 부분에 동감하셔서 강의를 맡기로 결정하셨는지 궁금합니다. 강의를 제의 받았을 때 가장 자신 있던 생각은 ‘이 강의를 통해서 제가 드릴 가치가 무엇일까요?’ 였습니다. 좀 재미있게 표현하자면, 저는 흙젓가락 개발자입니다. 검색엔진 관련 회사를 수년간 운영해오면서 정스토리 해당분야 밑바닥에서부터 꾸준히 공부해왔고 스스로 검색엔진을 구축하면서 많은 시행착오를 겪었습니다. 저라고 해서 한번에 검색엔진을 만들어낼 수는 없었어요. 그래서 오히려 강의를 통해서 수강생들에게 알려드릴 수 있는 것들이 더 많을 것 같습니다. 여러 시행착오를 온몸으로 부딪쳐 오랜 생각을 통해 해결한 경험이 있기 때문에 수강하시는 분들의 눈높이에 맞게 보다 쉽게 해결책을 설명할 수 있다는 것이 저의 장점이라고 생각합니다. 특히 강의를 기획하신 코스매니저분들이 본 강의는 단순히 이론만 일방적으로 전달하는 것이 아니라, 실전경험을 통해 실무에 즉시 적용할 수 있는 역량을 키우는 것이 목적이라고 스토리에 적혀있다는 점에 많은 공감대를 형성했습니다. 저의최종목표는누군가본인검색기술을쉽게사용할수있도록하자입니다. 제 사명과 이번 강의가 딱 맞는다고 생각했어요. 무엇보다 국내에 검색엔진 분야에 대해 공부하고 싶어도 제대로 배울 곳이 없기 때문에 본 강의가 검색엔진 구축에 관심을 갖고 있는 분들에게 큰 도움이 될 것 같아서 강의를 맡았습니다.”그렇습니다! 그럼 강의 커리큘럼을 구성할 때 가장 중점을 둔 부분은 무엇입니까? 커리큘럼을 구상하기 전에 가장 기획으로 개인적으로 조사를 실시했습니다. 검색엔진과 관련해서 잠재적인 수강생이 가장 필요한 부분을 알려주고 싶었기 때문입니다. 그 결과, 공통적으로 검색 서비스 구축에 있어서 겪는 가장 큰 어려움은 ‘검색이 잘 되지 않는다’, 즉, 검색 품질(Recall)의 사고였습니다. 또 하나는 검색이 감정에 맞지 않는다, 즉 검색 정확도(Precision)의 사고입니다. 전자는 정스토리, 즉 형태소 분석과 관련된 부분이고 후자는 랭킹모델을 스토리를 합니다. 랭킹모델에 대해서 좀 더 구체적으로 말씀을 드리자면, 랭킹모델이라는 게 어떻게 보면 굉장히 은밀한 부분일 수 있습니다. 물론 랭킹모델을 공개하는 곳도 있지만 대부분의 핵심순위는 공개하지 않고 숨겨둡니다. 그래서 Elastic search에 관련된 번역서적을 봐도 랭킹모델에 대한 사용법은 알려주지만 구체적인 적용 및 활용법은 알려주지 않습니다. 역시 한편으로는 랭킹이라는 것 자체가 받아들이는 사람에 따라 그 만족도가 천차만별이기 때문에 굉장히 골치 아픈 모델이기도 해요. 그래서 랭킹 모델을 지속적으로 튜닝하는 과정만 있을 뿐 끝이 없습니다. 한글형태분석같은경우에도Luceene자체가영어를기반으로하기때문에한글부분은약해질수있습니다. 아직도 발전 현실성이 많아요. 그만큼 분석상의 어려움도 많습니다.   정리하면, 커리큘럼을 구성하면서 중점을 두었던 것은 Lucene이 본인의 Elastic search를 사용하는 방법이 아니고, 이 두 가지, 즉 형태소 분석과 랭킹모델이었습니다. 실무에 있어서 사용자의 만족도를 보다 높일 수 있도록 가장 활용과 응용력 함양을 목표로 커리큘럼을 구성했습니다. 실무자분께 정말 스토리가 필요한 강의가 될 수 있을 것 같습니다. 위치, 검색엔진을 구축하면서 느끼는 공통적인 어려움에 대해 이야기를 써주셨는데, 혹시 그 밖에도 겪는 어려움이 있나요? 비기술적인 측면을 이야기하면 아무래도 비용적인 측면이 있다고 생각합니다. 우선 대기업이 검색 엔진을 도입하려는 때에 가장 잘해서 상용 검색 엔진에 다가갑니다. 편리하기 때문입니다. 비용적인 부그다음이 있는 대신 검색 서비스를 만들기 위해 필요한 모든 것을 제공하기 때문입니다. 하지만 비용 사고로 오픈소스로 검색엔진을 구축하려는 경우도 많습니다. 솔직히 이런 경우에는 ‘엔지니어 파워’가 필요합니다. 해당 서비스를 다 말하는 검색 엔지니어가 필수입니다. 천스토리 결국 원가를 절감하기 위해 오픈소스 검색엔진에 관심을 가질 수 있지만 천스토리 결국 장기적인 관점에서 본다면 저는 그 다음 엔지니어의 교육과 역량 강화에 대한 비용이 발생합니다. 하지만본인들대부분의회사들이이비용에대해서절약하지않고절약하려고하기때문에저는그소리엔지니어없이기존개발자들에게검색엔진구축을요구하는경우가많습니다. 게다가 오픈 소스는 사고 정세 때 책입니다, 라고 말해 주는 곳이 없습니다. 오로지 그 다음당의 엔지니어 역할입니다. 그러다 보니 검색엔진 분야에 접근하는 것을 두려워하는 웃지 못하는 경우가 생기기도 합니다. 하지만 꼭 부탁하고 싶은 스토리는 두려워할 필요가 없다는 것입니다. 어떤 사고 정세에 부딪치더라도 그 사고는 분명 전 세계 누군가가 이미 겪고 있는 것입니다. 전 세계 누구든 경험하지 못한 사고는 발생하지 않습니다. 어떻게든 해결 가능한 사고이기 때문에, 오픈 소스로 접근하는 것에 무서워하지 않았으면 합니다.  기술적인 측면에 대해서는 아까 말씀드린 형태소 분석과 랭킹 모델에 대해서 말씀드리도록 하겠습니다. 둘 다 현실적이고 완벽한 결과가 본인으로 나올 수 없어요. 지속적으로 사고점을 트레킹하고 튜닝해 나가는 과정이 필요합니다. 중요한 것은 곧바로 이거예요. 구글이 본인 네이버조차 10년~20년 사이에 수정 보완하는 과정을 거쳐 현재 서비스 완성도를 갖추게 되었습니다. 기존 검색 서비스의 사고점을 끊습니다.아니라 탐구하고 분석하고, 해결하고, 본인은 그 프로세스 자체를 확립하는 것이 그만큼 중요한 부분인 거죠. 어려울 수 있어요. 정스토리, 즉 이런 과정을 통해서 회사 내 노하우를 오래 쌓는 것이 경쟁력이 될 것입니다. 이 강의가 그런 경쟁력을 갖추는 발판이 될 것 같군요! 기술적인 부분에 대해서 추가로 질문하게 해주세요. 일반적으로‘대한민국어’가갖는언어적특성으로검색엔진을구축하는데어려움이많다고합니다. 그 부분에 대해 구체적으로 설명 부탁드립니다.  언어를구분할때여러가지기준이있는데띄어쓰기에서의미가구분되는단위를어절이라고하는데어절이어떻게구성되느냐에따라서교착어,굴절어,고립어등으로분류가됩니다. 그렇다고 본인의 말이 특정 카테고리로 딱 구분되는 것은 아닙니다. 대한민국어는굴절어,고립어의특성도일부갖고있지만교착어에가까운언어입니다. 교착어라고 하는 것은 좀 쉽게 말해서 어떤 단어가 있을 때 접사나 연구가 붙어서 모드적인 어절의 의미를 한정하는 것을 의미합니다. 이로 인해 발생하는 알고리즘적 복잡도가 있습니다. 단어와 접사/연구를 어떻게 분리해야 하는가? 다시 얘기하면서 어떻게 경계해야 하는지가 까다롭기 때문이죠. 두번째는어순의다양성입니다. 영어 같은 경우는 어순에 따라서 그 자리에서 단어가 가지고 있는 의미, 역할이 고정되어 있습니다. 그러나 대한민국어는 다릅니다. 예를 들면, 본인은 밥을 먹었어.그는 밥을 먹었다. ‘본인은 밥을’ 이 모든 것이 아래 본인의 의미로 통하게 됩니다. 어순만으로 뜻을 구별할 수는 없어요. 그래서 아래 본인의 어절의 의미를 규정하기가 어렵습니다. 셋째, 많은 축약이 생겨납니다. 자체의 중의적인 의미도 많습니다. 예를 들어 본인은 밥을 먹었다.‘이’ 자신의 식성에 축약되는 현상이 자주 발생합니다. ‘감기는’이라고 하는 어절로 봐서 어떤 질병을 본인타시하는 ‘’가 맞는지 아니면 ‘무엇을 두른다.’라고 하는 동사의 변형인지 이 어절만으로도 파악이 어려운데요.  이와 같이 용언의 변형이 정스토리이고 다양하기 때문에 이런 경우의 수를 모드 처리하기 위한 알고리즘의 복잡도도 높아질 수밖에 없습니다. 이외에도 복합명사의 존재도 한국어를 기반으로 한 검색엔진 서비스의 구축에 있어서 어렵습니다. 영어는 물론 복합명사가 존재합니다. BoyFriend도 복합명사입니다. 하지만 명사간 구분이 용이합니다. boy+칭구가아니면구분이안되니까요. 그러나 대한민국어는 다릅니다. 예를 들어 ‘대학생 선교회’라는 단어가 있을 때 ‘대학생+선교회’로 구분할지, ‘대학+물고기+’로 구분할지 판단해야 합니다. 역시 영어는 띄어쓰기 단위가 어절이기 때문에 띄어쓰기 단위만 잘 Tokenizing 하면 어느 정도 쓸 수 있는 분석이 가능하지만 대한민국어는 띄어쓰기를 하지 않는 경우가 많기 때문에 이 부분도 어려운 점 중에 하본인입니다.  그럼 이와 같은 대한민국어 기반의 검색엔진 구축의 어려움을 강의를 통해 어떻게 해결해 주실 수 있습니까?  제가 잘하는 이야기인데, 공포서 튜토리얼을 보면 배울 수 있는 Elastic search의 기본적인 사용법들을 가르치는 강의가 아니라, 정보검색이론을 통해서 형태소분석의 원리 등에 대해서 깊이 설명하도록 하겠습니다. 한글형태소분석기의소스를그때-그때열어보고배운이론이이분석이안에서어떻게구현되었는지에대해서확인하도록하겠습니다. 실제로 실력을 키우기 위해서는 툴의 사용법이 아니라 원리에 대해 이해하는 것이 중요하기 때문입니다.  각 파트 별로 설명하자면, 첫 번째 파트에서는 정보 검색 이론에 대한 배경부터 아키텍처의 구성, 또 스토리해서 본인의 단어를 가지고 문서를 가져오는 원리에 대해서 배우게 됩니다. 그래서 boolean model, vector spacemodel 등 다양한 모델이 어떻게 활용되고 있는지 소개해 드리겠습니다. 이를 위해 대한민국어의 특성 및 대한민국어를 분석하는 알고리즘을 학습합니다. 그렇기 때문에 실제 분석기를 열어서 어떻게 이러한 이론이 적용되고 있는지 살펴보는 것입니다. 마지막으로 Lucene에 대해 배우겠습니다. 솔직히 Elastic search를 사용하는데 Lucene을 모른다고 해도 큰 사고가 나지는 않습니다. 하지만 Elasticesearch가 Lucene 기반이기 때문에 Lucene을 제대로 이해하지 못하면 실무에서 제가 원하는대로 customize하는 것이 불가능합니다. 필요에 따라 검색 엔진을 커스텀하는 것이 실무에서는 엔지니어에게 꼭 필요한 역량이므로 Lucene을 생각하고 있습니다.  두 번째 파트는 미미박스 정호욱 강사가 실무 사례에 대해 특강을 할 예정입니다. 세번째파트부터는완전히실습중심으로이루어질예정입니다. 기존에 배운 이론을 간단하게 요약/정리하고, 본인서 실제로 Elastic search를 활용하는 방법에 대해 실습을 통해 배우게 됩니다. 그러기 위해서 본인서의 마지막 파트에서 데이터의 특성별로 최적화된 검색엔진을 직접 구축해 보는 실습을 진행합니다. 정말 스토리가 실용적이면서, 쉴 틈도 강의가 되겠네요! 그럼 어떤 분들께 이 강의를 권하고 싶으세요?우선 회사에서 검색 서비스를 구축하거나 본인 도입하려는 개발자나 엔지니어 쪽에 이 강의를 권하고 싶군요. 실무에서 바로 쓸 수 있는 역량을 키우는데 최적의 강의가 될 것입니다. 또 검색엔지니어를 꿈꾸는 학생들도 이 강의를 들으시면 좋을 것 같습니다. 검색 전문 엔지니어가 아직 국내에 많지 않기 때문에 이번 강의가 검색 분야의 전문의로 성장하는 발판이 될 것입니다. 강의뿐만 아니라 검색엔진 분야에 대해 많은 것을알게 된 뜻깊은 인터뷰였어요. 마지막으로 본 강의에 관심이 있으신 분들께 스토리를 부탁드립니다.  강의가 평일 7시 30분에 시작해요. 저도강의를들었던경험이있는데실무에있어서평일의Data night강의를듣는다는것이진짜스토리가아닙니다. 게다가 검색 분야는 아직 국내에선 생소해 공부하기가 쉽지 않을 수 있습니다. 그래도 본 강의에 참석하시는 분들은 배움에 대해서 큰 열정을 가지고 있는 분이라고 믿어 의심치 않습니다. 그 열정에 제가 도움이 되고 더 큰 열정을 키울 수 있도록 최선을 다해 강의를 진행하겠습니다. 감사합니다

발행인: 데이터 사이언스팀의 콘텐츠 매니저 강한아 (anakang@fastcampus.co.kr)

>

자세한 강의정보를 알고 싶으신 분은? [실무에 활용하는 Elastic search 검색엔진 구축 CAMP] 보러 가 >>