Search
🔎

Solr 검색엔진 도입

Created
2025/02/21 06:07
Tags
개발 블로그
날짜
텍스트
안녕하세요. 개발팀 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) 필요
즉시 반영 가능
즉, RDB는 정확한 값 조회에 적합하고, 검색 엔진은 빠른 검색과 텍스트 분석에 적합하다.

5. 검색 엔진을 사용할 때의 장점

빠른 검색 속도 → 역색인 사용으로 대량 데이터에서도 빠름
Full-Text 검색 가능 → 자연어 검색, 동의어, 오타 교정 지원
대량 데이터 처리 가능 → 분산 저장 및 검색 지원 (샤딩, 클러스터링)
자동 완성, 추천 검색 가능 → 검색 편의성 증가
그래서 검색 엔진(Solr, Elasticsearch)을 많이 사용하는 이유는?
RDB의 LIKE 검색보다 훨씬 빠름
자연어 검색, 형태소 분석이 가능
트래픽이 많은 서비스 (쇼핑몰, 뉴스, 검색 포털 등)에 최적

6. 결론: 검색 엔진이 필요한 경우

검색 엔진이 필요할 때

대량의 데이터에서 빠르게 검색해야 하는 경우
사용자에게 자동 완성, 추천 검색, 연관 검색 기능을 제공해야 하는 경우
LIKE '%keyword%' 같은 SQL 검색이 성능 문제를 일으키는 경우
자연어 검색, 형태소 분석, 유사 검색이 필요한 경우

일반 RDB가 충분한 경우

단순 조회 (SELECT * FROM users WHERE id=1)
데이터 변경이 잦고, 검색 속도가 중요하지 않은 경우
즉, 검색이 주요 기능이라면 검색 엔진을 고려하는 것이 좋다.

솔라 검색엔진의 주요 특징

1. 빠른 검색 속도

Solr는 역색인(Inverted Index) 을 사용하여 검색 성능이 뛰어남.
RDB의 LIKE '%검색어%' 는 전체 데이터를 조회 후 검색 해서 느림 → Solr는 색인된 데이터를 빠르게 검색 가능.
대량의 문서, 로그, 자막 데이터를 빠르게 조회할 수 있음.
예시
SELECT * FROM articles WHERE content LIKE '%안녕%' (느림 )
Solr: q=description:안녕 (빠름 )

2. 강력한 필터링 & Facet 기능

Solr의 Facet 검색 기능은 데이터 필터링에 강력한 성능을 발휘.
예를 들어, 상품 검색 시 카테고리별 개수, 가격별 필터링을 매우 빠르게 처리 가능.
SQL의 GROUP BY 처리를 검색 엔진이 하므로 DB 부하 감소.
예시: 상품 검색
카테고리별 상품 개수
가격대별 필터 (1만원대, 2만원대…)
브랜드별 상품 개수

3. 다양한 데이터 타입 지원

Solr는 JSON, XML, CSV, 데이터베이스, 로그 파일 등 다양한 데이터를 색인할 수 있음.
DB 데이터를 그대로 Solr에 색인 가능 (MySQL, PostgreSQL, Oracle 등).
REST API 지원 → JSON 기반의 검색이 가능해서 웹 서비스와 연동이 쉬움.
예시
http://localhost:8983/solr/articles/select?q=title:안녕

4. 정렬 & 랭킹 조정 가능 (Relevance)

Solr는 검색어와 문서 간의 유사도 점수(Score)를 계산하여 정렬할 수 있음.
TF-IDF, BM25 같은 알고리즘을 지원하여 검색 품질 향상.
검색 결과를 사용자 맞춤형으로 조정 가능.
예시: 뉴스 검색 결과
최신 뉴스 우선 노출
인기 검색어 기반 가중치 조정

5. 정렬 & 랭킹 조정 가능 (Relevance)

Solr는 검색어와 문서 간의 유사도 점수(Score)를 계산하여 정렬할 수 있음.
TF-IDF, BM25 같은 알고리즘을 지원하여 검색 품질 향상.
검색 결과를 사용자 맞춤형으로 조정 가능.
예시: 뉴스 검색 결과
최신 뉴스 우선 노출
인기 검색어 기반 가중치 조정

5. 한글 형태소 분석 지원

Solr는 한국어 형태소 분석기(아리랑, nori 등)를 적용 가능.
띄어쓰기 없는 검색어 처리 가능 (예: "솔라검색" → "솔라 검색")
형태소 분석 후 색인하여 필요 없는 정확한 검색 결과 제공 가능.
필요 없는 조사나 동사 등을 제거하여 단어만 추출
불용어 리스트를 추가하여 필터 관리 및 동의어 리스트를 추가하여 동의어 매칭 검색
예시: "서울역 근처 맛집" 검색
"서울역"과 "근처"를 구분하여 검색
"맛집" → "음식점, 레스토랑" 등 유사어 매칭 가능

6. 폐쇄망에서도 독립 실행 가능

Solr는 외부 인터넷 없이도 독립 실행 가능.
폐쇄망 환경(내부망, 방화벽 내부)에서도 설치 후 바로 사용 가능.
예시: 내부 검색 시스템 구축
회사 내부 문서 검색 시스템
병원, 연구소 등 폐쇄망 환경의 데이터 검색