게시일: · 수정일:
PGroonga 가이드PGroonga란?
PGroonga란? 들어가며 이 시리즈는 궁극적으로 PostgreSQL 만 사용하여 강력한 검색 시스템을 구축하는 방법을 다룹니다. ElasticSearch와 같은 외부 검색엔진을 사용하지 않고, 단순한 방법으로 PostgreSQL 내에서 문제를 해결하는 것을 목표로 합니다. El...
작성자: gymynnym
PGroonga란?
들어가며
이 시리즈는 궁극적으로 PostgreSQL만 사용하여 강력한 검색 시스템을 구축하는 방법을 다룹니다.
ElasticSearch와 같은 외부 검색엔진을 사용하지 않고, 단순한 방법으로 PostgreSQL 내에서 문제를 해결하는 것을 목표로 합니다.
ElasticSearch vs PGroonga
ElasticSearch는 대규모 데이터를 빠르게 검색할 수 있는 강력한 검색엔진이며, 수평 확장, 비정형 문서 검색 등 다양한 기능을 제공합니다. 하지만 ElasticSearch는 별도의 시스템으로 운영 및 관리가 필요하며, RDB와의 데이터 동기화 과정이 복잡할 수 있습니다. 또한, 설정과 튜닝의 높은 러닝커브로 인해 초보자에게는 진입 장벽이 높습니다.
반면, PGroonga는 PostgreSQL의 확장 기능으로, Groonga를 인덱스 엔진으로 통합하여 PostgreSQL 내에서 강력한 다국어 Full Text Search를 지원하도록 해줍니다. 덕분에 별도의 검색엔진을 운영할 필요가 없으며, 데이터 동기화 문제도 발생하지 않습니다. 또한, 설정이 비교적 간단합니다. :)
Groonga는 역색인 기반의 Full Text Search 엔진으로, 문서를 등록하자마자 검색 결과에 바로 반영되며 읽기 락 없이 업데이트가 가능해 실시간 애플리케이션에 적합합니다. 또한 열-지향 DBMS로서 집계 쿼리에 강해 MySQL/PostgreSQL 같은 행-지향 시스템의 약점을 보완할 수 있습니다. 자세한 내용은 Characteristics of Groonga를 참고해주세요.
물론, ElasticSearch를 사용하는 것이 더 나은 경우도 있습니다:
- 수평 확장이 필요한 경우
- 복잡한 검색 기능이 필요한 경우(예: 파이프라인, 머신러닝 통합 등)
- 강력한 분산 로그/메트릭 분석이 필요한 경우(ELK: Elasticsearch, Logstash, Kibana)
- 요구사항이 ElasticSearch 사용인 경우 :(
만약, 구현하고자 하는 검색 시스템이 단순한 구조라면, PGroonga는 개발자에게 행복한 선택이 될 수 있습니다.
PGroonga의 동작 과정
PGroonga 인덱스를 통한 Full Text Search 과정은 다음과 같습니다:
- Normalize : 입력된 문자열을 다음과 같은 방법들을 통해 정규화합니다.
- 대소문자 통합
- 공백/기호 처리
- Unicode 정규화
- 불필요한 문자 제거
- Tokenize : Normalize된 문자열을 토큰화합니다.
- 언어 별로 유용한 Tokenizer를 선택하는 게 중요합니다. 예) 일본어 ->
Mecab - 예)
"postgresql 검색"->["po", "os", "st", "tg", ... , "검색"]
- 언어 별로 유용한 Tokenizer를 선택하는 게 중요합니다. 예) 일본어 ->
- 인덱스 참조 및 비교 : 생성된 토큰을 기반으로 PGroonga에서 데이터를 검색합니다.
- 결과 반환 : 검색 조건을 충족한 문서(레코드)를 반환합니다.