์์ธ ํ๋ฉด์ด ๊ฐ๋ ๋ฉ์ถ๋ค๋ ์๊ธฐ๊ฐ ๋ค์ด์๋ค. ์๋ก๊ณ ์นจํ๋ฉด ๋ค์ ๋์ค๋๋ฐ ์ด์ด ๋๊ณ ๋ณด๊ณ ์์ผ๋ฉด ์ ๋์์ ์ฌํ์ด ์ ๋๋ค.
Table of contents
Open Table of contents
์ฆ์ โ ์ฌํ์ด ์ ๋๋ค
์์ ๋๊ณ ์ง์ผ๋ณด๋ฉด ๋ฉ์ถ์ง ์์๋ค.
๋ฉ์ท๋ค๋ ์ฌ๋์ ์๋๋ฐ ์ฌํ์ด ์ ๋๋ ๋ก๊ทธ๋ฅผ ๋ณผ ์์ ๋ ๋ชป ์ก๋๋ค. ๋ฌด์์ ๋ด์ผ ํ ์ง ์ ํ๋ ค๋ฉด ์ด๋ค ์กฐ๊ฑด์์ ๋๋์ง๋ถํฐ ์ขํ์ผ ํ๋ค.
๋ฌธ์๋ฅผ ๋ค์ ์ฝ์ผ๋ ๊ณตํต์ ์ด ์์๋ค.
ํ๋ฉด์ ์ด์ด ๋๊ณ ๋ค๋ฅธ ์ผ์ ํ๋ค๊ฐ ๋์์ค๋ฉด ๋ฉ์ถฐ ์๋ค
๊ฑฐ๋๊ฐ ํ๋ฐํ ์ข
๋ชฉ์์๋ ์ ๊ทธ๋ ๋ค
๋ ๋ค ๊ทธ๋์ ์๋ฌด๊ฒ๋ ์ ํ๋ ๋ค๋ ๋ป์ผ๋ก ์ฝํ๋ค.
์กฐ์ฌ โ ์กฐ๊ฑด ์ขํ๊ธฐ
๊ฑฐ๋๊ฐ ์๋ ์ข ๋ชฉ์ ์ด์ด ๋๊ณ ์๊ณ๋ฅผ ๋ดค๋ค.
0:00 ์ฐ๊ฒฐ ์ฑ๊ณต, ์ด๊ธฐ ๋ฐ์ดํฐ ์์
0:12 ์ฒด๊ฒฐ ํ๋ ์์
...
1:40 (์๋ฌด๊ฒ๋ ์ ์ด)
1:47 ์ฐ๊ฒฐ ์ข
๋ฃ
๋ง์ง๋ง ํ๋ ์์ผ๋ก๋ถํฐ 100์ด์ฏค ๋ค์ WebSocket ์ด ๋๊ธด๋ค.
๊ฑฐ๋๊ฐ ํ๋ฐํ๋ฉด ๊ณ์ ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ 100์ด๋ฅผ ์ฑ์ธ ์ผ์ด ์๋ค. ๊ทธ๋์ ์ง์ผ๋ณด๊ณ ์์ ๋๋ ์ฌํ์ด ์ ๋๋ค.
๋๊ธฐ๋ ์์ ์ด ์ผ์ ํ๋ค๋ ๊ฒ์ด ๋ค์ ๋จ์์๋ค. ๊ฐ์ด ๊ณ ์ ๋ผ ์๋ค๋ฉด ์ด๋๊ฐ์ ๊ทธ ๊ฐ์ ๊ฐ์ง ์ค์ ์ด ์๋ค.
์์ธ โ ๋ก๊ทธ์ ์๋ฌด๊ฒ๋ ์์๋ค
์๋ฒ ๋ก๊ทธ๋ฅผ ๋ดค๋๋ฐ ์ค๋ฅ๋ ์๊ณ ๋๊ฒผ๋ค๋ ๊ธฐ๋ก๋ ์์๋ค.
WebSocket connection closed: 1006
๋ธ๋ผ์ฐ์ ์ฝ์์๋ 1006 ์ด ์ฐํ ์์๋ค.
1006 ์ ๋ซํ ํ๋ ์์ ๋ชป ๋ฐ์๋ค๋ ๋ป์ด๋ค. RFC 6455 ๋ ์ด ๊ฐ์ ์ด๋ ์ชฝ ๋์ ๋ Close ํ๋ ์์ ์ค์ด์๋ ์ ๋๋ ์์ฝ ์ฝ๋๋ก ๋๊ณ , Close ํ๋ ์์ ์ฃผ๊ณ ๋ฐ์ง ์์ ์ฑ ๋น์ ์์ผ๋ก ๋ซํ์์ ๋ํ๋ด๋ ์ฉ๋๋ก ์ ํ๋ค. ์์ชฝ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ก ๋์ง ์์๊ณ ์ค๊ฐ์์ ๋๊ฐ ๋์๋ค๋ ์ด์ผ๊ธฐ๊ฐ ๋๋ค.
๋ก๊ทธ๊ฐ ๋น์ด ์๋ค๋ ์ฌ์ค ์์ฒด๊ฐ ๋จ์์๋ค. ์ฐ๋ฆฌ๊ฐ ๋์์ผ๋ฉด ์ฐ๋ฆฌ ์ชฝ์ ๋จ์์ ๊ฒ์ด๋ค.
์ ์ฝ โ ๊ฒฝ๋ก๋ง๋ค ์ ํด ์ ํ
๊ฒฝ๋ก์ ๋ฌด์์ด ์๋์ง ์ ๋ค.
๋ธ๋ผ์ฐ์ โ CDN โ ๋ก๋๋ฐธ๋ฐ์ โ nginx โ ์ ํ๋ฆฌ์ผ์ด์
CDN ๊ณผ ๋ก๋๋ฐธ๋ฐ์์ nginx ๊ฐ ์ ๋ง๋ค ์ ํด ์ฐ๊ฒฐ ์ ํ์ ๊ฐ๊ณ ์์๋ค.
# nginx
proxy_read_timeout 60s; # ๊ธฐ๋ณธ๊ฐ
proxy_read_timeout ๋ง๊ณ ๋ก๋๋ฐธ๋ฐ์ ์ชฝ์๋ ๊ธฐ๋ณธ ์ ํด ์ ํ์ด ์์๋ค.
์ด ๊ฐ๋ค์ ๊ทธ ์๊ฐ ๋์ ์๋ฌด๊ฒ๋ ์ ํ๋ฅด๋ฉด ๋๋๋ค๋ ๋ป์ด๋ค. ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ฐ๋ ์์์ด ๋๋ ๋ ธ๋ ์ฐ๊ฒฐ์ ์ ๋ฆฌํ๋ ๊ฒ์ ๋น์ฐํ ๋์์ด๋ค.
๋ฌธ์ ๋ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฐ๊ฒฐ์ด ์๋ ๊ฐ๋ ์กฐ์ฉํ ์ฑ์ง์ด๋ผ๋ ์ ์ด์๋ค. ๊ฑฐ๋๊ฐ ์์ผ๋ฉด ๋ณด๋ผ ๊ฒ์ด ์๋๋ฐ ๊ทธ๊ฒ์ด ๋์ ์ด์ ๊ฐ ๋๋ค.
์ฌ๋ฟ์ด ๊ฒฝ๋ก์ ๊ฑธ์ณ ์์ผ๋ฉด ๊ทธ์ค ๊ฐ์ฅ ์งง์ ๊ฐ์ด ์ค์ ํ๊ณ๊ฐ ๋๋ค.
์กฐ์น โ ์ฃผ๊ธฐ ์ ํธ๋ก ์ฑ์ฐ๊ธฐ
์กฐ์ฉํด๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณด๋ด๋ฉด ๋๋ค.
ping ๊ณผ pong ์ด ๊ทธ ์ฉ๋๋ผ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ์ดํฐ๊ฐ ์๋๋ผ ํ๋กํ ์ฝ ์์ค์์ ์ค๊ฐ๋ค. ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ๋ฐ๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์
๋ฉ์์ง๋ก ๋น ํฑ์ ๋ณด๋ด๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์์์ง๋ง ์ ์ด ํ๋ ์ ์ชฝ์ ๊ณจ๋๋ค. ์ด์ ๋ ํด๋ผ์ด์ธํธ ๊ตฌํ๋ง๋ค ๋น ํฑ ์ฒ๋ฆฌ๋ฅผ ๋ค์ ์ง์ผ ํด์๋ค.
const HEARTBEAT_INTERVAL = 30000;
wss.on('connection', function (ws) {
ws.isAlive = true;
ws.on('pong', function () {
this.isAlive = true;
});
...
});
setInterval(function () {
wss.clients.forEach(function (ws) {
if (ws.isAlive === false) {
// ์ง๋ ์ฃผ๊ธฐ์ pong ์ด ์ ์๋ค. ์ฃฝ์ ์ฐ๊ฒฐ์ด๋ค
return ws.terminate();
}
ws.isAlive = false;
ws.ping();
});
}, HEARTBEAT_INTERVAL);
HEARTBEAT_INTERVAL 30์ด๋ ๊ฐ์ฅ ์งง์ proxy_read_timeout 60์ด์ ์ ๋ฐ์ผ๋ก ์ก์๋ค.
์ ํ๋ณด๋ค ์งง์์ผ ํ๊ณ ํ ๋ฒ ๋์ณ๋ ๊ด์ฐฎ๊ฒ ์ ๋ฐ ์ดํ๋ก ๋๋ ํธ์ด ์์ ํ๋ค. ์ด ์ฝ๋๋ ์ฃฝ์ ์ฐ๊ฒฐ์ ์ ๋ฆฌํ๋ ์ญํ ๋ ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋คํธ์ํฌ ๋จ์ ๋ก ์ฌ๋ผ์ง๋ฉด ์๋ฒ๋ ๊ทธ๊ฒ์ ๋ฐ๋ก ๋ชจ๋ฅด๊ณ ํ์ฐธ ๋ค์์ผ ์๊ฒ ๋๋ค. pong ์ด ์ ์จ ์ฐ๊ฒฐ์ ๋ค์ ์ฃผ๊ธฐ์ terminate ํ๋ ๊ทธ ์ฌ์ด ์์ด๋ ๊ฒ์ด ์ฌ๋ผ์ก๋ค.
๋์ โ ํด๋ผ์ด์ธํธ ์ชฝ ๋ณต๊ตฌ
์๋ฒ๊ฐ ์ด์ ์์ด๋ ์ค๊ฐ์์ ๋๊ธฐ๋ ๊ฒฝ์ฐ๋ ๋จ๋๋ค.
let retryDelay = 1000;
function connect() {
const ws = new WebSocket(WS_URL);
ws.onopen = function () {
retryDelay = 1000; // ์ฑ๊ณตํ๋ฉด ์ด๊ธฐํ
subscribe(currentSymbols);
};
ws.onclose = function () {
setTimeout(connect, retryDelay);
retryDelay = Math.min(retryDelay * 2, 30000); // ์ต๋ 30์ด
};
}
์ฌ๊ธฐ์ ๋ ๊ฐ์ง๋ฅผ ์ง์ผฐ๋ค.
retryDelay ๋ฅผ ๋๋ ค ๊ฐ๋ ๊ฒ์ด ์ฒซ์งธ๋ค. ์๋ฒ๊ฐ ์ฃฝ์ด ์๋๋ฐ ์์ฒ ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ 1์ด๋ง๋ค ๋ถ์ผ๋ฉด ์๋ฒ๊ฐ ์ด์๋๋ ์๊ฐ ๋ค์ ์ฃฝ๋๋ค.
onopen ์์ subscribe ๋ฅผ ๋ค์ ๋ถ๋ฅด๋ ๊ฒ์ด ๋์งธ๋ค. ์๋ฒ๋ ์ด๊ฒ์ ์ WebSocket ์ผ๋ก ๋ณด๋ฏ๋ก ์ด์ ์ ๋ฌด์์ ๋ณด๊ณ ์์๋์ง ๋ชจ๋ฅธ๋ค.
์ด๊ฒ์ ๋น ๋จ๋ฆฌ๋ฉด ์ฐ๊ฒฐ์ ์ด์ ์๋๋ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ ์ํ๊ฐ ๋๋ค. ์ฆ์์ด ์๋ ๋ฌธ์ ์ ๋๊ฐ์์ ๊ณ ์ณค๋์ง ์๋์ง๋ ์ ๊ฐ๋ฆฐ๋ค.
์ ๋ฆฌ
- ๋ฐ์ดํฐ๊ฐ ํ๋ฅด์ง ์๋ ์ฐ๊ฒฐ์ ์ค๊ฐ ์ฅ๋น๊ฐ ๋๋๋ค
- ๊ฒฝ๋ก์ ๋ชจ๋ ์ฅ๋น์ ์ ํด ์ ํ์ด ์๊ณ ๊ฐ์ฅ ์งง์ ๊ฒ์ด ํ๊ณ๋ค
- ๋๊ธฐ๋ ์์ ์ด ์ผ์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๋ผ ์๊ฐ ์ ํ์ด๋ค
- ์์ ์ด ์ ๊ฐ๊ฐ์ด๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ํ์ ํ์ง ์ชฝ์ด๋ค
- ํ์ชฝ์ ๋ก๊ทธ๊ฐ ์์ผ๋ฉด ๊ทธ์ชฝ์ด ๋์ ๊ฒ์ด ์๋๋ค
- ์ข ๋ฃ ์ฌ์ ๋ฅผ ๋ชป ๋ฐ์ ์ฝ๋๋ ์ค๊ฐ์์ ๋๊ฒผ๋ค๋ ๋ป์ด๋ค
- ๊ฐ์ฅ ์งง์ ์ ํด ์ ํ์ ์ ๋ฐ ์ดํ ์ฃผ๊ธฐ๋ก ์ ํธ๋ฅผ ๋ณด๋ธ๋ค
- ๊ทธ ์ ํธ๋ ์ฃฝ์ ์ฐ๊ฒฐ์ ์ ๋ฆฌํ๋ ์๋จ๋ ๋๋ค
- ํด๋ผ์ด์ธํธ๋ ๊ฐ๊ฒฉ์ ๋๋ ค ๊ฐ๋ฉฐ ๋ค์ ๋ถ๋๋ค
- ์ผ์ ๊ฐ๊ฒฉ์ด๋ฉด ์๋ฒ๊ฐ ์ด์๋๋ ์๊ฐ ๋ค์ ์ฃฝ๋๋ค
- ๋ค์ ๋ถ์ ๋ค ๊ตฌ๋ ์ ์๋ก ๊ฑธ์ง ์์ผ๋ฉด ์๋ฃ๋ง ์ ์จ๋ค
- ๊ทธ ์ํ์ ์ฆ์์ด ์๋ ๋ฌธ์ ์ ๋๊ฐ๋ค