Home Socket vs WebSocket
Post
Cancel

Socket vs WebSocket

๐Ÿ™‚๋“ค์–ด๊ฐ€๋ฉฐโ€ฆ

django ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ณ„ ์ƒ๊ฐ์—†์ด django-channels ๋ฅผ ์‚ฌ์šฉํ•ด WebSocket ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์ด์˜€๋‹ค.

์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ธ€์˜ ์ถ”์ฒœ์œผ๋กœ worker๋Š” 2 x number_of_cores + 1 ๋กœ ์„ค์ •ํ•˜์—ฌ ๋™์‹œ์— ์ตœ๋Œ€ worker ๊ฐœ์˜ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.

์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐโ€ฆ

๋ถˆํ˜„๋“ฏ WebSocket ํ†ต์‹ ์ด ๋งŽ์•„์กŒ์„ ๋•Œ ์„œ๋ฒ„ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜๋„ ์žˆ๊ฒ ๊ตฌ๋‚˜ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

Socket์ด๋ž€?

  • TCP(Transmission Control Protocol) ์—ฐ๊ฒฐ ์ง€ํ–ฅ์ ์ด๋ฉฐ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ. ์ŠคํŠธ๋ฆผ ์†Œ์ผ“์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ˆœ์„œ์™€ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•จ
  • UDP(User Datagram Protocol) ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ๋น ๋ฅธ ์†๋„๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€ ์†์‹ค์ด ํ—ˆ์šฉ๋˜๋Š” ์ƒํ™ฉ์— ์ ํ•ฉ

Socket์˜ ๋™์ž‘

  1. ์†Œ์ผ“ ์ƒ์„ฑ

    ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์†Œ์ผ“์„ ์ƒ์„ฑํ•จ. ์ด ์†Œ์ผ“์€ ํŠน์ • ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋‹ค๋ฅธ ์—”๋“œํฌ์ธํŠธ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต

  2. ์„œ๋ฒ„ ์†Œ์ผ“ ๋ฐ”์ธ๋”ฉ

    ์„œ๋ฒ„๋Š” ์†Œ์ผ“์„ ํŠน์ • IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ์— ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•จ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น IP์™€ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Œ

  3. ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•จ. ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๊ฒฝ๋กœ๊ฐ€ ์ƒ์„ฑ๋จ
  4. ์—ฐ๊ฒฐ ์ข…๋ฃŒ

    ๋ฐ์ดํ„ฐ ๊ตํ™˜ ์™„๋ฃŒ ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ. ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ๋˜๊ณ  ๋‹ค๋ฅธ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

WebSocket์ด๋ž€?

WebSocket์˜ ๋™์ž‘

  1. handshake

    Client ์™€ Server ๊ฐ„ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์€ HTTP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•จ. ์ด ๋‹จ๊ณ„์—์„œ Upgrade ํ—ค๋”๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์ดํ›„์˜ ํ†ต์‹ ์ด WebSocket ํ”„๋กœํ† ์ฝœ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋จ์„ ๋‚˜ํƒ€๋ƒ„

  2. Data Transfer

    ์—ฐ๊ฒฐ์ด ์—ด๋ฆฐ ์ƒํƒœ์—์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ „์†กํ•จ

  3. Connection Termination

    ํ•„์š”์— ๋”ฐ๋ผ ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Server ๋˜๋Š” Client ์—์„œ ๋‹ซ์„ ์ˆ˜ ์žˆ์Œ

Socket vs Websocket

1. ํ”„๋กœํ† ์ฝœ๊ณผ ๋ ˆ์ด์–ด

  • Sokcet : TCP ๋˜๋Š” UDP์™€ ๊ฐ™์€ ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์„ ์ง์ ‘ ์‚ฌ์šฉํ•จ. OSI ๋ชจ๋ธ์˜ Transport Layer์—์„œ ๋™์ž‘
  • WebSocket : HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์›น ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํ”„๋กœํ† ์ฝœ. OSI ๋ชจ๋ธ์˜ Application Layer์—์„œ ๋™์ž‘

2. ์—ฐ๊ฒฐ ๋ฐฉ์‹

  • Sokcet : ์žฅ๊ธฐ ๋˜๋Š” ๋‹จ๊ธฐ ์—ฐ๊ฒฐ ์„ค์ •ํ•˜๋ฉฐ, Client ์™€ Server ๊ฐ„์— ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ฐ€๋Šฅํ•จ
  • WebSocket : ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๋ฉด ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๊ณ  ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•จ. ์—ฐ๊ฒฐ ์œ ์ง€๋กœ ์ธํ•œ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์ด ๋” ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•จ

3. ์‚ฌ์šฉ ํ™˜๊ฒฝ

  • Sokcet : ์ผ๋ฐ˜์ ์ธ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ๊ณผ ๋‹ค์–‘ํ•œ ์‘์šฉ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
  • WebSocket : ์ฃผ๋กœ ์›น & ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์„ค๊ณ„๋จ. HTTP์™€ ํ˜ธํ™˜๋˜์–ด ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ตœ์ ํ™”ํ•จ

4. ๋ณด์•ˆ

  • Sokcet : ํ•„์š”ํ•œ ๊ฒฝ์šฐ TLS/SSL ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ„๋„๋กœ ์ ์šฉํ•ด์•ผ ํ•จ
  • WebSocket : ์›น์†Œ์บฃ ์ž์ฒด์— wss:// ์„ ํ†ตํ•œ ๋ณด์•ˆ ์—ฐ๊ฒฐ ์˜ต์…˜์ด ์กด์žฌํ•จ

๊ฒฐ๋ก 

์ƒ๋ฐ˜๋˜๋Š” ๊ฐœ๋…์ด ์•„๋‹ˆ๊ธฐ์— ์™„์ „ํ•˜๊ฒŒ ๋น„๊ต๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๊ฒฐ๊ตญ์—๋Š” WebSocket ๊ตฌํ˜„์— Socket ์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • Sokcet : ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•˜์—ฌ, ์ €์ˆ˜์ค€ ์ œ์–ด์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ์Œ
  • WebSocket : ์›น๊ณผ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์— ํŠนํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ ์šฉ์ด ๋” ์‰ฝ๊ณ  ํšจ์œจ์ ์ž„

โ‡’ ๋‚ด์šฉ ์ถ”๊ฐ€ ์˜ˆ์ •โ€ฆ

This post is licensed under CC BY 4.0 by the author.

๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  Django ์ดˆ๊ธฐ ์„ธํŒ…

Django - AWS EC2 & Nginx & Gunicorn ๋ฐฐํฌํ•˜๊ธฐ