Firebase 검색을 위한 컬럼 만들기

2:07 pm

파이어베이스를 사용하면 검색 기능을 활용할 수 없다. 원인은 like문을 사용하지 않고 있기 때문이다. 따라서 별도의 검색을 위한 서버를 만들어두고 사용하는 방법을 권장하고 있다.

그런데 나는 이정도로 서버를 운영할 비용이 부족하다.

따라서 조금 편법으로 검색을 위한 컬럼을 만들어 보려고 한다.

내가 생각한 발상은 이렇다.

  1. 파이어베이스에는 배열 타입의 컬럼이 존재한다.
  2. 파이어베이스에는 array-contains 라는 쿼리가 존재한다.
  3. 그러면 검색어를 모두 하나의 컬럼에 배열로 넣어두고 쿼리를 쓰면 되는것이 아닌가?

물론 퍼포먼스가 떨어질 가능성도 있다. 하지만, 앱에서 사용할 데이터에 이 컬럼을 제외해버리면 될 것이라고 가정했다.

그래서 우선 이 함수를 만들었다.

function createSearchStringArray(text: string) {
  const result = [];
  const charArray = text.split('');

  for (
    let searchKeywordLength = 1;
    searchKeywordLength <= text.length;
    searchKeywordLength++
  ) {
    // 시작 인덱스 설정
    for (
      let startIndex = 0;
      startIndex <= charArray.length - searchKeywordLength;
      startIndex++
    ) {
      const endIndex = startIndex + searchKeywordLength - 1;
      result.push(charArray.slice(startIndex, endIndex + 1).join(''));
    }
  }

  return result;
}

console.log(createSearchStringArray("안녕하세요"));

결과는 이랬다.

[LOG]: ["안", "녕", "하", "세", "요", "안녕", "녕하", "하세", "세요", "안녕하", "녕하세", "하세요", "안녕하세", "녕하세요", "안녕하세요"] 

이제 검색 기능을 추가할 수 있게 되었다.

데이터가 점점 많아지면 모든 데이터를 불러와서 필터링 하는 것과 이렇게 컬럼으로 하는 방식 중에 어떤 부분이 더 나은지는 비교가 필요해 보인다.