TIL ( WebSocket )

2024. 6. 25. 22:31ใ†TIL

 

๐Ÿ’กWebSocket์ด๋ž€?

 

 

์›น์†Œ์ผ“

 

- ์›น์†Œ์ผ“(WebSocket)์€ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•œ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ด๋•Œ, ๋ฐ์ดํ„ฐ๋Š” 'ํŒจํ‚ท(packet)' ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

- HTTP์™€์˜ ์ฐจ์ด์ ์œผ๋กœ ์›น์†Œ์ผ“์€ ์–‘๋ฐฉํ–ฅํ†ต์‹ ์ด๊ณ  HTTP๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด์–ด ๋ฐ›๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๋‹จ๋ฐฉํ–ฅ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

 

์ปค๋„ฅ์…˜ ๋งŒ๋“ค๊ธฐ 

 

- ์›น์†Œ์ผ“์€ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ web Socet Api๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€ ์„ค์น˜ ์—†์ด new ์›น์†Œ์ผ“๋งŒ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

- ์›น์†Œ์ผ“ ์ปค๋„ฅ์…˜์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด new WebSocket ์„ ํ˜ธ์ถœํ•˜๋ฉฐ, ์ด๋•Œ ws๋ผ๋Š” ํŠน์ˆ˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

let socket = new WebSocket("ws://javascript.info");

 

โ€ป  ws์™€ wss

 - ws์™€ wss:// ์˜ ๊ด€๊ณ„๋Š” HTTP์™€ HTTPS์˜ ๊ด€๊ณ„์™€ ๋น„์Šทํ•˜๋‹ค. ์ฃผ๋กœ wss://๊ฐ€ ws๋ณด๋‹ค ๋ณด์•ˆ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์ด ๋†’์•„  ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 - ws:// ์‚ฌ์šฉ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด ์•”ํ˜ธํ™” ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ „์†ก๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 - wss://๋Š” TSL( Transport Layer Security)์ด๋ผ๋Š” ๋ณด์•ˆ ๊ณ„์ธต์„ ํ†ต๊ณผํ•˜์—ฌ ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†ก์‹ ํ•˜๋Š” ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ๋‚˜๊ฐ€๊ณ , ๋ณตํ˜ธํ™”๋Š” ์ˆ˜์‹ ์ž ์ธก์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ท ๋‚ด๋ถ€๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

-  ์†Œ์ผ“์ด ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉด ๋„ค ๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

   • open : ์ปค๋„ฅ์…˜์ด ์ œ๋Œ€๋กœ ๋งŒ๋“ค์–ด์กŒ์„ ๋•Œ ๋ฐœ์ƒ

   • message : ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์˜€์„ ๋•Œ ๋ฐœ์ƒ

   • error : ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋ฐœ์ƒ

   • close : ์ปค๋„ฅ์…˜์ด ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒ

 

- ์ปค๋„ฅ์…˜์ด ๋งŒ๋“ค์–ด์ง„ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ socket.send(data)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

- ์˜ˆ์‹œ

     let socket = new WebSocket("wss://example.com/socket");

        // ์—ฐ๊ฒฐ ์„ฑ๊ณต
        socket.onopen = function(event) {
            console.log("WebSocket ์—ฐ๊ฒฐ์ด ์—ด๋ ธ์Šต๋‹ˆ๋‹ค.");
            document.getElementById("messages").innerHTML += "<p>์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</p>";
        };

        // ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ 
        socket.onmessage = function(event) {
            console.log("๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค:", event.data);
            document.getElementById("messages").innerHTML += "<p>์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€: " + event.data + "</p>";
        };

        // ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ
        socket.onerror = function(event) {
            console.error("WebSocket ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค:", event);
        };

        // ์—ฐ๊ฒฐ ๋‹ซํž˜
        socket.onclose = function(event) {
            console.log("WebSocket ์—ฐ๊ฒฐ์ด ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค.");
            document.getElementById("messages").innerHTML += "<p>์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</p>";
        };

        // ๋ฉ”์‹œ์ง€ ์ „์†ก
        document.getElementById("sendButton").onclick = function() {
            let message = document.getElementById("inputMessage").value;
            socket.send(message);
            console.log("๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค:", message);
            document.getElementById("messages").innerHTML += "<p>๋ณด๋‚ธ ๋ฉ”์‹œ์ง€: " + message + "</p>";
        };

 

์›น์†Œ์ผ“ ํ•œ๊ณ„

 

1. HTML5 ์ดํ›„ ๋‚˜์˜จ ๊ธฐ์ˆ ์ด๋ผ HTML5์ด์ „์˜ ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„๋œ ์„œ๋น„์Šค์—์„œ๋Š” ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

2. ์›น์†Œ์ผ“์€ ํ•œ๋ฒˆ ์—ฐ๊ฒฐ๋˜๋ฉด ์—๋Ÿฌ๋˜๋Š” ์ง์ ‘ ์—ฐ๊ฒฐ์„ ๋Š์ง€ ์•Š๋Š” ์ด์ƒ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋งŽ์•„์ง€๋ฉด ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ๊ฒฝ์šฐ ๊ทธ ์ด์œ ์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 

 

 

 

 

** ์ฐธ๊ณ  **

์›น ์†Œ์ผ“ (Web Socket)์ด๋ž€? (velog.io)

์›น์†Œ์ผ“ (javascript.info)

'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TIL( TypeScriptํ•™์Šต )  (0) 2024.06.27
TIL ( TypeScript ํ•™์Šต)  (0) 2024.06.26
TIL (class)  (0) 2024.06.24
TIL( ์ฝ”๋“œ์ดํ•ดํ•˜๊ธฐ )  (0) 2024.06.20
TIL( TypeErrorํ•ด๊ฒฐ)  (0) 2024.06.19