Fess로 만드는 Elasticsearch 기반 검색 서버 〜 롤 기반 검색편

들어가며

본 기사에서는 Fess의 특징적인 기능 중 하나이기도 한 롤 기반 검색 기능에 대해 소개합니다.

본 기사에서는 Fess 15.3.0을 이용하여 설명합니다. Fess 구축 방법에 관해서는도입편을 참조하세요.

대상 독자

  • 포털 사이트 등 인증이 있는 시스템에서 검색 시스템을 구축해 보고 싶은 분

  • 열람 권한별로 검색하는 환경을 구축하고 싶은 분

필요한 환경

이 기사의 내용에 관해서는 다음 환경에서 동작 확인을 하고 있습니다.

  • Ubuntu 22.04

  • OpenJDK 21

롤 기반 검색

Fess의 롤 기반 검색이란, 인증된 사용자의 인증 정보를 기반으로 검색 결과를 분류하는 기능입니다. 예를 들어, 영업부 롤을 가진 영업 담당자 A는 검색 결과에 영업부 롤의 정보가 표시되지만, 영업부 롤을 가지지 않은 기술 담당자 B는 검색해도 그것이 표시되지 않습니다. 이 기능을 이용하는 것으로 포털이나 싱글 사인온 환경에서 로그인하고 있는 사용자가 소속된 부서별이나 직급별 등으로 검색을 실현할 수 있습니다.

Fess의 롤 기반 검색은 기본적으로 Fess에서 관리하는 사용자 정보를 기반으로 검색 결과 분류를 할 수 있습니다. 그 외에도 LDAP이나 Active Directory의 인증 정보와 연계하여 이용할 수도 있습니다. 또한, 그러한 인증 시스템 외에도 롤 정보를 다음 장소에서 취득할 수 있습니다.

  1. 리퀘스트 파라미터

  2. 리퀘스트 헤더

  3. 쿠키

  4. J2EE의 인증 정보

이용 방법으로는 포털 서버나 에이전트형 싱글 사인온 시스템에서는 인증 시 Fess가 가동되고 있는 도메인과 경로에 대해 쿠키로 인증 정보를 저장하는 것으로 롤 정보를 Fess에 전달할 수 있습니다. 또한, 리버스 프록시형 싱글 사인온 시스템에서는 Fess로의 접속 시 리퀘스트 파라미터나 리퀘스트 헤더에 인증 정보를 부가하는 것으로 Fess에서 롤 정보를 취득할 수 있습니다. 이와 같이 다양한 인증 시스템과 연계하는 것으로 사용자별로 검색 결과를 분류할 수 있습니다.

롤 기반 검색을 이용하기 위한 설정

Fess 15.3.0이 설치되어 있는 것으로 합니다. 아직 설치하지 않은 경우도입편을 참고하여 설치하세요.

이번에는 Fess의 사용자 관리 기능을 이용한 롤 검색을 설명합니다.

설정 개요

이번에는 영업부(sales)와 기술부(eng) 2개의 롤을 작성합니다. 그리고 taro 사용자는 sales 롤에 속하여 https://www.n2sm.net/ 의 검색 결과를 얻을 수 있도록 하고, hanako 사용자는 eng 롤에 속하여 https://fess.codelibs.org/ 의 검색 결과를 얻을 수 있도록 합니다.

롤 작성

먼저 관리 화면에 접속합니다. http://localhost:8080/admin/

사용자 > 롤 > 신규 작성에서 이름에 “sales”를 입력하고 sales 롤을 작성합니다. 마찬가지로 eng 롤도 작성합니다.

롤 일람 image0

크롤러용 롤 작성

사용자 > 롤 > sales > 새로운 크롤러용 롤 작성을 클릭합니다. 이름에 “영업부”를 입력하고 값은 “sales” 그대로 [작성]을 클릭합니다. 그러면 크롤러 > 롤 일람에 영업부 설정이 추가됩니다.

마찬가지로 eng 롤의 크롤러용 롤 이름을 “기술부”로 등록합니다.

크롤러용 롤 일람 image1

사용자 작성

사용자 > 사용자 > 신규 작성에서 taro 사용자와 hanako 사용자를 아래 그림의 설정으로 작성합니다.

타로 하나코
사용자명 taro hanako
비밀번호 taro hanako
sales eng

등록 사용자 확인

이번 설정으로 admin, taro, hanako 3명의 사용자로 Fess에 로그인할 수 있는 상태가 되었습니다. 순서대로 로그인할 수 있는지 확인하세요. http://localhost:8080/admin/ 에 접속하여 admin 사용자로 로그인하면 평소와 같이 관리 화면이 표시됩니다. 다음으로 admin 사용자를 로그아웃합니다. 관리 화면 우측 상단의 버튼을 클릭하세요.

로그아웃 버튼 image2

사용자명과 비밀번호를 입력하고 taro나 hanako로 로그인하세요. 로그인이 성공하면 http://localhost:8080/ 의 검색 화면이 표시됩니다.

크롤 설정 추가

크롤 대상을 등록합니다. 이번에는 영업부 롤의 사용자는 https://www.n2sm.net/ 만을 검색할 수 있고, 기술부 롤의 사용자는 https://fess.codelibs.org/ 만을 검색할 수 있도록 합니다. 이러한 크롤 설정을 등록하기 위해 크롤러 > 웹 > 신규 작성을 클릭하여 웹 크롤 설정을 작성하세요. 이번에는 아래와 같은 설정으로 합니다. 그 외는 기본값입니다.

N2SM Fess
이름 N2SM Fess
URL https://www.n2sm.net/ https://fess.codelibs.org/
크롤 대상 URL https://www.n2sm.net/.* https://fess.codelibs.org/.*
최대 접속 수 10 10
간격 3000밀리초 3000밀리초
영업부 기술부

크롤 시작

크롤 설정 등록 후, 시스템 > 스케줄러 > Default Crawler에서 [지금 시작]을 클릭합니다. 크롤이 완료될 때까지 잠시 기다립니다.

검색

크롤 완료 후, http://localhost:8080/ 에 접속하여 로그인하지 않은 상태에서 “fess” 등의 단어를 검색하여 검색 결과가 표시되지 않는 것을 확인하세요. 다음으로 taro 사용자로 로그인하여 마찬가지로 검색하세요. taro 사용자는 sales 롤을 가지므로 https://www.n2sm.net/ 의 검색 결과만 표시됩니다.

sales 롤에서의 검색 화면 image3

taro 사용자를 로그아웃하고 hanako 사용자로 로그인하세요. 이전과 마찬가지로 검색하면 hanako 사용자는 eng 롤을 가지므로 https://fess.codelibs.org/ 의 검색 결과만 표시됩니다.

eng 롤에서의 검색 화면 image4

정리

Fess의 보안 기능 중 하나인 롤 기반 검색에 대해 소개했습니다. J2EE의 인증 정보를 이용한 롤 기반 검색을 중심으로 설명했지만, Fess로의 인증 정보 전달은 범용적인 구현이므로 다양한 인증 시스템에 대응할 수 있다고 생각합니다. 사용자 속성별로 검색 결과를 분류할 수 있으므로 사내 포털 사이트나 공유 폴더 등의 열람 권한별로 검색이 필요한 시스템도 실현하는 것이 가능합니다.

참고 자료