Node.js λ?
Node.js λ Chrome V8 JavaScript μμ§μΌλ‘ λΉλλ JavaScript λ°νμμ΄λ€. μ¬κΈ°μλ V8 μμ§μ΄ λ€λ₯Έ JS μμ§λ³΄λ€ μλκ° λΉ λ₯΄λ€λ κ²λ§ κΈ°μ΅νλλ‘ νκ³ , λ°νμμ μ΄μ μ λ§μΆμ. λ°νμμ νλ‘κ·Έλλ° μΈμ΄κ° ꡬλλλ νκ²½μ λ§νλ€. μ¦, Node.js λ JavaScript λ₯Ό ꡬλμν€λ νκ²½μ΄λ€.
Node.js νμ λ°°κ²½
μ΄μ κΉμ§λ JavaScript λ μΉ λΈλΌμ°μ μμλ§ μ€νλκ³ , μλ² νκ²½μμ μ¬μ©νλ €λ λλ¦° μλκ° λ°λͺ©μ μ‘μλ€. μ΄ν V8μμ§μ λ±μ₯μΌλ‘ μλκ° λΉ¨λΌμ§ λλΆμ μΉ λΈλΌμ°μ μΈμ νκ²½μμ μΈ μ μλλ‘ νμ€μ λ§λ€μλ λ§μ΄ λ§μμ‘κ³ , κ·Έ λ Έλ ₯μΌλ‘ λ§λ€μ΄μ§ κ²μ΄ λ°λ‘ Node.jsλ€. Node.js λ₯Ό μ€μΉνλ©΄ μ°λ¦¬μ μ»΄ν¨ν°μμ JavaScript λ‘ μμ±λ μ½λλ₯Ό ꡬλμν¬ μ μλ€.
Node.js λ μΉμλ²λ€?
Node.js λ JavaScriptλ₯Ό μλ² νκ²½μμλ μ¬μ©λ μ μλλ‘ κ³ μλ λ°νμμ΄λ€. λ°λΌμ JavaScript λ‘ μμ±λ μλ²λ₯Ό ꡬλμν¬ μ μλ νκ²½μ μ 곡ν΄μ€λ€. μ¦, μΉμλ² μμ²΄κ° μλλΌ μΉμλ²λ₯Ό λ§λ€ μ μλ νκ²½μ΄λ€. λ΄μ₯ HTTP λΌμ΄λΈλ¬λ¦¬λ₯Ό λ΄μ₯νκ³ μλ λ°λ€ λ€μν μΈλΆ λΌμ΄λΈλ¬λ¦¬λ€μ΄ μμ΄μ λ°λ‘ μΉμλ²λ₯Ό λμ°μ§ μμλ λλ€.
* μΉμλ²λ ν΄λΌμ΄μΈνΈλ‘λΆν° HTTP μμ²μ λ°μλ€μ΄κ³ μ μ λ¬Έμ(HTML λ¬Έμ λ±) μ λ°ννλ νλ‘κ·Έλ¨μ΄λ€. λνμ μΌλ‘ Aphach, Nginx κ° μλ€. μΌλ°μ μΌλ‘ λμ μΈ μ²λ¦¬λ₯Ό ν΄μ£Όλ WASμ μλ¨μ λ°°μΉλλ€.
Node.js μ νΉμ§
Non-Blocking, Single-Thread
κΈ°μ‘΄ μΉμλ²λ λλΆλΆ μ€λ λ κΈ°λ°μΌλ‘ I/O λ₯Ό μ²λ¦¬νλ€. Node.js λ λκ·λͺ¨ λ€νΈμν¬ μλΉμ€λ₯Ό κ°λ°νκΈ° μν΄ κ³ μλμ΄ μ΄λ²€νΈ κΈ°λ°μΌλ‘ μ²λ¦¬νλ€.
κ°λ¨ν μμλ₯Ό λ€μ΄ λΉκ΅ν΄λ³΄μλ©΄ 10λΆ κ±Έλ¦¬λ Aμμ , 20λΆ κ±Έλ¦¬λ Bμμ μ΄ μμ λ,
- μ€λ λ κΈ°λ°μμλ Aμμ μ λν μ€λ λμ Bμμ μ λν μ€λ λλ₯Ό μμ±ν΄ λμμ μ€ννλ€. (μμ μ μ€λ λλ‘ λΉλκΈ°λ‘ μ²λ¦¬)
- μ΄λ²€νΈ κΈ°λ°μμλ κ°κ°μ μ€λΉνλ€κ° Aμμ μ΄ μ΄λ²€νΈκ° λ°μνλ©΄ A μμ μ μμνκ³ Bμμ μ΄λ²€νΈκ° λ°μνλ©΄ Bμμ μ μμνλ€. λ§μ½ Aμμ μ€μ Bμμ μ ν΄μΌνλ€λ©΄, Bμμ μ΄λ²€νΈλ₯Ό λ°μμμΌ Aμμ μ μ μ λ©μΆκ³ Bμμ μ μ€ννλ€. (μμ μ μ΄λ²€νΈ κΈ°λ°μΌλ‘ λΉλκΈ°λ‘ μ²λ¦¬)
* μ€λ λλ νλ‘μΈμ€ λ΄ μ΄λ€ μ€νμ νλ¦μ΄λ€.
* μ΄λ²€νΈ κΈ°λ°μ΄λ νΉμ μ΄λ²€νΈκ° λ°μν λκΉμ§ λκΈ°νλ€κ°, λ°μνλ©΄ μ§μ λ μμ μ μννλ λ°©μμ΄λ€. μ΄λ²€νΈλ₯Ό λκΈ°νλ ν¨μλ₯Ό μ΄λ²€νΈ 리μ€λλΌκ³ νκ³ , μ§μ λ μμ κ³Ό κ΄λ ¨λ ν¨μλ₯Ό μ½λ°± ν¨μλΌκ³ νλ€.
μ μλ μμ²λ§λ€ μ€λ λλ₯Ό μμ±νλ―λ‘ λ§μ μμ²μ΄ λ€μ΄μ€λ©΄ κ·Έλ§νΌ λ©λͺ¨λ¦¬λ₯Ό μ‘μλ¨Ήκ² λλ€. λ μ€λ λλ€μ΄ λμμ λκ°μ μμμ νμλ‘ νλ κ²½μ° ν΄λΉ μμμ λν μΆ©λμ΄ μΌμ΄λ μ μλ€.(λ³λͺ©νμ)
νμλ κ° μμ²λ§λ€ μ€λ λλ₯Ό μμ±νμ§ μμΌλ―λ‘ λ©λͺ¨λ¦¬λ₯Ό λ©ν° μ€λ λ νκ²½μμλ³΄λ€ μ κ² μ‘μλ¨Ήλλ€. μ€λ λκ° μ¬λ¬κ°κ° μλλ λμμ λκ°μ μμμ νμλ‘νλ μν©λ λ²μ΄μ§μ§ μλλ€. λ°λΌμ λ§μ μμ²μ΄ λ€μ΄μ€λ νκ²½μμ ν¨μ¨μ μΌλ‘ λμν μ μλ€.
μ¦, Node.js λ μ΄λ²€νΈ κΈ°λ° μμ€ν μΌλ‘ ꡬμ±λμ΄ μκΈ° λλ¬Έμ λΉλκΈ°λ₯Ό ꡬνν μ μκ³ , μ΄ λλΆμ Non-Blocking μ νλμ μ€λ λλ‘ μνν μ μλ€λ νΉμ§μ κ°μ§κ³ μλ€.
* Blocking μ Node.js νλ‘μΈμ€μμ ν μμ μ μ€νμ μν΄ λ€λ₯Έ μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ €μΌ νλ λ°©μμ΄κ³ , Non-Blocking μ κ·Έ λ°λμ΄λ€. Aμμ μ€ Bμμ μ μ€νμμΌμΌν λ, Blocking λ°©μμ΄λΌλ©΄ Aμμ μ΄ λλ λκΉμ§ κΈ°λ€λ €μΌ νκ³ (block) Non-Blocking λ°©μμ΄λΌλ©΄ Aμμ μ΄ λλμ§ μμλλΌλ κΈ°λ€λ¦¬μ§ μκ³ (non-block) Bμμ μ΄ μ€νλ μ μλ€.
μ°Έκ³ λ‘ μ¬κΈ°μλ μμλ₯Ό λ€κΈ° μν΄ μ€λ λλ₯Ό μμ±νμ§ μλλ€κ³ νμ§λ§, μ€μ λ‘λ κ° μμ²μ λν΄ λ΄λΆμ μΌλ‘ λΉλκΈ° μ²λ¦¬λ₯Ό μν μ€λ λλ₯Ό μ¬λ¬κ° μμ±νλ€. λ¨, μμ² μ²λ¦¬ μ체λ μ΄λ²€νΈ 루νλΌλ νλμ μ€λ λ λ΄μμ μ²λ¦¬λκ³ κ°λ°μκ° μ‘°μν μ μλ μ€λ λλ μ΄ μ΄λ²€νΈ 루νλΌλ νλμ μ€λ λ λΏμ΄λΌ μ±κΈ μ€λ λ νκ²½μ΄λΌκ³ λΆλ₯΄λ κ²μ΄λ€.
μ¬κΈ°μλ Node.js κ° μ€μ λ‘ μ΄λ»κ² μμ²μ λ΄λΆμ μΌλ‘ μ²λ¦¬νλμ§λ λ€λ£¨μ§ μλλ€. 그건 κΈΈμ΄μ§ κ² κ°μΌλ λ€μ νμ΄μ§μ...
Node.js λ μΈμ μ¬μ©ν κΉ?
μ€λͺ μμ λ΄€λ―, Node.js μμ μμ²μ μ€λ λ νκ²½κ³Ό λ¬λ¦¬ λ³λ ¬μ μΌλ‘ μ²λ¦¬λλ€. λ°λΌμ μ΄λ²€νΈλ‘ μ²λ¦¬λλ μμ μ μκ°μ΄ μ§§κ³ μ΄λ° μμ²μ΄ μμ£Ό λ§μ΄ λ€μ΄μ€λ μμ€ν μ κ²½μ°λΌλ©΄ Node.js μ νΉμ§μ μ μ΄λ¦΄ μ μλ€. λ°λ©΄ CPU μκ°μ λ§μ΄ μ‘μλ¨Ήλ, μ¦ μ²λ¦¬ μκ°μ΄ κΈ΄ μμ μ΄ λ§μ κ²½μ°μλ λ³λ ¬ μ²λ¦¬λ₯Ό νλ Node.js κ° λΆμ ν©νλ€.
λ JavaScript λ₯Ό μ¬μ©νλ―λ‘ JSON νμμ λ°μ΄ν°λ₯Ό μ½κ² μ²λ¦¬ν μ μλ€. μ°Έκ³ λ‘ Spring μ κ²½μ° JSON νμμ λ°μ΄ν°λ₯Ό λ°λ‘ νμ±ν΄μΌ νλ JSON νμμ λ°μ΄ν°λ₯Ό λ§μ΄ μ¬μ©νλ νλ‘κ·Έλ¨μ΄λΌλ©΄ Node.js κ° μ ν©ν μ μλ€.
EX) κ°λ¨ν ν μ€νΈ/μ΄λ―Έμ§/λμμ λ°μ΄ν°λ₯Ό μ€μκ°μΌλ‘ μ£Όκ³ λ°λ μ±ν νλ‘κ·Έλ¨, μ€μκ° μ£Όμ μ°¨νΈ νλ‘κ·Έλ¨...
λ§μΉλ©°...
μ¬λ¬ κΈμ μ°Έκ³ νμ¬ μ΄ κΈμ΄λΌ μμ§ μ΄ν΄λ λΆμ‘±νκ³ νλ¦° μ 보λ μμ κ²μ΄λ€. λ€λ¬μ΄μΌν λΆλΆλ λ§λ€. μΌλ¨ μκ°μ΄ μ§λκ³ λ€μ νλ² λ΄€μ λ λ μλ‘μ΄ κ²λ€μ΄ 보μΌν λ μ΄νμ λ€λ¬κΈ°λ‘...