Next.js에서 실시간 채팅 기능 구현하기

실시간 채팅 기능은 웹 애플리케이션에 있어서 매우 중요한 요소입니다. Next.js는 React 기반의 프레임워크로, 이를 사용하여 실시간 채팅 기능을 간편하게 구현할 수 있습니다. 이번 블로그 포스트에서는 Next.js를 사용하여 실시간 채팅 기능을 구현하는 방법에 대해 알아보겠습니다.

1. Socket.IO로 실시간 통신 설정하기

처음으로 해야 할 일은 클라이언트와 서버 간에 실시간 통신을 가능하게 하는 소켓 라이브러리인 Socket.IO를 설치하고 설정하는 것입니다. 이를 위해서는 다음과 같은 명령어를 사용합니다:

npm install socket.io express

2. Next.js 페이지 생성하기

다음으로는 실시간 채팅 기능을 담은 Next.js 페이지를 생성해야 합니다. pages 디렉토리에 chat.js 파일을 생성하고 다음과 같이 작성합니다:

import React, { useEffect, useState } from 'react';
import io from 'socket.io-client';

const socket = io("http://localhost:3000"); // 서버 주소로 변경

const Chat = () => {
  const [messages, setMessages] = useState([]);
  const [inputValue, setInputValue] = useState("");

  useEffect(() => {
    socket.on("message", (message) => {
      setMessages((prevMessages) => [...prevMessages, message]);
    });

    return () => {
      socket.off("message");
    };
  }, []);

  const sendMessage = () => {
    socket.emit("message", inputValue);
    setInputValue("");
  };

  return (
    <div>
      <ul>
        {messages.map((message, index) => (
          <li key={index}>{message}</li>
        ))}
      </ul>
      <input
        type="text"
        value={inputValue}
        onChange={(e) => setInputValue(e.target.value)}
      />
      <button onClick={sendMessage}>Send</button>
    </div>
  );
};

export default Chat;

3. 서버 측 코드 작성하기

마지막으로 서버 측 코드를 작성해야 합니다. Next.js는 서버 측 렌더링을 지원하므로, pages/api 디렉토리에 socket.js 파일을 생성하고 다음과 같이 작성합니다:

import { Server } from "socket.io";

export default function handler(req, res) {
  if (!res.socket.server.io) {
    const io = new Server(res.socket.server);
    io.on("connection", (socket) => {
      socket.on("message", (message) => {
        io.emit("message", message);
      });
    });

    res.socket.server.io = io;
  }

  res.end();
}

4. 채팅 기능 사용하기

이제 실시간 채팅 기능을 사용할 준비가 되었습니다! 웹 애플리케이션의 원하는 곳에 Chat 컴포넌트를 추가하면 됩니다. 예를 들어, pages/index.js 파일에 다음과 같이 작성할 수 있습니다:

import Chat from "./chat";

const HomePage = () => {
  return (
    <div>
      <h1>Welcome to my Next.js Chat App!</h1>
      <Chat />
    </div>
  );
};

export default HomePage;

마무리

위의 단계를 따라 실시간 채팅 기능을 구현할 수 있습니다. Next.js와 Socket.IO의 강력한 조합으로, 실시간 채팅을 쉽게 구현할 수 있습니다. 만약 더 다양한 기능을 추가하고 싶다면 Socket.IO 문서를 참고해보시기 바랍니다.

Happy coding!

Socket.IO 공식 문서 Next.js 공식 문서