๐ก Server-Sent Events (SSE)๋?
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋จ๋ฐฉํฅ์ผ๋ก ์ค์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ์น ๊ธฐ์ ๋ก, ์๋ฒ์์ ๋ฐ์ํ๋ ์
๋ฐ์ดํธ๋ ์๋ฆผ ๋ฑ์ ์ค์๊ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ ์ ์๋ค.
- ๋จ๋ฐฉํฅ ํต์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ๋ HTTP ํ๋กํ ์ฝ์ ํตํด SSE ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , ์๋ฒ๋ HTTP ์๋ต์ ์ ์งํ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
- ์ฌ์ฐ๊ฒฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ์ด ๋์ด์ก์ ๋ ์๋์ผ๋ก ๋ค์ ์ฐ๊ฒฐํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๊ณ , ์๋ฒ๊ฐ ํ์ํ ์์ ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์์ด๋ค.
SSE vs. WebSocket
WebSocket๊ณผ์ ์ฐจ์ด์
-
๋ฐ์ดํฐ ํ๋ฆ
- SSE์ WebSocket์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ค.
- SSE๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋จ๋ฐฉํฅ ํต์ ๋ฐฉ์์ด๋ค.
- WebSocket์ ์๋ฐฉํฅ ํต์ ์ ์ง์ํ์ฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
- ๋ฐ๋ผ์, SSE๋ ์ฃผ๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ผ๋ฐฉ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ด ํ์ํ ์ฃผ๊ฐ ์ ๋ฐ์ดํธ๋ ์ค์๊ฐ ์๋ฆผ ๋ฉ์์ง์ ์ ํฉํ๊ณ , WebSocket์ ์๋ฐฉํฅ ํต์ ์ด ํ์ํ ์ค์๊ฐ ์ฑํ ๋ฑ์ ์ฌ์ฉ๋๋ค.
-
ํ๋กํ ์ฝ
- SSE๋ ์น ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์ HTTP ํ๋กํ ์ฝ ์์์ ๋์ํ๋ค.
- ๋ํ, HTTP ์ฐ๊ฒฐ์ ์ ์งํ ์ํ์์ ์ฌ์ฐ๊ฒฐ์ด๋ ์ถ๊ฐ ์ค์ ์์ด ์๋ฒ๋ก๋ถํฐ ์ง์์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฐ์ ์ ์๋ค.
- ๋ฐ๋ฉด, WebSocket์ ๋
๋ฆฝ์ ์ธ ํ๋กํ ์ฝ(
ws://,wss://) ์ ์ฌ์ฉํ๊ณ , HTTP์๋ ๋ณ๋์ ์ฐ๊ฒฐ์ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
-
๊ธฐํ
- SSE๋ CORS(Cross-Origin Resource Sharing) ๋ฅผ ํตํด ๋ค๋ฅธ ๋๋ฉ์ธ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๋ค.
- WebSocket๋ ๋์ผํ ๋๋ฉ์ธ ๊ฐ ํต์ ์ ์ ๊ณตํ์ง๋ง, ๋ณด์์์ ์ด์ ๋ก ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํ ์ ์๋ค.
| ๊ตฌ๋ถ | Server-Sent Events (SSE) | WebSocket |
|---|---|---|
| ํต์ ๋ฐฉํฅ | ๋จ๋ฐฉํฅ (์๋ฒ โ ํด๋ผ์ด์ธํธ) | ์๋ฐฉํฅ (์๋ฒ โ ํด๋ผ์ด์ธํธ) |
| ํ๋กํ ์ฝ | HTTP/HTTPS | WS/WSS (๋ ๋ฆฝ ํ๋กํ ์ฝ) |
| ์๋ ์ฌ์ฐ๊ฒฐ | ๋ด์ฅ ๊ธฐ๋ฅ์ผ๋ก ์ง์ | ์ง์ ๊ตฌํ ํ์ |
| ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก | ์ค์๊ฐ ์๋ฆผ, ์ฃผ๊ฐ/๋ ์จ ์ ๋ฐ์ดํธ | ์ค์๊ฐ ์ฑํ , ์จ๋ผ์ธ ๊ฒ์ |
๐ ํต์ ํ๋ก์ธ์ค ์ค๋ช
- ํด๋ผ์ด์ธํธ ์ด๊ธฐํ: ํด๋ผ์ด์ธํธ๊ฐ
EventSource๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์๋ฒ์ SSE ์๋ํฌ์ธํธ(/api/events)์ ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค. - ์๋ฒ ์ค์ : ์๋ฒ๋
Content-Type์text/event-stream์ผ๋ก ์ค์ ํ๊ณ , ์ฐ๊ฒฐ์ ์ ์งํ๊ธฐ ์ํดCache-Control๊ณผConnectionํค๋๋ฅผ ์ค์ ํฉ๋๋ค. - ๋ฐ์ดํฐ ์ ์ก: ์๋ฒ๋ ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. ์ด ์์ ์์๋ 1์ด๋ง๋ค ํ์ฌ ์๊ฐ์ JSON ํ์์ผ๋ก ์ ์กํฉ๋๋ค.
- ์ด๋ฒคํธ ์์ : ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ,
onmessage์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. - ์ฐ๊ฒฐ ์ข
๋ฃ: ํด๋ผ์ด์ธํธ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๊ฑฐ๋ ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋๋ฉด
EventSource๊ฐ์ฒด๋close๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.