μ΄λ²μ μ§ννλ 2κ°μ§ νλ‘μ νΈμμ μΉμμΌμ μ΄μ©ν΄μ μ±ν κΈ°λ₯μ ꡬνν΄μΌνλ€. κ·Έμ μ μΉμμΌμ΄ λμ§ μμ보λλ‘ νμ!
μΉμμΌ(Web Socket)?
μΉμμΌ νλ‘ν μ½μ ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό μ°κ²°νκ³ , μ€μκ°μΌλ‘ ν΅μ μ΄ κ°λ₯νλλ‘ νλ νλ‘ν μ½μ΄λ€. μ¬κΈ°μ μ£Όλͺ©ν΄μΌν μ μ μ€μκ°μ΄λΌλ μ μ΄λ€. HTTP ν΅μ μ κ²½μ° ν΄λΌμ΄μΈνΈκ° μμ²μ 보λ΄λ κ²½μ°μλ§ μλ²κ° μλ΅νλ λ¨λ°©ν₯ ν΅μ μ΄μ§λ§, μΉμμΌμ μλ°©ν₯, μ€μκ° ν΅μ μ νλ€.
λν μΉμμΌμ μ ν리μΌμ΄μ κ³μΈ΅μμ λμνλ©° HTTPμ λ€λ₯΄κ² μν(Stateful) νλ‘ν μ½μ΄λ€. μ°κ²°μ λ§ΊκΈ°μν΄ νλ²μ νΈλμ °μ΄ν¬λ₯Ό μ£Όκ³ λ°κ³ , μ΄νμ μ§μμ μΌλ‘ μ°κ²°μ 보μ₯νλ€. μ΄λ λ§€λ² λ§€μΈμ§ μ μ‘μ μλ‘μ΄ μ°κ²°μ λ§Ίμ νμκ° μμ΄ ν¨μ¨μ μ΄λ€. μ¦, ν΄λΌμ΄μΈνΈμ μλ²κ° νλ²μ μ°κ²°μ λ§ΊμΌλ©΄ κ°μ μ°κ²°μ ν΅ν΄ ν΅μ μ νλ―λ‘ TCP 컀λ₯μ μ λΉμ©μ μλμμλ€.
μΉμμΌμ HTTPμ κ°μ΄ HTTP (80 port) , HTTPS (443 port) μμμ λμνλ€. μ²μμ μ°κ²°μ HTTP νλ‘ν μ½μ μ΄μ©ν΄ νΈλμ °μ΄ν¬λ₯Ό νλ€. κ·Έλ¦¬κ³ μ°κ²°μ΄ μ μμ μΌλ‘ μ΄λ£¨μ΄μ§λ©΄ μλ²μ ν΄λΌμ΄μΈνΈκ°μ WebSocket μ°κ²°(TCP/IP κΈ°λ°) μ΄ μμλλ€.
κ·ΈλΌ μΉμμΌμ΄ λμ€κΈ° μ μλ μ΄λ€ λ°©μμΌλ‘ μ€μκ° ν΅μ μ νμκΉ?
Polling
ν΄λ§ λ°©μμ μΌμ ν μ£ΌκΈ°λ‘ μλ²μ requestλ₯Ό 보λ΄λ λ°©μμ΄λ€.
setTimeout, setInterval λ±μ μ¬μ©ν΄μ μΌμ μ£ΌκΈ°λ‘ μλ²μ μμ²μ 보λ΄λ λ°©μμΈλ°, μ΄λ λΆνμν requestμ connectionμ μμ±ν΄μ μλ²μ λΆλ΄μ μ€λ€. λν μμ²μ£ΌκΈ°κ° μ§§μμ§κ² λλ©΄ λΆνκ° μ¦κ°νκ²λκ³ , μΌμ ν μ£ΌκΈ°λ₯Ό λκ³ ν΅μ μ νλ―λ‘ μλ²½ν μ€μκ°μΌλ‘ 보기 νλ€λ€. κ·Έλ¦¬κ³ HTTP κΈ°λ°μ ν΅μ μ΄κΈ° λλ¬Έμ Request, Response ν€λκ° ν¬λ€.
ν΄λ§ λ°©μμ μ¬μ©νλ κ²½μ°
1. μλ΅μ μ€μκ°μΌλ‘ λ°μ νμκ° μμλ
2. λ€μμ μ¬μ©μκ° λμμ μ¬μ©ν λ
3. facebook μΉμ±ν , googleλ©μ μ λ±
Long Polling
λ‘±ν΄λ§ λ°©μμ ν΄λ§κ³Ό λΉμ·νκ² μΌμ ν μ£ΌκΈ°λ‘ μμ²μ 보λ΄μ§λ§, μλ²κ° μλ΅μ λ°λ‘ μ λ¬νμ§ μλ λ°©μμ΄λ€.
μμ²μ 보λμλ, μλ²κ° μλ΅μ λ°λ‘ 보λ΄μ§μκ³ νΉμ ν μ΄λ²€νΈλ νμμμμ΄ λ°μν λ μλ΅μ μ λ¬νλ€. κ·Έλ¦¬κ³ μλ΅μ λ°μ ν΄λΌμ΄μΈνΈλ λ€μ μλ²λ‘ λ°μ΄ν°λ₯Ό μμ²νλ€. μ΄λ¬ν μ μ λ³Όλ Pollingλ³΄λ€ λΆνμν μμ²μ 보λ΄μ§μμ μ’μ보μ΄μ§λ§, Long Pollingλ λμμ μΈ μμ²κ³Ό μλ΅μ΄ μκΈ°λ©΄ λΆνκ° λ°μνλ€. κ·Έλ¦¬κ³ μ΄λ°©λ²λ HTTP κΈ°λ°μ ν΅μ μ΄μ¬μ ν€λκ° ν¬λ€.
Streaming
μ€νΈλ¦¬λ° λ°©μμ μ΄λ²€νΈκ° λ°μνμλ μλ΅μ μ£Όλλ°, μ΄λ¬ν μλ΅μ μλ£μν€μ§ μκ³ κ³μ μ°κ²°μ μ μ§νλ λ°©μμ΄λ€.
Long Pollingμ λΉν΄ μλ΅λ§λ€ λ€μ μμ²μ νμ§μμ ν¨μΈμ μ΄μ§λ§, μ°κ²°μκ°μ΄ κΈΈμ΄μ§λ©΄ μ ν¨μ±κ΄λ¦¬κ° νλ€μ΄μ§λ€. λν HTTP κΈ°λ°μ ν΅μ μ΄μ¬μ ν€λμ ν¬κΈ°κ° ν¬λ€.
μΉ μμΌ νΉμ§
μ΄λ¬ν λ°©λ²μ λ체 νκΈ° μν΄ λμ¨ νλ‘ν μ½μ΄ μΉμμΌ νλ‘ν μ½μ΄λ€. κ·ΈλΌ μ’ λ μμΈν μμ보μ. μΉμμΌ νλ‘ν μ½μ μ¬μμ ws(websocket) , wss(websocket secure) μ΄λ κ² λκ°μ§κ° μλ€. wssλ λ°μ΄ν° 보μμ μν΄ SSLμ μ μ©ν νλ‘ν μ½μ΄λ€.
μΉμμΌμ μλλ HTTPμ Postλ³΄λ€ λΉ λ₯΄λ©°, μ΅μ΄μ μμ²μμ λ°λμ Get λ©μλλ₯Ό μ¬μ©ν΄μΌνλ€. κ·Έλ¦¬κ³ νλ μμΌλ‘ ꡬμ±λ λ©μΈμ§λΌλ λ Όλ¦¬μ μΈ λ¨μλ₯Ό μ‘μμ νλ€. μ΄λ λ©μΈμ§μ ν¬ν¨λ μ μλ κ΅ν κ°λ₯ν λ©μΈμ§λ ν μ€νΈμ λ°μ΄λ리 λκ° λΏμ΄λ€.
μΉμμΌμ νκ³
1. μΉμμΌμ λͺ¨λ λΈλΌμ°μ μ νΈνλμ§ μλλ€.
μΉμμΌμ HTML5 μ΄νμ 곡κ°λμλ€. μ¦, HTML5 μ΄μ μ κΈ°μ λ‘ κ΅¬νλ μΉμλΉμ€μμλ λμνμ§ μμμλμλ€. μ΄λ¬ν μ μ 보μνκΈ° μν΄ λμ¨κ²μ΄ Sokcet.io , SockJS λ± μ΄λ€. μ΄λ HTML5 μ΄μ μ κΈ°μ λ‘ κ΅¬νλ μλΉμ€μμ μΉμμΌμ μ¬μ©ν μμκ² ν΄μ£Όλλ° μ€μ λ‘λ μΉμμΌμ μ¬μ©νλ κ²μ μλκ³ μΉμμΌμ²λΌ λμνλ κ²μ΄λ€. μμμ μ€λͺ νλ λ°©λ²μ μΉμμΌκ³Ό κ°μ΄ μ€μκ°ννλ‘ μ¬μ©κ°λ₯νκ² ν΄μ€λ€.
2. μΉμμΌμ λ¬Έμμ΄λ§ μ£Όκ³ λ°μ μ μλ€.
μ΄λ₯Ό μν΄ STOMP(Simple Text Oriented Messaging Protocol)μ΄ λ±μ₯νλ€. STOMPλ λ©μΈμ§ μ μ‘μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ νμν νλ‘ν μ½μ΄λ€. λ©μΈμ§ λΈλ‘컀λ₯Ό μ¬μ©ν΄ λ©μΈμ§λ₯Ό Pub / Sub (λ°ν λ° κ΅¬λ ) μλΉμ€λ₯Ό μ΄μ©ν μμλ€. STOMP νλ‘ν μ½μ websocket μμμ λμνλ©°, λ©μΈμ§μ ν€λμ κ°μ μ€μμμ΄ ν€λ κ°μ κΈ°λ°μΌλ‘ ν΅μ μ μΈμ¦μ²λ¦¬λ₯Ό ꡬννλ κ²μ΄ κ°λ₯νκ³ , STOMP μ€νμ μ μν κ·μΉλ§ μμ§ν€λ©΄ μ¬λ¬ μΈμ΄ νλ«νΌκ° λ©μΈμ§λ₯Ό μνΈμ΄μ© κ°λ₯νλ€.