Websocket

kirin.logยท2021๋…„ 9์›” 8์ผ
0

web

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

๐Ÿ„ Websocket

  • Websocket์€ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์šฉ ํ†ต์‹  ๊ทœ์•ฝ์˜ ํ•˜๋‚˜์ด๋‹ค.
    (์ธํ„ฐ๋„ท์˜ ํ‘œ์ค€ํ™” ๋‹จ์ฒด์ธ W3C(World Wide Web Consortium)๊ฐ€ API ์ฑ…์ •์„ ๋งก๊ณ , IETF๊ฐ€ Websocket ํ”„๋กœํ† ์ฝœ ์ฑ…์ •์„ ๋งก์Œ์œผ๋กœ์จ, ์›น์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ทœ์ •์„ ์ •์˜ํ•œ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์šฉ ๊ธฐ์ˆ  ๊ทœ์•ฝ)

  • WebSocket ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ์—ฐ๊ฒฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
    (์ฆ‰, Websocket(์›น ์†Œ์ผ“) API๋Š” ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ(์‹ค์‹œ๊ฐ„) ํ†ต์‹  ์„ธ์…˜์„ ์—ด ์ˆ˜์žˆ๊ฒŒํ•˜๋Š” ๊ธฐ์ˆ )

  • ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‘๋‹ต์„ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ํด๋ง(polling, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹ <-> ํ‘ธ์‹œ(push))ํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒธ Websocket ๋“ฑ์žฅ๋ฐฐ๊ฒฝ

์ดˆ๊ธฐ ์›น(WEB)์˜ ๋ชฉ์ ์€ ๋ฌธ์„œ์ „๋‹ฌ๊ณผ ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•œ ๋ฌธ์„œ์—ฐ๊ฒฐ์ด๋‹ค. ์›น์„ ์œ„ํ•œ HTTPํ”„๋กœํ† ์ฝœ์€ ์ด๋Ÿฌํ•œ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ชจ๋ธ์ด๋‹ค.
ํ•˜์ง€๋งŒ ์›น(WEB)์ด ๋ฐœ์ „ํ• ์ˆ˜๋ก ๋”์šฑ ๋™์ ์ด๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ ์ธ ๊ธฐ๋Šฅ์ด ์š”๊ตฌ๋จ์— ๋”ฐ๋ผ ์›นํ™˜๊ฒฝ์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
๊ทธ ์ค‘ ์›นํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•œ ์ŠคํŽ™์ด Websocket์ด๋‹ค.
Websocket์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ TCP๋ผ์ธ์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” HTML5์˜ ์ƒˆ๋กœ์šด ์‚ฌ์–‘์ด๋‹ค.
๋”ฐ๋ผ์„œ Websocket์„ ์ด์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ TCP์†Œ์ผ“๊ณผ ๊ฐ™์ด ์—ฐ๊ฒฐ์ง€ํ–ฅ ์–‘๋ฐฉํ–ฅ ์ „์ด ์ค‘ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๐Ÿ‘‰ ์ด๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์•ผ๋กœ๋Š” ์ฑ„ํŒ…, ๊ฒŒ์ž„, ์‹ค์‹œ๊ฐ„ ์ฃผ์‹ ์ฐจํŠธ์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„์ด ์š”๊ตฌ๋˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋ฐœ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฆ‹ REST API๊ฐ€ ๊ฐ€์ง„ ํ•œ๊ณ„์ ์œผ๋กœ ์ธํ•ด Websocket API๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

REST API๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ ๊ฒƒ์˜ ๊ฒฐ๊ณผ์ด๋‹ค.

ex) ๋ธŒ๋ผ์šฐ์ € ๋ฐฉ๋ฌธ ์‚ฌ๋ก€ (์›น์‚ฌ์ดํŠธ ์ฃผ์†Œ ์ž…๋ ฅ > ์—”ํ„ฐ > ์›นํŽ˜์ด์ง€ ๋œธ)
์ฆ‰, ์—”ํ„ฐ๋ฅผ ์น˜๋Š” ํ–‰์œ„๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์›นํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ํ–‰์œ„์ด๋‹ค. ์—”ํ„ฐ๋ฅผ ์น˜์ง€ ์•Š์œผ๋ฉด ์›นํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.

ex) ์›นํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์‚ฌ๋ก€ (์›น์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ ํ›„ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํ™”๋ฉด์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค)
์ฆ‰, ์ด๋ฒคํŠธ ๋™์ž‘ ๋“ฑ์ด ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†๋‹ค.

ex) ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •๋ณด๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผํ•˜๋Š” ๋ถ„์•ผ(์ฃผ์‹ ๋“ฑ) -> ์š”์ฒญ ํ–‰์œ„ ์—†์ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌดํ•œ ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ• ๊ฒƒ์ด๋‹ค.

