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!