Keywords

What is WebSocket? πŸ€ͺ

WebSocket APIλŠ” μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €μ™€ μ„œλ²„ 사이에 **μ–‘λ°©ν–₯ 톡신 μ„Έμ…˜(two-way interactive communication session)**을 μ—¬λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜λ©΄, μ„œλ²„μ— λ©”μ‹œμ§€λ₯Ό λ³΄λƒˆμ„ λ•Œ λ‹΅μž₯을 ν™•μΈν•˜κΈ° μœ„ν•΄ 주기적으둜 μ„œλ²„μ— μš”μ²­μ„ 보낼 ν•„μš” 없이(without having to poll the server for a reply) 이벀트 기반 응닡을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ›Ή νŽ˜μ΄μ§€μ˜ ν•œκ³„μ—μ„œ λ²—μ–΄λ‚˜ μ‹€μ‹œκ°„μœΌλ‘œ μƒν˜Έμž‘μš©ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό λ§Œλ“œλŠ” ν‘œμ€€ κΈ°μˆ μ΄λ―€λ‘œ μ±„νŒ…, κ²Œμž„ λ“±μ˜ μ‹€μ‹œκ°„μ„±μ΄ ν•„μš”ν•œ μ„œλΉ„μŠ€μ—μ„œ μ“°μž…λ‹ˆλ‹€!

Why WebSocket? πŸ€”

1989λ…„ νŒ€ λ²„λ„ˆμŠ€ 리가 웹을 μ°½μ‹œν•  λ•Œλ§Œ 해도, μ›Ή νŽ˜μ΄μ§€μ™€ μ‚¬μš©μžμ˜ μƒν˜Έμž‘μš©μ€ 크게 κ³ λ €λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·Έ λ•ŒλŠ” μ—°κ΅¬κΈ°κ΄€μ—μ„œμ˜ 톡신이 μ£Ό λͺ©μ μ΄μ—ˆμœΌλ‹ˆκΉŒμš”. ν•˜μ§€λ§Œ 웹이 점점 μ „ 세계 μ‚¬λžŒλ“€μ˜ μΌμƒμƒν™œμ— νŒŒκ³ λ“€μ—ˆκ³ , PC용 μ‘μš© ν”„λ‘œκ·Έλž¨(Native Application)을 λŒ€μ²΄ν•  수 μžˆλŠ” μ •λ„κΉŒμ§€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

일반적으둜 μ‚¬μš©μžκ°€ 웹을 μ΄μš©ν•˜λŠ” 방식은 HTTP μš”μ²­μ— λŒ€ν•œ HTTP 응닡을 λ°›μ•„μ„œ λΈŒλΌμš°μ €μ˜ 화면을 κΉ¨λ—ν•˜κ²Œ μ§€μš°κ³  받은 응닡 λ‚΄μš©μ„ μƒˆλ‘œ κ·Έλ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€. νŽ˜μ΄μ§€λ₯Ό μ΄λ™ν•˜λ©΄ λ‚΄μš©μ„ μ§€μš°κ³  λ‹€μ‹œ 그리게 λ˜λ‹ˆ κΉœλΉ‘μž„μ΄ μƒκΉλ‹ˆλ‹€.

μ΄λŸ¬ν•œ κΉœλΉ‘μž„μ„ μ—†μ• κ³  μ›ν•˜λŠ” λΆ€λΆ„λ§Œ λ‹€μ‹œ 그리며 μ‹€μ‹œκ°„μœΌλ‘œ μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” 방식이 λ‚˜νƒ€λ‚˜κ³  μ΄λŸ¬ν•œ μ›Ή μ„œλΉ„μŠ€λ₯Ό μ„ ν˜Έν•˜λŠ” μ‚¬μš©μžκ°€ μ¦κ°€ν•©λ‹ˆλ‹€. 보닀 μ‰½κ²Œ μƒν˜Έμž‘μš©ν•˜λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€λ €λ©΄ λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ 사이에 더 자유둜운 μ–‘λ°©ν–₯ λ©”μ‹œμ§€ μ†‘μˆ˜μ‹ μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ—, WebSocket 기술이 λ“±μž₯ν•©λ‹ˆλ‹€!

Try WebSocket 🀹

μ›Ήμ†ŒμΌ“μ„ μ›Ή λΈŒλΌμš°μ €μ—μ„œ κ°„λ‹¨νžˆ μ‹€μŠ΅μ„ ν•΄λ΄…μ‹œλ‹€!

μ›Ή λΈŒλΌμš°μ €μ˜ 개발자 도ꡬλ₯Ό μΌœμ„œ μ½˜μ†” νƒ­μœΌλ‘œ λ“€μ–΄κ°€λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν•΄λ‹Ή μ›Ή λΈŒλΌμš°μ €κ°€ μ›Ήμ†ŒμΌ“μ„ μ§€μ›ν•˜λŠ”μ§€ μ•Œλ €λ©΄ μ•„λž˜ 슀크립트λ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ True κ°€ λ‚˜μ˜€λŠ”μ§€ 보면 λ©λ‹ˆλ‹€.

if ('WebSocket' in window) {
    console.log('WebSocket exists.')
} else {
    console.log('WebSocket does not exist.')
}

https://www.websocket.org/echo.html μ—μ„œ WebSocket을 μ΄μš©ν•œ Echo Testλ₯Ό ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” μ—¬κΈ°μ„œ μ œκ³΅λ˜λŠ” WebSocket Echo Serverλ₯Ό κ°€μ Έλ‹€ μ“Έκ²Œμš”!

const wsURL = 'wss://echo.websocket.org/'
let websocket = new WebSocket(wsURL)
websocket.onopen = e => console.log('CONNECTED')
websocket.onclose = e => console.log('DISCONNECTED')
websocket.onmessage = e => console.log(`RESPONSE: ${e.data}`)
websocket.onerror = e => console.log(`ERROR: ${e.data}`)

function send(message) {
    console.log(`SENT ${message}`)
    websocket.send(message)
}

μœ„ μ½”λ“œλŠ” WebSocket Echo Server의 URL둜 WebSocket μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³ , μ΄λ²€νŠΈμ— λ”°λ₯Έ ν•Έλ“€λŸ¬ ν•¨μˆ˜λ“€κ³Ό WebSocket에 λ©”μ‹œμ§€λ₯Ό ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f16fd9ea-092f-4685-b729-c8108672eba2/__2021-01-02__4.47.38-1.mov