๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โš’ Backend/Node.js

[Node.js] ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์•ฑ ๋งŒ๋“ค์–ด๋ณด๊ธฐ 1 - Websocket ์ด์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ (feat. Websocket) (Build a real-time chatapp 1 - Implement backend with websocket)

by Fomagran ๐Ÿ’ป 2022. 7. 28.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋Š˜์€ Node.js์—์„œ Websocket์„ ์ด์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~

 

(๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ๋žตํ•˜๊ณ  ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์€ ์—ฌ๊ธฐ ์—์„œ ํ™•์ธํ•ด ์ฃผ์„ธ์š”!)

 


Tutorial

 


Install

 

express

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ

 

npm install express@4.18.1

 

cors

 

HTTP์˜ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ

 

npm install cors@2.8.5

 

 

nodemon

 

์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์žฌ์‹คํ–‰ ๋˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ

 

npm install nodemon@2.0.14

 

socket.io

 

์‹ค์‹œ๊ฐ„ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ

 

npm install socket.io@4.5.1

 

Implemet a websocket

 

์•„๋ž˜๋Š” ์‹ค์‹œ๊ฐ„ ์›น์†Œ์ผ“์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋“ค์ž…๋‹ˆ๋‹ค.

 

const express = require("express");
const app = express();
const http = require("http");
const WebSocket = require("ws");
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
const port = 3001;

 

์šฐ์„  ์›น ์†Œ์ผ“ ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค.

 

wss.on("connection", (ws) => {
  ...

 

๊ทธ ๋‹ค์Œ message๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…ํ•ด ์ค๋‹ˆ๋‹ค.

 

	ws.on("message", (message) => {
    	...

 

์›น ์„œ๋ฒ„ ์†Œ์ผ“์˜ ํด๋ผ์ด์–ธํŠธ๋“ค๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ forEach ํ•จ์ˆ˜๋กœ ๋ชจ๋‘ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.

 

    wss.clients.forEach(function each(client) {
    	...

 

๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ์˜ ์ค€๋น„ ์ƒํƒœ๊ฐ€ ์›น์†Œ์ผ“์ด OPEN์ธ ์ƒํƒœ๋ผ๋ฉด ์ˆ˜์‹ ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ JSON์œผ๋กœ ํŒŒ์‹ฑํ•œ ๋’ค ํŒŒ์‹ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ stringํ™” ์‹œ์ผœ์„œ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

      if (client.readyState === WebSocket.OPEN) {
        let parse = JSON.parse(message);
        let stringify = JSON.stringify(parse);
        client.send(stringify);
      }

 

์„œ๋ฒ„๊ฐ€ ์ž˜ ์ž‘๋™๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

app.get("/", (req, res) => {
  res.send("Hello World!");
});

server.listen(port, () => console.log(`Server running on ${port}`));

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜ ์ž‘๋™๋˜๋Š”๊ตฐ์š”.

 


index.js

 

const express = require("express");
const app = express();
const http = require("http");
const WebSocket = require("ws");
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
const port = 3001;

wss.on("connection", (ws) => {
  ws.on("message", (message) => {
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        let parse = JSON.parse(message);
        let stringify = JSON.stringify(parse);
        client.send(stringify);
      }
    });
  });
});

app.get("/", (req, res) => {
  res.send("Hello World!");
});

server.listen(port, () => console.log(`Server running on ${port}`));

Source Code

 

 

GitHub - fomagran/ChattingAppFullStack

Contribute to fomagran/ChattingAppFullStack development by creating an account on GitHub.

github.com

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€