[React] 실시간 채팅 만들기

2022. 6. 25. 15:48·React/실험실
반응형

0. 들어가며

앞서 채팅방편을 보지 않으셨다면 먼저 보고 오시는 것을 추천합니다.

1. [Node.js] Zoom 클론코딩 - 세팅편

2. [Node.js] Zoom 클론코딩 - 채팅편

3. [Node.js] Zoom 클론코딩 - 채팅방편

 

기본적인 Socket IO에 대해서 어느 정도 공부가 되었다고 판단해서 React에서 간단한 채팅 기능을 만들 생각이다.

결국 React에서 사용하는 것이 목적이기 때문! 

 

1. 구성하기 

React 

 npm install socket.io-client

Socket IO는 React에서 기본적으로 제공하는 패키지가 당연히 아니므로 설치해준다. 

 

Node 

npm install express cors
npm install nodemon @babel/core @babel/cli @babel/node @babel/preset-env -D

기본적인 Node 서버를 구성하기 위해서 필요한 패키지를 다운로드하였다. 

 

npm install socket.io

Socket IO도 당연히 설치해준다. 

 

그 외 기본적인 세팅은 세팅편을 참고! 

 

2. 서버 작업하기 

import express from "express";
import http from "http";
import SocketIO from "socket.io";

const app = express();
const webServer = http.createServer(app);
const socketServer = SocketIO(webServer, {
  cors: {
    origin: "*",
    credentials: true,
  },
});

socketServer.on("connection", (socket) => {
  socket.on("message", (message) => {
    socketServer.emit("message", message);
  });
});

webServer.listen(4000, () => {
  console.log("Listening on port 4000");
});

express로 서버를 실행하면 socket 서버는 실행할 수 없으니 http 패키지를 사용해서 서버를 열어주고 

그 안에 express와 socket.io를 실행시켰다. 

 

이때, cors를 사용하지 않으면 프론트에서 통신을 보낼 때 cors 오류가 나기 때문에 서버에서 추가해주었다. 

 

3. React 작업하기

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

const socket = io.connect("http://localhost:4000");

function App() {
  const [chat, setChat] = useState([]);
  const [message, setMessage] = useState("");

  const sendMessageHandler = () => {
    socket.emit("message", message);
    setMessage("");
  };

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

  return (
    <div className="App">
      <div>
        <h1>Messages</h1>
        <ul>
          {chat.map((data, idx) => {
            return <li key={idx}>{data}</li>;
          })}
        </ul>
      </div>

      <div>
        <h1>Chat Box</h1>
        <input value={message} onChange={(e) => setMessage(e.target.value)} />
        <button onClick={sendMessageHandler}>Send Message</button>
      </div>
    </div>
  );
}

export default App;

socket.io-client를 사용해서 서버와 통신을 하고 그 외 사용 방식은 기존과 같았다. 

 

4. 깃허브

https://github.com/SeoJaeWan/react-node-socket-chat

 

GitHub - SeoJaeWan/react-node-socket-chat

Contribute to SeoJaeWan/react-node-socket-chat development by creating an account on GitHub.

github.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 실험실' 카테고리의 다른 글

[React] 나만의 리액트 만들기 - 1 - JSX 그리고 ReactDOM  (1) 2022.09.29
[React] Redux - toolkit 사용해보기 - todo  (1) 2022.07.23
[React] MobX - 비동기화  (0) 2022.05.30
[React] Webpack - 심화  (3) 2022.04.28
[React] Webpack - Plugin 사용  (0) 2022.04.18
'React/실험실' 카테고리의 다른 글
  • [React] 나만의 리액트 만들기 - 1 - JSX 그리고 ReactDOM
  • [React] Redux - toolkit 사용해보기 - todo
  • [React] MobX - 비동기화
  • [React] Webpack - 심화
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    영어독학
    ReactNative
    타입스크립트
    typescript
    타일러영어
    식물
    CCNA
    webpack
    redux
    next.js
    네이버 부스트캠프
    영어회화
    CSS
    리얼클래스
    javascript
    알고리즘
    Babel
    ChatGPT
    덤프
    다이소
    바질
    react
    리얼학습일기
    리액트
    네트워크
    자바스크립트
    프로그래머스
    Node.js
    바질 키우기
    Docker
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] 실시간 채팅 만들기
상단으로

티스토리툴바