[javascript] Socket.io를 사용하여 실시간 검색 기능을 어떻게 구현할 수 있나요?

Socket.io를 사용하여 실시간 검색 기능 구현하기

실시간 검색 기능은 사용자가 검색어를 입력할 때마다 실시간으로 검색 결과를 업데이트하는 기능입니다. 이를 통해 사용자는 더 빠르게 원하는 정보를 얻을 수 있습니다. 이 기능을 구현하기 위해 Socket.io라는 라이브러리를 사용할 수 있습니다. 이 라이브러리는 실시간 웹 애플리케이션을 쉽게 구현할 수 있도록 도와줍니다.

1. 서버 측 구현

Socket.io는 서버와 클라이언트 간의 양방향 통신을 지원합니다. 따라서 먼저 서버 측에서 실시간 검색을 처리하는 코드를 작성해야 합니다. 다음은 간단한 예시 코드입니다.

const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);

app.use(express.static('public'));

io.on('connection', (socket) => {
  socket.on('search', (keyword) => {
    // 검색 로직 구현
    const results = searchDatabase(keyword);
    socket.emit('searchResults', results);
  });
});

server.listen(3000, () => {
  console.log('서버가 시작되었습니다.');
});

function searchDatabase(keyword) {
  // 실제로 데이터베이스에서 검색을 수행하고 결과를 반환하는 로직 구현
}

위 코드에서는 Express와 Socket.io를 사용하여 간단한 웹 서버를 만들고 있습니다. 클라이언트가 search 이벤트를 발생시키면, 서버에서는 해당 이벤트를 받아서 검색 로직을 실행하고, 결과를 다시 클라이언트에게 searchResults 이벤트를 발송합니다.

2. 클라이언트 측 구현

서버 측 구현이 완료되었다면, 이제 클라이언트 측에서도 실시간 검색 기능을 구현할 차례입니다. 클라이언트 코드는 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
  <title>실시간 검색</title>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <h1>실시간 검색</h1>
  <input type="text" id="keywordInput">
  <ul id="searchResults"></ul>

  <script>
    const socket = io();

    document.getElementById('keywordInput').addEventListener('input', (event) => {
      const keyword = event.target.value;
      socket.emit('search', keyword);
    });

    socket.on('searchResults', (results) => {
      const searchResultsElement = document.getElementById('searchResults');
      searchResultsElement.innerHTML = '';

      results.forEach((result) => {
        const li = document.createElement('li');
        li.textContent = result;
        searchResultsElement.appendChild(li);
      });
    });
  </script>
</body>
</html>

위 코드에서는 Socket.io 클라이언트 라이브러리를 이용하여 실시간 통신을 수행하고 있습니다. 사용자가 검색어를 입력할 때마다 input 이벤트가 발생하면, 해당 이벤트를 서버에게 전달하여 검색 결과를 받아옵니다. 검색 결과는 <ul id="searchResults"> 요소에 동적으로 출력됩니다.

3. 실행

위 코드를 서버와 클라이언트에 각각 저장한 후, 서버를 실행합니다. 그리고 웹 브라우저를 열어 http://localhost:3000 주소로 접속합니다. 검색어를 입력하면 실시간으로 검색 결과가 업데이트되는 것을 확인할 수 있습니다.

이처럼 Socket.io를 활용하면 쉽게 실시간 검색 기능을 구현할 수 있습니다.

참고 자료