ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Socket.io๋ฅผ ์ฌ์ฉํด๋ณผ ๊ธฐํ๊ฐ ์๊ฒผ๋ค. ์์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๊ณ , ์น ์์ผ์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ด๋ ค์์ด ์์๋ค.
๊ทธ๋์(์ง๊ธ๋) ์ด๋ ค์์ ์ฃผ์๋ ์น ์์ผ๊ณผ Socket.io์ ๋ํด ์ ๋ฆฌํด๋ณด์.
์น ์์ผ์ด๋?
์น ์์ผ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ์ฌ์ด์ ์ธํฐ๋ํฐ๋ธ ํต์ ์ธ์ ์ ์ค์ ํ ์ ์๊ฒ ํ๋ ๊ณ ๊ธ ๊ธฐ์ ์ ๋๋ค. ๊ฐ๋ฐ์๋ ์น ์์ผ API๋ฅผ ํตํด ์๋ฒ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , ์๋ฒ์ ์๋ต์ ์ํด ์๋ฒ๋ฅผ ํด๋ง(polling) ์์ด๋ ์ด๋ฒคํธ ์ค์ฌ ์๋ต์ ๋ฐ์ ์ ์์ต๋๋ค. — MDN ๋ฌธ์
์์๋ฅผ ๋ค์ด ๋ ์์ธํ ์ดํด๋ณด์.
REST API์์ ์ฐจ์ด์
REST API๋ ์์ฒญ → ์๋ต ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๊ฐ ์๋ต์ ๋ฐํํ๋ ๊ตฌ์กฐ๋ก, ๋จ๋ฐฉํฅ ํต์ ์ด๋ค.
์ด ๊ตฌ์กฐ๋ ํด๋ง(polling)์ด๋ ์ง์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Polling
Polling์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐฉ์
์ฑํ ๊ธฐ๋ฅ ์์
์ฑํ ๊ธฐ๋ฅ์ REST API๋ก ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์๋์ ๋ต์ฅ์ ๋ฐ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ผ ํ๋ค. ์ด ๋ฐฉ์์ ์์ฒญ์ด ๋ง์์ง์๋ก ์๋ฒ์ ๋ถ๋ด์ ์ฃผ๊ณ , ์ค์๊ฐ์ฑ์ด ์ ํ๋ ์ ์๋ค.
์น ์์ผ
์น ์์ผ์ ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ ํ๋กํ ์ฝ๋ก ์ฐ๊ฒฐ์ด ํ๋ฒ ์ค์ ๋๋ฉด, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
์ฃผ์ ํน์ง
- ์ง์์ ์ธ ์ฐ๊ฒฐ : ํ ๋ฒ ์ฐ๊ฒฐ๋๋ฉด ๋์ด์ง์ง ์๊ณ ์ ์ง๋๋ค.
- ์๋ฐฉํฅ ํต์ : ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
- ๋ฎ์ ์ค๋ฒํค๋ : HTTP ์์ฒญ/์๋ต์ ๋ฐ๋ณตํ์ง ์์ ๋คํธ์ํฌ ์ค๋ฒํค๋๊ฐ ์ ๋ค.
Socket.io
Socket.io๋ ์น ์์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ค์๊ฐ ํต์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์์ค๋ค.
๋จ์ํ ์น ์์ผ์ ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, Socket.io๋ ์น ์์ผ ์ธ์๋ ๋ค์ํ ํ๋กํ ์ฝ์ ํฌํจํ๊ณ ์๋ค.
Socket.io๊ฐ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ ์ค ํ๋๊ฐ ์น ์์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- ์๋ ์ฌ์ฐ๊ฒฐ : ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์๋์ผ๋ก ์ฌ์ฐ๊ฒฐ์ ์๋ํ๋ค.
- ๋ธ๋ก๋์บ์คํ : ํ๋์ ๋ฉ์ธ์ง๋ฅผ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ๋์์ ์ ์กํ๋ค
- ํด๋ฐฑ ์ง์ : ์น ์์ผ์ด ์ง์๋์ง ์์ ๊ฒฝ์ฐ, HTTP Long Polling์ผ๋ก ์ ํํ๋ค.
HTTP Long Polling
๋กฑ ํด๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์์ ๋๊น์ง ์๋ต์ ์ง์ฐ์ํจ๋ค. ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ์๋ต์ ๋ณด๋ด๊ณ , ํด๋ผ์ด์ธํธ๋ ๋ฐ๋ก ๋ค์ ์์ฒญ์ ๋ณด๋ธ๋ค.
๋กฑ ํด๋ง์ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋ถํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฌ์ฉ ์ฌ๋ก
- WebSocket : ์ค์๊ฐ ์ฑํ , ๊ฒ์, ์ฃผ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ
- HTTP Polling : ๊ฐ๋จํ ์ํ ์ฒดํฌ
- Long Polling : ๋๊ธฐ ์๊ฐ์ด ๊ธธ๊ณ ๊ฐํ์ ์ธ ์ ๋ฐ์ดํธ
Socket.io ํ์ฉ
Socket.io๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ์์ ํน์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์(emit) ์ํค๊ณ , ์ด๋ฅผ ์์ (on)ํด ์ฒ๋ฆฌํ ์ ์๋ค.
์ฑํ ๊ธฐ๋ฅ ์์
1.socket ์ธ์คํด์ค๋ฅผ ์์ฑ
import { io } from "socket.io-client";
const socket = io("URL");
2.์ด๋ฒคํธ๋ฅผ ์ ์, ๋ฐ์(emit)
socket.emit("์ฑํ
","์๋
ํ์ธ์!") // "์ฑํ
"์ด๋ผ๋ ์ด๋ฒคํธ ์ ์, emit์ผ๋ก ์ด๋ฒคํธ ๋ฐ์
3.์๋ฒ๋ก๋ถํฐ ์ด๋ฒคํธ ์์ (on)
socket.on("์ฑํ
", (data) => {
console.log('์๋ฒ๋ก๋ถํฐ ์์ ๋ ๋ฉ์์ง:', data);
});
4.์ฐ๊ฒฐ ํด์ (off)
socket.off('์ฑํ
');
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํ๋ก์ ํธ์์ Socket.io๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ค์๊ฐ ํต์ ์ ๋ํด ์ดํดํ ์ ์์๋ค. ์์ง ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง์ง๋ง, ์์ผ๋ก์ ํ๋ก์ ํธ์์ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ์๋ฃ
https://velog.io/@eunddodi/์ฑํ -๊ฐ๋ฐ์-์ํ-Socket.IO-์ดํดํ๊ธฐ
https://socket.io/docs/v4/#what-socketio-is
https://developer.mozilla.org/ko/docs/Web/API/WebSockets_API
https://blog.stackademic.com/20-concepts-about-socket-io-every-developer-should-master-902ffcb19e63
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JWT ํ ํฐ ์ด๋์ ์ ์ฅํ๋๊ฒ ์ข์๊น? (1) | 2024.12.16 |
---|---|
SVGR jest ํ ์คํ ์๋ฌ (0) | 2024.12.07 |
React Query์ SSR: ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ Hydration ํ์ฉ (1) | 2024.12.07 |
Swiper ์ฌ์ฉ ํ๊ธฐ (feat. ํ ์ผ์๋) (0) | 2024.12.07 |
next localFont ์ฌ์ฉ ์ด์ ์ src ์ค์ (0) | 2024.11.30 |