์†Œ์ผ“(Socket)

Baek Dong Hyunยท์–ด์ œ
1

์ปดํ“จํ„ฐ๋ผ๋ฆฌ โ€œ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋Œ€ํ™”โ€ํ•˜๋ ค๋ฉด? ๋ฐ”๋กœ ์†Œ์ผ“(Socket)์ด ํ•„์š”


๐Ÿงญ ๋ชฉ์ฐจ

  1. ์†Œ์ผ“์ด๋ž€?
  2. ์™œ ์†Œ์ผ“์„ ์‚ฌ์šฉํ• ๊นŒ?
  3. WebSocket vs Socket.IO ์ฐจ์ด
  4. ์†Œ์ผ“ ๊ด€๋ จ ์ฃผ์š” ํŒจํ‚ค์ง€
  5. Flutter์—์„œ socket.io ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•
  6. ์†Œ์ผ“์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์˜ˆ์‹œ
  7. ์ด์ •๋ฆฌ

1. ์†Œ์ผ“์ด๋ž€?

์†Œ์ผ“(Socket)์€ ๋‘ ์ปดํ“จํ„ฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ†ต๋กœ

HTTP๋Š” ์š”์ฒญ-์‘๋‹ต ๋ฐฉ์‹์ด๊ณ ,
์†Œ์ผ“์€ ์ „ํ™”์ฒ˜๋Ÿผ ๊ณ„์† ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋กœ ์ž์œ ๋กญ๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“ž ๋น„์œ ํ•˜์ž๋ฉด:

  • HTTP = ํŽธ์ง€
  • Socket = ์ „ํ™”

2. ์™œ ์†Œ์ผ“์„ ์‚ฌ์šฉํ• ๊นŒ?

โœ… ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค

  • โœ… ์ฑ„ํŒ… (๋ณด๋‚ด์ž๋งˆ์ž ๋ฐ”๋กœ ๋„์ฐฉํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ)
  • โœ… ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ (์œ„์น˜, HP, ์ ์ˆ˜ ๋“ฑ ์ฆ‰์‹œ ๊ณต์œ )
  • โœ… ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ (์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰์‹œ ๋ฉ”์‹œ์ง€)

โŒ HTTP๋กœ ํ•˜๋ฉด?

  • ๊ณ„์† "์ƒˆ ์†Œ์‹ ์žˆ๋‚˜์š”?" ํ•˜๊ณ  ๋ฌผ์–ด๋ด์•ผ ํ•จ
  • ์—ฐ๊ฒฐ์„ ๋งค๋ฒˆ ์ƒˆ๋กœ ํ•ด์•ผ ํ•ด์„œ ๋А๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ 

3. WebSocket vs socket.io ์ฐจ์ด

ํ•ญ๋ชฉWebSocketsocket.io (์†Œ์ผ“ IO)
ํ‘œ์ค€ ์—ฌ๋ถ€โœ… ์›น ํ‘œ์ค€ (๋ธŒ๋ผ์šฐ์ € ์ง€์›)โŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜ (ํ‘œ์ค€ ์•„๋‹˜)
๊ธฐ๋Šฅ์—ฐ๊ฒฐ๋งŒ ์ œ๊ณต์žฌ์—ฐ๊ฒฐ, ์ด๋ฒคํŠธ, ์ฑ„๋„ ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จ
๋‚œ์ด๋„์ง์ ‘ ๊ตฌํ˜„ ํ•„์š” (์ฝ”๋“œ ๋งŽ์Œ)์ฝ”๋“œ ๊ฐ„๋‹จ, ๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์‚ฌ๋ก€๊ฒŒ์ž„, ์‹ค์‹œ๊ฐ„ ํ”ผ๋“œ๋Œ€๋ถ€๋ถ„์˜ ์‹ค์‹œ๊ฐ„ ์•ฑ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ

๐Ÿ“Œ ์š”์•ฝ:

