[javascript] Fuse.js를 이용한 토론 게시판 검색 기능 구현 방법

Fuse.js는 JavaScript에서 사용할 수 있는 가볍고 강력한 검색 라이브러리입니다. 이를 사용하여 토론 게시판에 검색 기능을 구현하는 방법에 대해 알아보겠습니다.

Fuse.js 라이브러리 설치

Fuse.js는 npm을 통해 간편하게 설치할 수 있습니다. 아래의 명령어를 실행하여 Fuse.js를 설치해줍니다.

npm install fuse.js

Fuse.js 검색 객체 생성

검색 기능을 구현하기 위해 Fuse.js에서 제공하는 검색 객체를 생성해야 합니다. 이 객체를 사용하여 실제 검색을 수행하고 결과를 가져올 수 있습니다.

const Fuse = require('fuse.js');

// 검색 대상 데이터
const discussionPosts = [
  {
    id: 1,
    title: 'React vs Vue',
    content: 'Which JavaScript framework should I choose?'
  },
  {
    id: 2,
    title: 'Is JavaScript a compiled language?',
    content: 'I heard conflicting opinions about this topic.'
  },
  // 나머지 게시물들...
];

// Fuse.js 옵션 설정
const options = {
  keys: ['title', 'content'],
};

// Fuse.js 검색 객체 생성
const fuse = new Fuse(discussionPosts, options);

위의 코드에서 discussionPosts는 검색 대상이 되는 토론 게시물의 배열입니다. options는 검색하고자 하는 속성을 지정하는 옵션입니다. 위의 예제에서는 titlecontent 속성을 검색 대상으로 지정했습니다.

검색 수행 및 결과 가져오기

Fuse.js 검색 객체를 이용하여 검색을 수행하고, 결과를 가져올 수 있습니다.

const searchTerm = 'JavaScript framework'; // 검색어

const searchResults = fuse.search(searchTerm);

console.log(searchResults);

위의 코드에서 searchTerm에는 실제 검색어가 들어갑니다. fuse.search() 메소드를 사용하여 검색을 수행한 후, 결과를 searchResults 변수에 저장합니다. 이후에는 검색 결과를 원하는대로 활용할 수 있습니다.

검색 결과 활용하기

검색 결과를 활용하여 토론 게시판에 검색 결과를 표시할 수 있습니다. 예를 들어, 검색 결과를 화면에 리스트 형태로 출력하는 방법을 알아보겠습니다.

const searchResultsElement = document.getElementById('search-results'); // 검색 결과 출력 영역

// 검색 결과를 화면에 출력하는 함수
function renderSearchResults(results) {
  if (results.length === 0) {
    searchResultsElement.innerHTML = '검색 결과가 없습니다.';
    return;
  }

  const searchResultsHTML = results.map(result => `
    <li>
      <h3>${result.item.title}</h3>
      <p>${result.item.content}</p>
    </li>
  `).join('');

  searchResultsElement.innerHTML = `<ul>${searchResultsHTML}</ul>`;
}

// 검색어 입력 이벤트 핸들러
function handleSearchInput(event) {
  const searchTerm = event.target.value;
  const searchResults = fuse.search(searchTerm);
  renderSearchResults(searchResults);
}

// 검색어 입력 이벤트 리스너 등록
const searchInput = document.getElementById('search-input');
searchInput.addEventListener('input', handleSearchInput);

위의 코드에서 renderSearchResults() 함수는 검색 결과를 화면에 출력하는 역할을 합니다. results 매개변수로 검색 결과를 받아 각 결과를 리스트 형태의 HTML로 변환한 후, searchResultsElement에 출력합니다.

또한, handleSearchInput() 함수는 검색어 입력 이벤트가 발생할 때마다 호출되어 검색을 수행하고 결과를 화면에 표시합니다. 이 함수는 검색어 입력 필드(searchInput)의 input 이벤트에 등록되어 동작합니다.

위의 예제에서는 검색어 입력 필드와 검색 결과 출력 영역의 HTML 요소를 JavaScript로 가져와야 합니다. 이를 위해 document.getElementById() 메소드를 사용했습니다. 이 부분은 실제 웹 애플리케이션의 구조에 맞게 수정해야 합니다.

결론

위의 방법을 따라 Fuse.js를 이용하여 토론 게시판에서 검색 기능을 구현할 수 있습니다. Fuse.js는 간편한 사용법과 강력한 검색 기능으로 효과적으로 검색을 처리할 수 있는 라이브러리입니다. Fuse.js 공식 문서를 참고하면 더 다양한 기능과 사용법을 알아볼 수 있습니다.

참고 자료