Search 개념
Backstage Search의 핵심 개념들을 소개하는 문서예요.
출처: 문서
본문
Backstage Search를 사용하면 Backstage 생태계에서 찾고 있던 정확한 정보를 찾을 수 있어요.
시작하려면 다음 핵심 개념들에 익숙해지는 것이 좋아요.
-
Search 엔진(Search Engines)
-
쿼리 변환기(Query Translators)
-
문서와 인덱스(Documents and Indices)
-
콜레이터(Collators)
-
데코레이터(Decorators)
-
스케줄러(The Scheduler)
-
검색 페이지(The Search Page)
-
검색 컨텍스트와 컴포넌트(Search Context and Components)
Search 엔진
Backstage Search는 그 자체가 검색 엔진은 아니에요. 대신 Backstage 인스턴스와 선택한 검색 엔진 사이에 인터페이스를 제공해요. 더 구체적으로 말하면, SearchEngine은 구체적인 구현들이 서로 다른 검색 엔진(Elasticsearch, Lunr, Solr 등)과의 통신을 처리하는 인터페이스예요. 이 추상화는 조직의 요구를 지원하기 위해 존재해요.
기본적으로 Backstage Search에는 Lunr 위에 구축된 인메모리(in-memory) 검색 엔진 구현이 함께 제공돼요.
쿼리 변환기
자신만의 검색 엔진을 가져올 수 있고, 검색 엔진들은 저마다 고유하고 강력한 쿼리 언어를 갖고 있기 때문에, 추상적인 검색 쿼리(검색어, 필터, 문서 유형 포함)를 특정 검색 엔진에 맞는 구체적인 검색 쿼리로 변환하는 계층이 필요해요.
검색 엔진에는 검색어와 필터를 기초적으로 변환하는 단순한 변환기가 함께 제공되지만, 조직의 맥락에서 검색 결과를 조정하기 위해 자신만의 변환기를 제공하고 싶을 수도 있어요.
문서와 인덱스
"문서(Document)"는 검색으로 찾을 수 있는 무언가를 나타내는 추상적인 개념이에요. 문서는 소프트웨어 엔티티, TechDocs 페이지 등을 나타낼 수 있어요. 문서는 메타데이터 필드로 구성되며, 최소한 제목(title), 본문(text), 위치(location, URL 형태)를 포함해요.
인덱스(index)는 주어진 유형의 그러한 문서들의 모음이에요.
콜레이터
무언가를 검색할 수 있어야 하잖아요! 콜레이터(Collator)는 무엇이 검색될 수 있는지 정의하는 방법이에요. 구체적으로 말하면, 최소 필드 집합(문서 제목, 위치, 본문 포함)을 충족하면서 콜레이터 자체가 정의한 다른 필드를 얼마든지 포함할 수 있는 문서들의 읽기 가능한 객체 스트림이에요. 하나의 콜레이터는 한 유형의 문서를 정의하고 수집하는 책임을 져요.
Catalog 백엔드 같은 일부 플러그인은 소위 "기본(default)" 콜레이터 팩토리를 제공하며, 이를 사용하면 Backstage 전체를 빠르게 검색할 수 있어요.
데코레이터
때로는 검색 인덱스의 문서 집합에 콜레이터가 알지 못하는 추가 정보를 더하고 싶을 때가 있어요. 예를 들어 Software Catalog는 소프트웨어 엔티티에 대해 알지만, 그 사용량이나 품질에 대해서는 알지 못할 수 있어요.
데코레이터(Decorator)는 인덱싱 과정에서 콜레이터(읽기 스트림)와 인덱서(쓰기 스트림) 사이에 위치하는 변환 스트림이에요. 문서가 콜레이트되고 인덱싱될 때 문서에 추가 필드를 더하는 데 사용할 수 있어요. 이 추가 메타데이터는 검색 결과에 가중치를 주거나 Backstage 인스턴스의 검색 경험을 개선하는 데 사용될 수 있어요.
추가 메타데이터를 더하는 것 외에도, 데코레이터는 (다른 변환 스트림처럼) 인덱스 시점에 메타데이터를 제거하거나, 필터링하거나, 추가 문서를 더하는 데도 사용할 수 있어요.
스케줄러
검색 인덱스를 구축하고 유지하는 방법은 여러 가지가 있지만, Backstage Search는 예약(schedule)에 따라 인덱스를 완전히 다시 구축하는 방식을 선택해요. 서로 다른 콜레이터는 소스 정보가 업데이트되는 빈도에 따라 서로 다른 간격으로 새로고침되도록 구성할 수 있어요. 검색 인덱싱이 여러 백엔드 노드에 분산될 때, 충돌을 방지하기 위한 조정은 일반적으로 분산된 SchedulerServiceTaskRunner가 처리해요.
검색 페이지
검색 페이지는 아주 맞춤형인 것이에요. 모든 Backstage 인스턴스가 동일한 인터페이스를 원하는 것은 아니니까요! 검색 경험을 마음껏 사용자 지정할 수 있도록, Search Plugin이 상태 관리와 기타 검색 로직을 대신 처리하지만, 검색 페이지의 레이아웃 대부분은 Backstage App에서 정의한 검색 페이지 컴포넌트에 있어요.
간단한 검색 페이지의 예시는 getting started 문서를 확인하세요.
검색 컨텍스트와 컴포넌트
검색 페이지 같은 검색 경험은 얼마든지 많은 검색 컴포넌트로 구성되며, 모든 컴포넌트는 검색 컨텍스트를 사용해 연결돼요.
각 검색 경험의 컨텍스트는 검색어, 필터, 유형, 결과, 그리고 페이지네이션을 처리하기 위한 페이지 커서 같은 세부 정보로 구성돼요. 서로 다른 컴포넌트는 이 컨텍스트를 서로 다른 방식으로 사용해요. 예를 들어 <SearchBar />는 검색어를 설정할 수 있고, <SearchFilter /> 컴포넌트는 필터를 설정할 수 있으며, 검색 결과는 <SearchResult /> 컴포넌트로 표시할 수 있어요.
<SearchResult />와 <SearchFilter /> 컴포넌트는 그 자체로 확장 가능하다는 점이 특별해요. 이 컴포넌트들을 확장하는 방법의 예시는 getting started 문서를 확인하세요.
더 많은 사용자 지정이 필요하다면 검색 컨텍스트를 다른 React 컨텍스트처럼 사용해서 나만의 사용자 지정 검색 컴포넌트를 만들 수 있어요.