WebSocket์€ โ€œ์ „ํ™”์„ โ€,
Socket.IO๋Š” โ€œ์ „ํ™”์„  + ์ž๋™๋‹ค์ด์–ผ + ๋‹จ์ถ•๋ฒ„ํŠผ + ๋Œ€ํ™”๋ฐฉ ๊ธฐ๋Šฅ ๋‹ค ์žˆ๋Š” ์Šค๋งˆํŠธํฐโ€


4. ์†Œ์ผ“ ๊ด€๋ จ ์ฃผ์š” ํŒจํ‚ค์ง€ ์ •๋ฆฌ

ํ”Œ๋žซํผ์ฃผ์š” ํŒจํ‚ค์ง€์„ค๋ช…
Node.jssocket.io, ws์‹ค์‹œ๊ฐ„ ์„œ๋ฒ„ ๊ตฌํ˜„์šฉ ๋Œ€ํ‘œ ํŒจํ‚ค์ง€
Fluttersocket_io_client, web_socket_channel์•ฑ์—์„œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ตฌํ˜„
Pythonwebsockets, aiohttp๊ฐ„๋‹จํ•œ ์‹ค์Šต์šฉ ๋˜๋Š” ์„œ๋ฒ„์šฉ ์†Œ์ผ“
Javajavax.websocket, Socket๊ธฐ๋ณธ ์†Œ์ผ“ ๋˜๋Š” ์›น์†Œ์ผ“ ๊ตฌํ˜„์šฉ

5. Flutter์—์„œ socket.io ์‚ฌ์šฉ๋ฒ•

1. ์˜์กด์„ฑ ์ถ”๊ฐ€

dependencies:
  socket_io_client: ^3.1.2

2. ์†Œ์ผ“ ์—ฐ๊ฒฐํ•˜๊ธฐ

import 'package:socket_io_client/socket_io_client.dart' as IO;

final socket = IO.io('http://localhost:3000', <String, dynamic>{
  'transports': ['websocket'],
  'autoConnect': false,
});

socket.connect();

3. ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

socket.emit('message', '์•ˆ๋…•ํ•˜์„ธ์š”!');

4. ๋ฉ”์‹œ์ง€ ๋ฐ›๊ธฐ

socket.on('message', (data) {
  print('์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฉ”์‹œ์ง€: $data');
});

5. ์—ฐ๊ฒฐ ๋Š๊ธฐ

socket.disconnect();

6. ์†Œ์ผ“์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์˜ˆ์‹œ

๊ธฐ๋Šฅ ์ด๋ฆ„์„ค๋ช…
๐Ÿ’ฌ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™” ๊ตฌํ˜„
๐Ÿ”” ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฆ‰์‹œ ์•Œ๋ฆผ ์ „์†ก
๐ŸŽฎ ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„์œ„์น˜, ์ ์ˆ˜ ๋“ฑ ๋น ๋ฅด๊ฒŒ ๋™๊ธฐํ™”
๐Ÿ“Š ๋ผ์ด๋ธŒ ๋ฐ์ดํ„ฐ์ฐจํŠธ๋‚˜ ์ฃผ๊ฐ€ ๋ณ€๋™ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜
๐Ÿ“ ํ˜‘์—…ํˆด (์˜ˆ: ๋ฌธ์„œ ํŽธ์ง‘)Google Docs์ฒ˜๋Ÿผ ์‹ค์‹œ๊ฐ„ ๊ณต๋™ ์ž‘์—… ๊ฐ€๋Šฅ

7. ์ด์ •๋ฆฌ

ํ•ต์‹ฌ ์š”์†Œ์„ค๋ช…
์†Œ์ผ“(Socket)์ปดํ“จํ„ฐ๋ผ๋ฆฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋Œ€ํ™”ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 
WebSocket๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹
Socket.ioWebSocket์„ ๋” ์“ฐ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Fluttersocket_io_client๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์‚ฌ๋ก€์ฑ„ํŒ…, ๊ฒŒ์ž„, ์•Œ๋ฆผ, ๋ผ์ด๋ธŒ ๋ฐ์ดํ„ฐ ๋“ฑ
profile
์•ˆ๋…•ํ•˜์„ธ์š”.

0๊ฐœ์˜ ๋Œ“๊ธ€