웹소켓은 실시간 양방향 통신을 한다는 특징으로 인해 실시간 채팅이나 게임 등에 자주 사용되는 프로토콜입니다. 이번 글에서는 React에서 웹소켓 통신을 구현하는 방법 중 하나인 Custom Hook을 활용하는 방법에 대해 알아보겠습니다.
1. React와 웹소켓 라이브러리 설치하기
먼저 프로젝트 폴더에서 다음 명령어를 사용하여 React와 웹소켓 라이브러리를 설치해야 합니다.
npm install react react-dom
npm install websocket
2. Custom Hook 작성하기
Custom Hook을 사용하여 웹소켓 통신을 구현하기 위해 다음과 같이 useWebSocket
함수를 작성합니다.
import { useEffect, useState } from 'react';
import WebSocket from 'websocket';
const useWebSocket = (url) => {
const [socket, setSocket] = useState(null);
useEffect(() => {
const ws = new WebSocket(url);
ws.onopen = () => {
console.log('WebSocket connected');
};
ws.onmessage = (event) => {
console.log('Received message:', event.data);
};
ws.onclose = () => {
console.log('WebSocket disconnected');
};
setSocket(ws);
// Cleanup function when component unmounts
return () => {
ws.close();
};
}, [url]);
return socket;
};
export default useWebSocket;
위 코드에서는 useWebSocket
함수가 url
을 매개변수로 받아 웹소켓 연결을 수행합니다. 웹소켓 객체의 onopen
, onmessage
, onclose
이벤트를 이용하여 연결 상태를 확인하고 메시지를 수신할 수 있습니다. 컴포넌트가 언마운트되거나 url
이 변경되면 정리 함수를 통해 웹소켓 연결을 종료합니다.
3. 컴포넌트에서 Custom Hook 사용하기
이제 컴포넌트에서 Custom Hook을 사용하여 웹소켓 통신을 구현해보겠습니다.
import React from 'react';
import useWebSocket from './useWebSocket';
const WebSocketComponent = () => {
const url = 'ws://example.com'; // 웹소켓 서버 주소
const socket = useWebSocket(url);
const sendMessage = (message) => {
if (socket && socket.readyState === WebSocket.OPEN) {
socket.send(message);
}
};
return (
<div>
<h1>WebSocket Example</h1>
<button onClick={() => sendMessage('Hello, WebSocket!')}>Send Message</button>
</div>
);
};
export default WebSocketComponent;
위 코드에서는 useWebSocket
Custom Hook을 호출하여 웹소켓 연결을 생성합니다. 그리고 sendMessage
함수를 통해 메시지를 전송할 수 있습니다. 클릭 이벤트가 발생하면 ‘Hello, WebSocket!’ 메시지가 서버에 전송됩니다.
마무리
이번에는 Custom Hook을 활용하여 React에서 웹소켓 통신을 구현하는 방법에 대해 살펴보았습니다. Custom Hook을 사용함으로써 코드를 재사용하고 명확하게 구조화할 수 있습니다. React의 강력한 기능과 웹소켓의 실시간 통신 기능을 활용해 다양한 웹 애플리케이션을 개발해보세요.
참고 자료
#React #웹소켓