1 ๋ถ„ ์†Œ์š”

WebSocket?

์›น ์†Œ์ผ“์€ Transport Protocol์˜ ์ผ์ข…์œผ๋กœ, ๋‘ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜์„ ์œ„ํ•œ ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค

์›น ์†Œ์ผ“์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ์†Œ์ผ“ Connection์„ ์œ ์ง€ํ•˜์—ฌ ์–ธ์ œ๋“  ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • SNS
  • ๋ฉ”์‹ ์ €
  • โ€ฆ ๋“ฑ

์›น ์†Œ์ผ“์˜ ํŠน์ง•

1. ์–‘๋ฐฉํ–ฅ ํ†ต์‹  (Full-Duplex)

  • ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ•
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ์—๊ฒŒ ์›ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • HTTP๋Š” ์š”์ฒญ ์‹œ์—๋งŒ ์‘๋‹ต์„ ์ฃผ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ 

2. ์‹ค์‹œ๊ฐ„ ๋„คํŠธ์›Œํ‚น (Real Time-Networking)

  • ์›น ํ™˜๊ฒฝ์—์„œ ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

์›น ์†Œ์ผ“์„ ์™œ ์“ฐ์ง€?

๊ธฐ์กด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋Œ€๋ถ€๋ถ„ HTTP๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ–ˆ๋‹ค.

๋˜, HTTP๋Š” Request/Response ๊ธฐ๋ฐ˜์˜ Stateless ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ์˜๊ตฌ์ ์ด์ง€ ์•Š์Œ
  • ํด๋ผ์ด์–ธํŠธ์—์„œ Request๋ฅผ ํ•  ๋•Œ๋งŒ ์„œ๋ฒ„๊ฐ€ Response๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹ (๋‹จ๋ฐฉํ–ฅ)

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋”๋ผ๋„ ํด๋ผ์ด์–ธํŠธ์—๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • Ajax๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์–ด๋Š์ •๋„ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ƒ๋ช…์ธ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ์—๋Š” ์ด ๋˜ํ•œ ๋ถ€์ ์ ˆํ•  ์ˆ˜ ์žˆ์Œ

์ด๋Ÿฐ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์›น ์†Œ์ผ“ ์ด๋‹ค.

๊ทธ๋Ÿผ ์›น ์†Œ์ผ“์€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•˜์ง€?

์ผ๋‹จ ์›น ์†Œ์ผ“์€ HTTP์™€ ๋‹ฌ๋ฆฌ Stateful ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

๋•Œ๋ฌธ์—, ํด๋ผ์ด์–ธํŠธ์™€ ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์ด ๋˜๋ฉด ๊ณ„์† ๊ฐ™์€ ๋ผ์ธ์„ ์‚ฌ์šฉํ•ด ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ HTTP, TCP ์—ฐ๊ฒฐ ํŠธ๋ž˜ํ”ฝ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜, ์›น ์†Œ์ผ“์€ HTTP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 80๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉํ™”๋ฒฝ ์žฌ์„ค์ •์ด ํ•„์š” ์—†๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ž‘๋™ ์›๋ฆฌ๋Š”?

์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์›น ์†Œ์ผ“์€ HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์—ฅ HTTP๊ฐ€ ์™œ ๋‚˜์™€?

๋งŒ์•ฝ ์—ฐ๊ฒฐ์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์›น ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด HTTP ์—ฐ๊ฒฐ์€ ์ž๋™์œผ๋กœ ๋Š์–ด์ง„๋‹ค.

์ฆ‰, ์ตœ์ดˆ ์ ‘์† ์‹œ์—๋งŒ HTTP์˜ ์œ„์—์„œ HandShaking์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP Header๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋Š๋Š” ๊ฒƒ์ด๋‹ค.

Django์—์„œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•?

socketio

Django, Flask, FastAPI ๋“ฑ๊ณผ ๊ฐ™์€ Python ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ Python์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ socketio ์ด๋‹ค.

socketio ๋Š” Node.js ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์†Œ์ผ“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

์ด๊ฑด ๋‹ค์Œ์— ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉฐ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ , ํŠœํ† ๋ฆฌ์–ผ ์ง„ํ–‰ ํ›„ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ๊ฒ ๋‹ค..!

Django Channels

Django์—์„œ๋Š” ํŠนํžˆ ์‹ค์‹œ๊ฐ„ ์›น ํ†ต์‹  ๋ฐ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Django Channels ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.

๐Ÿ‘‰ย Django Channels๋ž€?

์ฐธ๊ณ ์ž๋ฃŒ

WebSocket ์ด๋ž€?

Web Socket ์ด๋ž€?

[Introduction Socket.IO](https://socket.io/docs/v2/)

๐Ÿ“˜[Django] Django Channels๋ž€?

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