๐Ÿ‘‰ REST API์˜ ํ•œ๊ณ„๋Š”
1) ์ •๋ณด๊ฐ€ ๋ณ€ํ•  ๋•Œ, ๊ทธ๋•Œ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›์•„๋ณด๊ธฐ ํž˜๋“ค๋‹ค๋Š” ์ 
2) ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์ด ํ•œ ๋ฒˆ์˜ ์‘๋‹ต์œผ๋กœ ๋๋‚œ๋‹ค.
(์ฆ‰, ํ•œ ๋ฒˆ ์š”์ฒญํ•˜๋ฉด ๊ทธ ๋’ค๋กœ ๊ณ„์†ํ•ด์„œ ์•Œ์•„์„œ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์˜ API๊ฐ€ ํ•„์š”ํ•˜๋‹ค)

๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ API๊ฐ€ Websocket API(= ๊ตฌ๋…ํ˜• API)์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ ์š”์ฒญ์ž(ํด๋ผ์ด์–ธํŠธ)์™€ ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž(์„œ๋ฒ„) ๊ฐ„์˜ ์ฑ„๋„์ด ์—ด๋ฆฌ๊ฒŒ ๋œ๋‹ค.
  • ์ฑ„๋„์ด ์—ด๋ฆฌ๊ธฐ ์ „, ์š”์ฒญ์ž๋Š” ์ œ๊ณต์ž๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์€์ง€ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.
  • ์ฑ„๋„์ด ์—ด๋ฆฐ ํ›„, ์ œ๊ณต์ž๋Š” ์š”์ฒญ์ž๊ฐ€ ์š”๊ตฌํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ „๋‹ฌํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
  • ์ด ์ฑ„๋„์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฌดํ•œ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    (์ฑ„๋„ํ˜•์„ฑ = ๋ฐ์ดํ„ฐ ๋ฌดํ•œ ์ œ๊ณต)

๐ŸŒธ Websocket์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋งŽ์€ ์ˆ˜์˜ ๋™์‹œ ์ ‘์†์ž๋ฅผ ์ˆ˜์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ TCP ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ
  • ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ ์›น์„ ๋„˜์–ด SOA๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

๐ŸŒธ Websocket ์„œ๋ฒ„์˜ ์ข…๋ฅ˜

  • phpwebsockets
  • jWebSocket(java)
  • web-socket-ruby(ruby)
  • Socket-IO-node(node.js)

๐ŸŒธ ๊ธฐ์กด ํ†ต์‹ ๋ฐฉ๋ฒ•๊ณผ Websocket์˜ ๊ฒฐ์ •์  ์ฐจ์ด๋Š”?

  • ๊ธฐ์กด ํ†ต์‹ ๋ฐฉ๋ฒ•๊ณผ WebSocket์˜ ๊ฒฐ์ •์  ์ฐจ์ด๋Š” ํ”„๋กœํ† ์ฝœ์— ์žˆ๋‹ค. WebSocket ํ”„๋กœํ† ์ฝœ์€ ์ ‘์†ํ™•๋ฆฝ์— HTTP๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ ํ›„์˜ ํ†ต์‹ ์€ WebSocket ๋…์ž์˜ ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • header๊ฐ€ ์ƒ๋‹นํžˆ ์ž‘์•„ overhead๊ฐ€ ์ ์€ ํŠน์ง•์ด ์žˆ๋‹ค.
  • ์žฅ์‹œ๊ฐ„ ์ ‘์†์„ ์ „์ œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ‘์†ํ•œ ์ƒํƒœ๋ผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์†ก์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ์˜ ์†ก์ˆ˜์‹ ์— ๊ฐ๊ฐ ์ปค๋„ฅ์…˜(connection)์„ ๋งบ์„ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์œผ๋กœ ์†ก์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ†ต์‹ ์‹œ, ์ง€์ •๋˜๋Š” URL์€ http://www.sample.com/ ๊ณผ ๊ฐ™์€ ํ˜•์‹์ด ์•„๋‹ˆ๋ผ ws://www.sample.com/ ๊ณผ ๊ฐ™์€ ํ˜•์‹์ด ๋œ๋‹ค.

[๋ถ‰์€ ๋ฐ•์Šค] : Opening Hanadshake
[๋…ธ๋ž€ ๋ฐ•์Šค] : Data transfer
[๋ณด๋ผ ๋ฐ•์Šค] : Closing Handkshake

์›น์†Œ์ผ“์€ HTTP๋กœ Handshake๋ฅผ ํ•œ ํ›„, ws๋กœ ํ”„๋กœํ† ์ฝœ์„ ๋ณ€ํ™˜ํ•˜์—ฌ, ์›น์†Œ์ผ“ ํ”„๋ ˆ์ž„์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.
์›น์†Œ์ผ“์€ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ (full-duplex)์„ ์ง€์›ํ•˜๋ฉฐ, ๊ทธ๋ž˜์„œ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

(1) Opening Handshake

