๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

Web Socket: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 3. 15.
728x90

Web Socket: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ

1. Web Socket์ด๋ž€?

Web Socket์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ•œ๊ณ„๋กœ ์ธํ•ด ๊ธฐ์กด์—๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋งŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, Web Socket์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

1. Web Socket์˜ ์—ญํ• 

  • ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : Web Socket์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ฎ์€ ์˜ค๋ฒ„ํ—ค๋“œ: HTTP์™€ ๋‹ฌ๋ฆฌ Web Socket์€ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

2. Web Socket ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„: ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์—์„œ ํ”Œ๋ ˆ์ด์–ด ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. Web Socket์˜ ์žฅ๋‹จ์ 

์žฅ์ :

  • ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ๋ณด์•ˆ ์ธก๋ฉด: ์›น ์†Œ์ผ“์€ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธํ™˜์„ฑ: ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Web Socket์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Web Socket์„ ์ดํ•ดํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ

ํด๋ผ์ด์–ธํŠธ (JavaScript)

var socket = new WebSocket("ws://localhost:8080");

socket.onopen = function() {
  console.log("Connection established.");
};

socket.onmessage = function(event) {
  console.log("Message received: " + event.data);
};

socket.onclose = function(event) {
  if (event.wasClean) {
    console.log("Connection closed cleanly.");
  } else {
    console.log("Connection abruptly closed.");
  }
};

socket.onerror = function(error) {
  console.log("Error occurred: " + error.message);
};

์„œ๋ฒ„ (Node.js)

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('Received: %s', message);
  });

  ws.send('Hello, client!');
});

5. ์—ฐ๊ด€๋œ ๊ธฐ์ˆ 

  • Server-Sent Events (SSE): ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ .
  • Long Polling: ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ์ˆ .

Web Socket์€ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€