안녕하세요. 개발팀 Kai 입니다.
이번 프로젝트에 검색 관련 최적화를 위해서 Solr (solar 로 읽음) 검색 엔진을 도입 했는데요.
검색엔진이 무엇인지, 또 사용하면 어떤 장점들이 있는지 보겠습니다.
검색 엔진이란?
1. 기본 개념
•
*검색 엔진(Search Engine)**은 사용자가 입력한 키워드나 문장을 기반으로 원하는 정보를 빠르게 찾아주는 시스템이다.
우리가 흔히 아는 Google, Bing 같은 웹 검색 엔진뿐만 아니라, 기업 내부 시스템에서 문서를 검색하는 솔루션도 포함된다.
즉, 검색 엔진은 단순히 데이터를 저장하는 것이 아니라, 데이터를 효과적으로 색인(Indexing)하고 빠르게 검색(Search)할 수 있도록 도와주는 시스템이다.
2. 검색 엔진의 핵심 구조
검색 엔진은 크게 4가지 단계로 이루어진다.
① 데이터 수집 (Crawling)
•
웹 크롤러(Crawler) 또는 데이터 수집기가 데이터를 가져오는 단계.
•
웹 사이트, 데이터베이스, 문서 등에서 정보를 자동으로 수집.
•
예: Google 검색 엔진은 웹 페이지를 크롤링하여 인덱스를 생성.
② 색인 생성 (Indexing)
•
수집한 데이터를 검색 가능하도록 정리하는 과정.
•
*역색인(Inverted Index)**을 생성하여 검색 속도를 최적화.
•
텍스트를 분해하여 단어 단위로 색인을 생성하고, 검색할 수 있도록 준비.
•
예: "안녕하세요" → ["안녕", "하세요"] 형태로 저장.
③ 검색(Query Processing & Ranking)
•
사용자가 입력한 검색어(Query)를 분석.
•
검색어와 관련 있는 문서를 찾고 **우선순위(랭킹, Ranking)**를 매겨 결과를 정렬.
•
검색 결과의 정확도를 높이기 위해 TF-IDF, BM25, PageRank 등의 알고리즘을 사용.
④ 검색 결과 제공 (Retrieval & Display)
•
검색된 문서들을 사용자에게 반환.
•
검색어 강조, 연관 검색어, 자동 완성, 추천 검색 기능을 제공하기도 함.
3. 검색 엔진의 종류
① 웹 검색 엔진
•
Google, Bing, Naver, Yahoo 등
•
웹 사이트에서 데이터를 수집하고 색인을 생성하여 검색 결과를 제공.
•
*크롤링(Crawling)**을 통해 웹 페이지를 자동으로 분석하고 색인을 저장.
② 엔터프라이즈 검색 엔진
•
기업 내부 문서, 데이터베이스, 이메일 등을 검색하기 위한 검색 엔진.
•
예: Elasticsearch, Solr, Algolia
•
대용량 데이터를 빠르게 검색할 수 있도록 최적화됨.
③ 데이터베이스 검색 엔진
•
RDB(MySQL, Oracle, PostgreSQL)에서 제공하는 검색 기능.
•
SQL LIKE, Full-Text Search 기능을 제공하지만 성능이 한정적임.
④ 특수 목적 검색 엔진
•
예: 학술 논문 검색(PubMed, Google Scholar), 코드 검색(GitHub, SourceGraph), 법률 문서 검색(LexisNexis).
•
특정 도메인에서 빠르고 정확한 검색을 수행.
4. 검색 엔진과 일반 데이터베이스(RDB) 차이점
검색 엔진 (Solr, Elasticsearch) | 데이터베이스 (MySQL, Oracle) | |
검색 방식 | 역색인(Inverted Index) 사용 | SQL & 인덱스(B+Tree 등) |
검색 속도 | 대량 데이터에서도 빠름 | LIKE 검색 시 느림 |
전문 검색 | 형태소 분석, 자동완성, 동의어 지원 | 기본 제공 X |
유사 검색 | 가능 (TF-IDF, BM25 적용) | 기본적으로 불가능 |
정확한 값 검색 | 적합하지 않음 | 정확한 값 검색에 최적 |
데이터 변경 | 색인(Indexing) 필요 | 즉시 반영 가능 |
5. 검색 엔진을 사용할 때의 장점
•
RDB의 LIKE 검색보다 훨씬 빠름
•
자연어 검색, 형태소 분석이 가능
•
트래픽이 많은 서비스 (쇼핑몰, 뉴스, 검색 포털 등)에 최적
6. 결론: 검색 엔진이 필요한 경우
검색 엔진이 필요할 때
•
대량의 데이터에서 빠르게 검색해야 하는 경우
•
사용자에게 자동 완성, 추천 검색, 연관 검색 기능을 제공해야 하는 경우
•
LIKE '%keyword%' 같은 SQL 검색이 성능 문제를 일으키는 경우
•
자연어 검색, 형태소 분석, 유사 검색이 필요한 경우
일반 RDB가 충분한 경우
•
단순 조회 (SELECT * FROM users WHERE id=1)
•
데이터 변경이 잦고, 검색 속도가 중요하지 않은 경우
솔라 검색엔진의 주요 특징
1. 빠른 검색 속도
Solr는 역색인(Inverted Index) 을 사용하여 검색 성능이 뛰어남.
•
RDB의 LIKE '%검색어%' 는 전체 데이터를 조회 후 검색 해서 느림 → Solr는 색인된 데이터를 빠르게 검색 가능.
•
대량의 문서, 로그, 자막 데이터를 빠르게 조회할 수 있음.
2. 강력한 필터링 & Facet 기능
Solr의 Facet 검색 기능은 데이터 필터링에 강력한 성능을 발휘.
•
예를 들어, 상품 검색 시 카테고리별 개수, 가격별 필터링을 매우 빠르게 처리 가능.
•
SQL의 GROUP BY 처리를 검색 엔진이 하므로 DB 부하 감소.
3. 다양한 데이터 타입 지원
Solr는 JSON, XML, CSV, 데이터베이스, 로그 파일 등 다양한 데이터를 색인할 수 있음.
•
DB 데이터를 그대로 Solr에 색인 가능 (MySQL, PostgreSQL, Oracle 등).
•
REST API 지원 → JSON 기반의 검색이 가능해서 웹 서비스와 연동이 쉬움.
4. 정렬 & 랭킹 조정 가능 (Relevance)
Solr는 검색어와 문서 간의 유사도 점수(Score)를 계산하여 정렬할 수 있음.
•
TF-IDF, BM25 같은 알고리즘을 지원하여 검색 품질 향상.
•
검색 결과를 사용자 맞춤형으로 조정 가능.
5. 정렬 & 랭킹 조정 가능 (Relevance) 
Solr는 검색어와 문서 간의 유사도 점수(Score)를 계산하여 정렬할 수 있음.
•
TF-IDF, BM25 같은 알고리즘을 지원하여 검색 품질 향상.
•
검색 결과를 사용자 맞춤형으로 조정 가능.
5. 한글 형태소 분석 지원 
Solr는 한국어 형태소 분석기(아리랑, nori 등)를 적용 가능.
•
띄어쓰기 없는 검색어 처리 가능 (예: "솔라검색" → "솔라 검색")
•
형태소 분석 후 색인하여 필요 없는 정확한 검색 결과 제공 가능.
•
필요 없는 조사나 동사 등을 제거하여 단어만 추출
•
불용어 리스트를 추가하여 필터 관리 및 동의어 리스트를 추가하여 동의어 매칭 검색
6. 폐쇄망에서도 독립 실행 가능 
•
Solr는 외부 인터넷 없이도 독립 실행 가능.
•
폐쇄망 환경(내부망, 방화벽 내부)에서도 설치 후 바로 사용 가능.