์›น์†Œ์ผ“ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•ธ๋“œ์‰์ดํฌ ์š”์ฒญ(HTTP Upgrade)์„ ์ „์†กํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํ•ธ๋“œ ์…ฐ์ดํฌ ์‘๋‹ต์„ ๋ฐ›๋Š”๋ฐ, ์ด๋•Œ ์‘๋‹ต ์ฝ”๋“œ๋Š” 101์ด๋‹ค.
101์€ 'ํ”„๋กœํ† ์ฝœ ์ „ํ™˜'์„ ์„œ๋ฒ„๊ฐ€ ์Šน์ธํ–ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ด ๊ณผ์ •์—์„œ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ—ค๋”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
ws://localhost:8080/chat ์œผ๋กœ ์ ‘์†ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •.

GET /chat HTTP/1.1
Host: localhost:8080
Upgrade: websocket
// ํ”„๋กœํ† ์ฝœ์„ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ—ค๋”. 
// ์›น์†Œ์ผ“ ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ websocket์ด๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ์ด ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐ’์ด๋ฉด cross-protocol attack์ด๋ผ๊ณ  ๊ฐ„์ฃผํ•˜์—ฌ ์›น์†Œ์ผ“ ์ ‘์†์„ ์ค‘์ง€์‹œํ‚จ๋‹ค.
Connection: Upgrade
// ํ˜„์žฌ์˜ ์ „์†ก์ด ์™„๋ฃŒ๋œ ํ›„ ๋„คํŠธ์›Œํฌ ์ ‘์†์„ ์œ ์ง€ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ์ •๋ณด. 
// ์›น์†Œ์ผ“ ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ Upgrade๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, Upgrade์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐ’์ด๋ฉด ์›น์†Œ์ผ“ ์ ‘์†์„ ์ค‘์ง€์‹œํ‚ต๋‹ˆ๋‹ค. 
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
// ์œ ํšจํ•œ ์š”์ฒญ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‚ค ๊ฐ’.  
Sec-WebSocket-Protocol: chat, superchat
// ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์›น ์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ ์ง€์ •. 
// ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ.
Sec-WebSocket-Version: 13
// ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „. 
// ํ˜„์žฌ ์ตœ์‹  ๋ฒ„์ „ 13
Origin: http://localhost:9000
// ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ์ด ํ—ค๋”๋ฅผ ๋ณด๋‚ธ๋‹ค(Cross-Site WebSocket Hijacking์™€ ๊ฐ™์€ ๊ณต๊ฒฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ). 
// ๋Œ€๋ถ€๋ถ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด ํ—ค๋”๊ฐ€ ์—†๋Š” ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ CORS์ •์ฑ…์ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๋‹ค. 
// ์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋‚˜ ์„œ๋ธŒ ํ”„๋กœํ† ์ฝœ, Referer๋‚˜ Cookie์™€ ๊ฐ™์€ ๊ณตํ†ต ํ—ค๋”, ์ธ์ฆ ํ—ค๋” ๋“ฑ์„ ์ถ”๊ฐ€ํ•ด ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. 

(2) Data Transfer

ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ํ†ตํ•ด ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜๋ฉด, ๋ฐ์ดํ„ฐ ์ „์†ก ํŒŒํŠธ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ '๋ฉ”์‹œ์ง€'๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฉ”์‹œ์ง€๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ 'ํ”„๋ ˆ์ž„'์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
(ํ”„๋ ˆ์ž„์€ ํ…์ŠคํŠธ(UTF-8) ๋ฐ์ดํ„ฐ, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ, ์ปจํŠธ๋กค ํ”„๋ ˆ์ž„(ํ”„๋กœํ† ์ฝœ ๋ ˆ๋ฒจ์˜ ์‹ ํ˜ธ) ๋“ฑ์ด ์žˆ๋‹ค)

ํ•ธ๋“œ ์…ฐ์ดํฌ๊ฐ€ ๋๋‚œ ์‹œ์ ๋ถ€ํ„ฐ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋กœ๊ฐ€ ์‚ด์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด heartbeat ํŒจํ‚ท์„ ๋ณด๋‚ด๋ฉฐ, ์ฃผ๊ธฐ์ ์œผ๋กœ ping์„ ๋ณด๋‚ด ์ฒดํฌํ•œ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์–‘์ธก์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

(3) Close Handshake

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ปจํŠธ๋กค ํ”„๋ ˆ์ž„์€ Closing Handshake๋ฅผ ์‹œ์ž‘ํ•˜๋ผ๋Š” ํŠน์ •ํ•œ ์ปจํŠธ๋กค ์‹œํ€€์Šค๋ฅผ ํฌํ•จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•œ๋‹ค๋Š” ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ Close ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋œ๋‹ค.
์—ฐ๊ฒฐ ์ข…๋ฃŒ ์ดํ›„์— ์ˆ˜์‹ ๋˜๋Š” ๋ชจ๋“  ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ๋ฒ„๋ ค์ง„๋‹ค.


๐Ÿ„ SSL & TLS

ref

profile
boma91@gmail.com

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