January 05, 2021
์ง๋ ์ฃผ ์ ์ ์ฐํด ํฌํจํ ๊ธฐ๊ฐ๋์ Socket.io ๋ฅผ ์ด๋ป๊ฒ ๋ด ์ฝ๋ชฝ์ด์ค ํ๋ก์ ํธ์ ์ ์ฉํด ๋ณผ๊น ๊ถ๋ฆฌํ๊ธฐ ์์ํ๊ณ ,
์ผ์์ผ๋ ์์ ํ ๋ง๋ฌด๋ฆฌ๋ ์๋์ง๋ง ๋ง๋ค์ด ๋ณผ ์ ์์๋ค.
์จ์ ํ ๋ด ๋จธ๋ฆฌ์์ ๋์จ ๊ฒ์ด ์๋๊ณ ์ ํ๋ธ์ ๋์ค๋ ์ธ๊ตญ์ธ ๊ฐ๋ฐ์๊ฐ ์คํธ๋ฆฌ๋ฐํ๋ ๊ธด ์๊ฐ์ ํํ ๋ฆฌ์ผ ์์์ ๋ค์ฏ ์ฐจ๋ก ๋ณด๋ฉฐ,
์ฝ๋๋ฅผ ์ณ ๊ฐ๋ฉฐ ์ดํดํด ๋ณด๋ค๊ฐ ๋ง์ง๋ง์ ๋ด๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก Socket.io ๊ณต์๋ฌธ์์ ์ค์ ๋ด ์ฝ๋ชฝ์ด์ค ํ๋ก์ ํธ์ ์ง์ ๋ด๊ฐ ์ดํดํ ๋ฐ๋ฅผ
์ฃผ์์ผ๋ก ์์ฑํด๊ฐ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๋ณ๋๋ก ์ฝ๋๋ฅผ ์ณ ๊ฐ๋ฉฐ ํ ์คํธ ํ์ ๋ ์ ๋์์ง๋ง ์ด๊ฑธ ๋ด ํ๋ก์ ํธ์ ์ด์ํด์ ์๋ํด ๋ณด๋ คํ๋ ์ ์๋์์๋๋ฐ,
์ด๋ ์๋ฌ ํธ๋ค๋ง ์ด๋ ๊ฒ์ํ๋ ๋ฒ ๊ทธ๋ฆฌ๊ณ socket.io ์ ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ฐ์ ํต์ ๋ฐฉ๋ฒ, ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๋ฒ ๋ฑ์ ๋ํด ์ ๋ฐ ์ด์์
์ต์ํด์ก๋ค.
๋ง๋ค์ด์ ๋!
์ด ์๋๋ผ, ์ด์ ๋ด ํ๋ก์ ํธ์ ๋๋ฅผ ์๊ฐ ํ๋ ํ์ด์ง๋ฅผ ๋ง๋ค ๋๊ฐ ๋์๋๋ฐ ๋ฐ๋ก.
์ด ์นํ์ด์ง๋ฅผ ๊ณต์ ํ๋ฉด์ ๋๋ฅผ ์๊ฐ ํ ๋ ์์ฒญ์๊ฐ ํด๋น ์๊ฐ ํ์ด์ง์์ ๋ด ์๊ฐ๋ฅผ ๋ณด๋ฉด์ ์ค์๊ฐ์ผ๋ก ์ฑํ ์ ํ ์ ์๊ฒ
์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋์ ๋ชฉํ์ด๋ค.
๋ฉ์ธ์ localhost:3000 ์ผ๋ก ์ฒ์ ํด๋ผ์ด์ธํธ์ ํ๋ฉด์ด ๋ ๋๋ง ๋๋ค.
chatterbox ๋ฅผ ๋ฆฌ์กํธ ํด๋์คํ ์ปดํฌ๋ํธ๋ก ๊ตฌํํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ๋ ์ง์ ๊ตฌํํ๋ค. (localhost:4000)
const express = require('express')
const cors = require('cors')
const app = express()
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()
const port = 4000
let data = {
results: [
{
username: 'FengSU๐ง',
text: 'ComongUS with Express.js๐',
roomname: 'MyROOM๐๐ผ',
date: new Date().toLocaleString(),
},
],
}
app.use(cors())
app.use(jsonParser)
app.get('/messages', (req, res) => {
res.status(200).send(data)
})
app.post('/messages', (req, res) => {
console.log(req.body)
data.results.push(req.body)
res.status(201).send(req.body)
})
app.listen(port, () => {
console.log(`COMONGUS app listening at http://localhost:${port} ๐ผ`)
})
๋ค๋ง socket.io ๋ก ๊ตฌํํ ๋ฆฌ์ผํ์ ์ฑํ ์ ์๋ฒ๋ 5000๋ฒ ์ด๋ค. ํ๋๋ก ํฉ์น๋ ์๋๋ ์์ง ํ์ง ์์๋ค.
ํ์ง๋ง ๊ฐ๋ฅํ ๊ฑฐ ๊ฐ๋ค.
express.Router() ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋๋ก routes.js ํ์ผ์ ์์ฑํด์ ์ด ํ์ผ ๋ด์์ ์๋ํฌ์ธํธ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์ฒ๋ฆฌ ํด ์ค์ง๋ฅผ ๋ถ๊ธฐํ ์ ์๋ค.
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ถํ๋ถํํ๊ฒ ๋ฐ์ง๊ฑฐ๋ฆฌ๋ ํ ์คํธ๋ฅผ ํด๋ฆญํ๋ฉด ๋ฆฌ์ผ ํ์ ์ฑํ ๋ฐฉ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๋ถํ๋ถํํ๊ฒ ๋ง๋ค์ด ๋ณด๋ ค๊ณ keyframes ์ ๋ํด ์ฐพ์ ๋ณด์๊ณ main ์ ํด๋นํ๋ Home.css ์ ์์ฑํด์ฃผ์๋๋ฐ..
๋ฌด์ฒ์ด๋ ๋๋ ค์ง๋ ๊ฒ์ด์๋ค.
๋๋ต ์ด๋ฐ ์ฝ๋์ด๋ค..
@-webkit-keyframes neon1 {
from {
text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #ff1177,
0 0 70px #ff1177, 0 0 80px #ff1177, 0 0 100px #ff1177, 0 0 150px #ff1177;
}
to {
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #ff1177,
0 0 35px #ff1177, 0 0 40px #ff1177, 0 0 50px #ff1177, 0 0 75px #ff1177;
}
}
๊ทธ๋์ ํ์ฌ๋ ์ฃผ์์ ์ฑ์๋์ ์ํ์ด๋ค.
๊ทธ๋ ๊ฒ ํด๋ฆญํด์ ๋ค์ด๊ฐ๋ฉด
localhost:3000/rtcjoin ์ผ๋ก ๊ฒฝ๋ก๊ฐ ํ๋ ๋ ๋์ด๋๋๋ฐ,
์ฌ๊ธฐ์ roomname ๊ณผ ๋ด ๋๋ค์์ ์น๊ณ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
const express = require('express')
const app = express()
const http = require('http')
const socketio = require('socket.io')
const { addUser, removeUser, getUser, getUsersInRoom } = require('./users.js')
const PORT = 5000
const router = require('./router')
const server = http.createServer(app)
const io = socketio(server)
io.on('connection', socket => {
console.log('a user connected!!๐ผ')
// ! client side ์์ emit ์ผ๋ก ๋ณด๋ธ ์ด๋ฒคํธ 'join' ์ ๋ฐ์์ค๊ฒ ๋ค.
// socket.on("join", (data) => {
// console.log(data); // ์ค ์ง์ ธ์ค.. { name: 'hello', room: 'world' } ๊ฐ CLI ์ ์ฐํ๋ค.
// });
socket.on('join', ({ name, room }, callback) => {
console.log(name, room)
const { error, user } = addUser({ id: socket.id, name, room }) // users.js ์์ ํจ์๊ฐ ๋ฆฌํดํ๋ ๊ฒ์ ๋์ฌ๊ฒจ ๋ณผ๊ฒ!
if (error) return callback(error)
// !emitted event ๋ ๋ฐฑ์๋์์ ํ๋ก ํธ์๋๋ก ๋๊ฒจ์ฃผ๊ธฐ ์ํ ๋ฐฉ์ ์ด๊ตฌ๋!
socket.emit('message', {
user: 'admin',
text: `${user.name}, Welcome to the room ${user.room}.`,
})
socket.broadcast
.to(user.room)
.emit('message', { user: 'admin', text: `${user.name}, has joined!` })
socket.join(user.room)
io.to(user.room).emit('roomData', {
room: user.room,
users: getUsersInRoom(user.room),
})
callback()
})
// ! on event ๋ ๋ฐฑ์๋์์์ ์ด๋ฒคํธ
socket.on('sendMessage', (message, callback) => {
const user = getUser(socket.id)
io.to(user.room).emit('message', { user: user.name, text: message })
io.to(user.room).emit('roomData', {
room: user.room,
users: getUsersInRoom(user.room),
})
callback()
})
socket.on('disconnect', () => {
// console.log("user disconnected!!๐ข");
const user = removeUser(socket.id)
if (user) {
io.to(user.room).emit('message', {
user: 'admin',
text: `${user.name} has left.`,
})
}
})
})
app.use(router)
server.listen(PORT, () => {
console.log(`Server HAS Started on port ${PORT}`)
})
socket.io ๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ express ์ http ๋ชจ๋์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํ ๋ค๋ ์ ์ ์๊ฒ ๋์๋ค.
๋ด๊ฐ ๋ง๋ ์๋ฒ๋ express ๋ก (localhost:5000),
socket.io ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํ ์๋ฒ๋ http.createServer ๋ก ๋ด๋ถ ์ธ์๋ express() ๋ฅผ ๋ฐ์์ ๋ง๋ค๊ฒ ๋๋ค.
๋ฐฉ ์ด๋ฆ๊ณผ ์ ์ํ๋ค๋ ๋ฉ์์ง๊ฐ ๋จ๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ์ ์ ํ ๋ ๋ฉ์์ง๊ฐ ๋ฌ๋ค.
broadcast, emit, on ๋ฑ์ ๋ํด ์์ ํ ์ต๋ํ์ง๋ ๋ชปํ์ง๋ง ๋ค์ ๋์ ํ ๋ ํจ์ฌ ๋ ํจ๊ณผ์ ์ผ๋ก ํ ์ ์๋ค๋ ์์ ๊ฐ์ด ์๊ฒผ๋ค.
๋ง์ง๋ง์ผ๋ก,
์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ฅผ ๋์์ ์ด๊ณ ๊ฐ์ ์ด๋ฆ์ ๋ฐฉ์ ์ ์ํ๋ฉด ์๋์ ํ๋ฉด์ ๋ณผ ์ ์๊ณ ,
๋ฐฉ์ ์ ์ํ ์ฌ๋๋ค์ ํ์ธํ ์ ์๊ณ , ํด๋น ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ํด์ ํ๋ฉด broadcast ๋ฅผ ํตํด ๋ฐฉ์ ๋จ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ค์
ํด์ ํ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ๋ฉ์์ง๋ฅผ ๋ ๋ํจ์ผ๋ก์จ ํ์ธํ ์ ์๋ค.
์ ์์ ํด์ ํ ํด๋ผ์ด์ธํธ๊ฐ ๋ฉ์์ง ์์์๋ ํด์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ง๋ง,
ํ๋๋ถ์ ์ํ์ ํด๋น ํด๋ผ์ ์ ์ ์ด๋ฆ์ ์ง์ฐ๊ฒ๋ ๊ตฌํํด๋ด์ผ ๊ฒ ๋ค.