개요
이 페이지에서는 Fess의 주요 기능과 아키텍처를 컴포넌트 관점에서 설명합니다. Fess는 검색 시스템 구축을 용이하게 하기 위해 모듈화된 설계를 채택하고 있습니다.
전체 아키텍처
Fess는 다음과 같은 주요 컴포넌트로 구성됩니다:
주요 컴포넌트
1. 크롤러 서브시스템
크롤러 서브시스템은 다양한 데이터 소스에서 문서를 수집하는 역할을 담당합니다.
주요 클래스 및 기능:
Crawler
역할: 크롤 처리의 중심이 되는 클래스
주요 기능:
웹사이트, 파일 시스템, 데이터 스토어로부터 문서 수집
크롤 설정에 기반한 대상 선별
크롤 작업 실행 관리
크롤 결과의 세션 관리
실행 방식:
스케줄러에 의한 정기 실행
관리 화면에서의 수동 실행
명령줄에서의 실행
WebCrawler
역할: 웹사이트 크롤링 처리
주요 기능:
HTML 페이지 가져오기 및 분석
링크 추출 및 추적
JavaScript 실행 사이트 지원
인증이 필요한 사이트 지원 (BASIC/DIGEST/NTLM/FORM)
robots.txt 준수
FileCrawler
역할: 파일 시스템 크롤링 처리
주요 기능:
로컬 파일 시스템 순회
네트워크 드라이브(SMB/CIFS) 액세스
파일 형식 판정 및 적절한 파서 선택
권한 기반 액세스 제어
DataStoreCrawler
역할: 외부 데이터 스토어 크롤링 처리
주요 기능:
데이터베이스로부터 데이터 취득
클라우드 스토리지(Google Drive, Dropbox, Box 등) 연동
그룹웨어(Office 365, Slack, Confluence 등) 연동
플러그인에 의한 확장성
CrawlConfig
역할: 크롤 설정 관리
주요 기능:
크롤 대상 URL 또는 경로 정의
크롤 깊이 제한
크롤 간격 설정
제외 패턴 지정
레이블 부여
2. 인덱싱 서브시스템
인덱싱 서브시스템은 수집한 문서를 검색 가능한 형식으로 변환합니다.
DocumentParser
역할: 문서 분석 및 텍스트 추출
주요 기능:
Apache Tika를 이용한 다양한 파일 형식 지원
메타데이터 추출
문자 인코딩 자동 감지
언어 자동 판별
Indexer
역할: OpenSearch/Elasticsearch에 인덱스 등록
주요 기능:
문서 인덱스 생성
벌크 인덱싱을 통한 고속화
인덱스 최적화
오래된 문서 삭제
FieldMapper
역할: 필드 매핑 정의
주요 기능:
문서 필드 정의
커스텀 필드 추가
필드 타입 지정(text, keyword, date 등)
다국어 지원 애널라이저 설정
3. 검색 서브시스템
검색 서브시스템은 사용자의 검색 쿼리를 처리하고 결과를 반환합니다.
SearchService
역할: 검색 처리의 중심
주요 기능:
쿼리 분석 및 최적화
OpenSearch/Elasticsearch로의 쿼리 실행
검색 결과 랭킹
패싯 검색 지원
하이라이트 표시
QueryProcessor
역할: 검색 쿼리 전처리
주요 기능:
쿼리 정규화
동의어 확장
불용어 처리
쿼리 보정
SuggestService
역할: 추천 기능 제공
주요 기능:
입력 자동완성 후보 생성
인기 검색 키워드 제공
커스텀 사전 활용
RankingService
역할: 검색 결과 랭킹 조정
주요 기능:
문서 부스팅
필드 부스팅
커스텀 스코어링
관련도 조정
4. 관리 서브시스템
관리 서브시스템은 Fess의 설정과 운영을 관리합니다.
AdminConsole
역할: 웹 기반 관리 인터페이스
주요 기능:
크롤 설정 관리
스케줄러 설정
사용자 및 역할 관리
시스템 설정
로그 참조
Scheduler
역할: 작업 스케줄 관리
주요 기능:
크롤 작업 정기 실행
인덱스 최적화 정기 실행
로그 로테이션
Cron 표현식을 사용한 스케줄 설정
BackupManager
역할: 백업 및 복원
주요 기능:
설정 데이터 백업
인덱스 스냅샷
복원 기능
자동 백업 스케줄링
5. 인증 및 권한 서브시스템
인증 및 권한 서브시스템은 보안과 액세스 제어를 관리합니다.
AuthenticationManager
역할: 사용자 인증 관리
주요 기능:
로컬 인증
LDAP/Active Directory 연동
SAML 연동
OpenID Connect 연동
역할 기반 액세스 제어(RBAC)
RoleManager
역할: 역할 및 액세스 권한 관리
주요 기능:
역할 정의
사용자에 대한 역할 할당
문서 레벨 액세스 제어
검색 결과 필터링
6. API 계층
API 계층은 외부 시스템과의 연동을 제공합니다.
SearchAPI
역할: 검색 API 제공
주요 기능:
REST API를 통한 검색
JSON 형식 응답
OpenSearch 호환
GSA(Google Search Appliance) 호환 API
AdminAPI
역할: 관리 API 제공
주요 기능:
크롤 설정의 CRUD 작업
인덱스 관리
스케줄러 제어
시스템 정보 취득
7. 데이터 스토리지
데이터 스토리지는 Fess의 데이터 영속화를 담당합니다.
ConfigStore
역할: 설정 데이터 저장
주요 기능:
크롤 설정 영속화
시스템 설정 저장
사용자 및 역할 정보 관리
H2 데이터베이스 또는 외부 DB 사용
SearchEngine
역할: 검색 엔진과의 연동
주요 기능:
OpenSearch/Elasticsearch와의 통신
인덱스 관리
쿼리 실행
클러스터링 지원
플러그인 아키텍처
Fess는 플러그인을 통한 확장이 가능합니다.
DataStore 플러그인
역할: 외부 데이터 소스 연결
제공되는 플러그인:
Atlassian(Confluence/Jira)
Box
CSV
Database
Dropbox
Git/GitBucket
Google Drive
Office 365
S3
Slack
기타
Theme 플러그인
역할: 검색 화면 커스터마이징
제공되는 플러그인:
Simple Theme
Classic Theme
Ingester 플러그인
역할: 인덱스 데이터의 전처리 및 후처리
제공되는 플러그인:
Logger
NDJSON
Script 플러그인
역할: 스크립트를 통한 커스터마이징
제공되는 플러그인:
Groovy
OGNL
설정 관리
FessConfig
역할: 시스템 설정의 일원화 관리
주요 설정 항목:
시스템 전반 설정
크롤 설정
검색 설정
인증 설정
알림 설정
성능 설정
DynamicProperties
역할: 동적 설정 관리
주요 기능:
실행 시 설정 변경
환경 변수 활용
프로파일별 설정
요약
Fess는 이러한 컴포넌트들이 연계함으로써 강력한 전문 검색 시스템을 실현하고 있습니다. 각 컴포넌트는 느슨한 결합 설계로 되어 있으며, 필요에 따라 커스터마이징 및 확장이 가능합니다.
더 자세한 개발자 정보는 다음을 참조하세요: