logo
logo
데이터베이스
Solr
Java로 작성된 오픈 소스 엔터프라이즈 검색 엔진이며, ElasticSearch와 함께 검색 엔진의 양대 산맥으로 불린다.
StackOverflow 질문 수: 20587
Github Stars : ★ 4374
사용 기업
직장
종합
techstack-logo
토스랩
techstack-logo
네이버
techstack-logo
드라마앤컴퍼니
기술 블로그 글
버즈빌
버즈빌 CTO가 들려주는 AWS 리인벤트(re:Invent) 2021
리인벤트는 AWS에서 개최하는 콘퍼런스 중 가장 큰 행사입니다. 미국 라스베이거스에서 열리며 티켓값만 무려 200만 원에 달합니다. 그만큼 콘퍼런스가 매우 크게 열리며 호텔 하나에서는 감당이 안 되어 라스베이거스의 여러 호텔에서 동시에 발표가 진행됩니다. 키노트에서는 AWS에서 1년간 준비해온 새로운 주요 서비스들이 한꺼번에 소개가 됩니다. 그동안 리인벤트가 열릴 때마다 AWS의 RSS를 통해 새로 출시되는 서비스가 뭐가 있나 챙겨보곤 했는데 드디어 리인벤트에 직접 참여할 기회가 생겼습니다. 코로나로 인해 해외 출장이 쉽지 않은 상황이었지만 무사히 다녀올 수 있었고 이후에 다른 분들이 리인벤트에 참석할 때 도움이 됐으면 하는 마음에서 사내 공유용으로 후기를 작성하였습니다. 작성하고 보니 다른 분들에게도 공개하면 좋겠다는 생각이 들어 블로그에 올리게 되었습니다. 회사 공식 블로그에 올리기에는 말투가 약간 가벼운데(?) 감안하고 읽어주시면 감사하겠습니다.세션 예약리인벤트는 티켓을 구입하고 나면 미리 세션들을 예약할 수 있습니다. 하지만 리인벤트 행사 참여 결정이 늦게 되면서 이미 대부분의 세션이 예약이 불가능한 상태였습니다. 울며 겨자 먹기로 남은 세션들로 예약을 했는데 리인벤트 웹사이트의 예약페이지는 예약 가능한 세션만 보여주는 기능이 없어 2천 개에 달하는 세션 중에서 예약 가능한 세션 찾는 작업이 어려웠습니다. 나중에 알게 됐지만, AWS events라는 앱을 받으면 여기서는 필터링 기능이 있어 쉽게 예약이 가능합니다.키노트키노트는 매일 있는데 그중에서도 화요일 오전에 AWS CEO인 Adam Selpsky가 진행한 키노트가 메인입니다. 듣던 대로 규모가 엄청났습니다. 키노트에서는 새로 나온 주요 서비스가 발표됩니다. 서비스 발표를 위해 왜 이런 서비스가 나왔는지 밑밥을 엄청나게 깔아놓고 서비스 소개를 합니다. 각 주제의 전환도 유연하게 이어진다는 느낌을 받았습니다. 이렇게 많은 사람 앞에서 막힘없이 술술 발표를 진행하는 CEO가 대단해 보이기도 했습니다. 초청 연사로 나스닥 CEO가 중간에 발표했는데 나스닥이 AWS를 적극적으로 활용하고 있는 모습을 보니 AWS에 대한 신뢰감이 더 커지는 것을 느낄 수 있었습니다. AWS CEO가 나스닥 CEO에게 연락해서 이번 키노트 때 AWS 자랑 좀 해달라고 부탁하는 모습도 상상을 해봤습니다.키노트 때 발표됐던 새로운 서비스 중 가장 눈에 띄는 것은 Arm 기반의 인스턴스인 그래비톤의 세 번째 버전이 나온 것과 머신러닝과 관련된 많은 새로운 기능들이 출시된 것입니다. 그래비톤은 2018년 말에 처음 소개가 된 것으로 알고 있는데 AWS에서 거의 매년 새로운 버전의 그래비톤을 출시하면서 3년 사이 많이 변화가 일어난 것 같습니다. 그래비톤을 사용하면 같은 성능대비 비용이 20%~30% 절감되다 보니 도입하는 회사가 빠르게 늘고 있습니다. RDS나 Elasticache 같은 관리형 서비스는 정말 아무것도 할 필요 없이 인스턴스 타입을 바꾸기만 하면 됩니다. 웹 애플리케이션의 경우 Arm 아키텍처에
solr
줌인터넷
Search Results clustering Engine, carrot 2
September 12, 2018 8 min to read Solr에서 사용할 수 있는 Search Results Clustering Engine인 carrot2 에 대해 팀내 스터디 진행하였습니다. 공부한 내용을 정리해서 작성해봤습니다. 내용은 carrot2의 소개와 carrot2에서 사용하는 clustering algorithm 중 하나인 Lingo algorithm 을 중심으로 작성하였습니다. 클러스터링이란? 먼저 carrot2를 설명하기 전에, 클러스터링(Clustering)이 무엇인지 간단하게 알아보겠습니다. 클러스터링은 비슷한 특성이 있는 데이터들의 집단을 만드는 작업입니다. Classification과 비슷해 보일 수 있으나 다른 개념입니다. 클러스터링은 사전 정보가 없는 데이터들을 유사도를 측정하여 비슷한 데이터를 찾아 그룹으로 만드는 개념이고 Classification은 분류해야 하는 특성을 미리 알고 있는 상태에서 데이터를 그룹화하는 개념입니다. Solr란? solr는 오픈소스 검색 라이브러리, Lucene을 기반으로 동작하는 검색플랫폼입니다. carrot2는 사용자가 검색한 결과 문서들을 클러스터링합니다. 즉 어떤 검색결과 문서들이 input으로 주어져야 합니다. 그러기 위해서 다양한 방법이 있지만, 이번 스터디에서는 solr를 사용했습니다. solr에서 검색의 과정은 위 그림처럼 이루어집니다. 검색요청이 들어오면 각 component들을 차례로 거치면서 결과를 만들어 갑니다. last component에 클러스터링을 담당하는 작업을 추가하면 검색 결과 클러스터링이 가능하게 됩니다. solr에 대해 더 자세히 알고 싶으면 solr reference guide에서 확인하실 수 있습니다. Carrot2 그럼 이제 클러스터링과 solr에 대해 간략하게 알아봤으니, 본격적으로 carrot2에 대해 이야기해보겠습니다. carrot2는 검색결과를 클러스터링해서 결과를 보여주는 데, 기존의 검색결과와는 무엇이 다른지 아래 그림을 보겠습니다. 기존의 검색 결과는 특정한 랭킹알고리즘을 통해 결과를 보여줍니다. 예를 들어 검색 사이트에 apache 라는 단어를 검색하면 apache 재단에 관련된 문서가 주로 상위에 보입니다. apache 헬리콥터나 인디언에 관련된 문서들도 있는데 상위에 보이지 않으므로 관련 문서를 사용자 입장에서는 찾기가 쉽지 않을 수 있습니다. 하지만 검색결과를 클러스터링해서 비슷한 문서끼리 그룹화한다면, 좀 더 검색 결과를 직관적으로 보여줄 수 있을 것입니다. 위 그림의 왼쪽은 기존의 검색 결과이고 오른쪽은 검색결과를 클러스터링한 결과입니다. 데모사이트에서 검색을 통해 직접 확인해 볼 수도 있습니다. carrot2구조는 위와 같습니다. input으로는 검색 결과가 들어오고, filter에서 클러스터링 알고리즘을 통해 비슷한 문서들끼리 클러스터를 만들게 됩니다. 생성된 클러스터들이 output이 됩니다. Solr에서 Carrot2 이용해 간단한 검색하기 우선 solr에서 carrot2를 사용하기 위해서는 solrc
solr
토스랩
JANDI 검색엔진 도입기
이번 포스트에서는 JANDI가 검색엔진을 도입하게 된 배경과 어떤 작업을 했는지 공유하려고 합니다 검색엔진 도입 배경 JANDI는 사용자가 입력한 메시지를 검색하고 사용자가 올린 파일의 파일명/파일 타입을 검색하는 메시지/파일 검색 기능을 제공하고 있습니다. 데이터 저장소로 MongoDB를 사용하고 있는데 검색되는 필드에 인덱스를 걸고 정규 표현식을 이용하여 DB Like 검색(DB는 검색을 좋아한다아니에요;;)을 하고 있습니다. 초기에는 데이터가 아담했는데, 서비스가 커감에 따라 사용자 증가하면서 생성되는 데이터도 많아졌습니다. 올 초에 데이터가 많아지면서 검색이 DB에 부하를 주고, JANDI 서비스에도 영향을 주게 되었습니다. 그래서 JANDI 서비스용 MongoDB와 검색 전용 MongoDB를 분리했는데 이는 임시방편이었고 언젠가는 꼭 검색엔진을 도입하자며 마무리를 지었습니다. 시간은 흘러 흘러 4월이 되었습니다. 당시 메시지 증가량을 봤을 때 올해 안에 검색엔진을 사용하지 않으면 서비스에 문제가 될 거라고 판단이 되어 도입을 진행하게 되었습니다. 검색엔진 도입의 목표는 다음과 같았습니다. 현재 DB Like 검색과 비슷한 검색 품질이어도 좋다. (일정때문에) 검색엔진 도입을 통해 검색이 JANDI 서비스에 영향을 주지 않도록 한다. 색인을 위해서 주기적으로 JANDI의 MongoDB 데이터를 가져 와야 했지만, 이 작업이 JANDI 서비스에 큰 부하를 주지 않을 거라고 생각했습니다. 검색엔진 후보로는 Solr, ElasticSearch, CloudSearch, ElasticSearch Service 가 있었는데 Solr를 선택했습니다. 왜냐하면 제가 경험한 검색엔진이 Solr 였습니다. 더군다나 2010년 초에 접했던 Solr 비해 많이 발전한 것 같아 개발자로서의 열정과 도전 욕구가 샘솟았습니다. SolrCloud pdf, WhyNoWar AWS에서 제공하는 검색 서비스는 많은 부분을 관리해준다는 면에서 솔깃했지만, Custom Analyzer는 적용할 수 없어서 선택하지 않았습니다. ElasticSearch에 크게 흔들렸지만 경험이없다 보니 공부하면서 프로젝트를 진행한다는 부담감이 커서 다음을 기약했습니다. 작업 내용 현재 JANDI는 MongoDB를 데이터 저장소로 사용하고 있습니다. MongoDB의 데이터를 색인하기 위해 데이터를 검색엔진으로 가져와야 하는데 Solr에서는 DataImportHandler 기능을 제공하고 있습니다. 기본 DataImportHandler로 RDB 데이터는 가져올 수 있지만 이 외 MongoDB나 Cassandra 같은 NoSQL의 데이터를 가져오기 위해서는 따로 구현이 필요합니다. 구글신에게 물어봐서 SolrMongoImporter 프로젝트를 찾았는데 문제가 있었습니다. mongo-java-driver 버전이 낮아서(2.11.1) 현재 JANDI에서 서비스 되고 있는 MongoDB(3.0.x)의 데이터를 가져올 수 없었습니다. url: Reference compatibility MongoD
jandi
mongodb
solr
연관 기술 스택
techstack-logo
ElasticSearch
techstack-logo
Redis
Copyright © 2025. Codenary All Rights Reserved.