Search
🔎

Solr 검색엔진 도입 [25.02/Kai]

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