3κ° μ§λ¬Έ
π‘[CS μ€λ¬΄ Point: OS κ³μΈ΅μ μλ νμ© (epoll / kqueue)] λ¨μΌ μ€λ λλΌκ³ ν΄μ μ»΄ν¨ν°κ° μ λ§λ‘ νΌμ μΌνλ κ²μ μλλλ€. νμΌ μ½κΈ°λ λ€νΈμν¬ ν΅μ κ°μ λ¬΄κ±°μ΄ μμ μ Node.jsκ° μ§μ μ²λ¦¬νμ§ μκ³ , μ΄μ체μ 컀λμ΄ μ 곡νλ κ³ μ±λ₯ μ΄λ²€νΈ ν΅μ§ API(Linuxμ epoll, macOSμ kqueue λ± μμ€ν μ½)λ₯Ό ν΅ν΄ μ΄μ체μ μκ² μ² μ νκ² μμ(Offloading)ν©λλ€. μ¦, Node.jsμ λ©μΈ μ€λ λλ κ΅ν΅μ λ¦¬λ§ μμ£Ό λΉ λ₯΄κ² μνν λΏ, μ€μ λ¬΄κ±°μ΄ μ§μ OS 컀λμ΄ λ°±κ·ΈλΌμ΄λμμ λλ₯΄κ³ μλ κ²μ λλ€.
μλ νμΈμ, μ μ€λͺ μμ μ§λ¬Έμ΄ μμ΅λλ€.
μ΄μ체μ μ μμνλ μμ κ³Ό libuv μ€λ λ νμ μ컀 μ€λ λκ° μ΄λ€ μ°κ΄μ΄ μκ³ μ΄λ»κ² μ κΈ°μ μΌλ‘ λμνλμ§ κΆκΈν©λλ€.
Answer 2
1
μλ νμΈμ λ°μμ‘λ, μ§λ¬Έ μ£Όμ μ κ°μ¬ν©λλ€.
μ΄ λΆλΆμ μ μ΄ν΄νκ³ λμ΄κ°λ κ²μ μμ€ν μ 체λ₯Ό μ‘°λ§νλ©° μ리λ₯Ό κΈ°λ°μΌλ‘ μ μ΄ν μ μλ μλμ΄ λ λ²¨λ‘ λμκ°κΈ° μν΄ κΌ μ§κ³ λμ΄κ°μΌ ν μ’μ μ§λ¬Έμ λλ€. κ²°λ‘ λΆν° λͺ ννκ² λ§μλ리면, λ§μ λΆλ€μ΄ λͺ¨λ λΉλκΈ° μμ μ΄ μ€λ λ ν(Thread Pool)λ‘ κ°λ€κ³ μκ°νμ§λ§ μ€μ λ‘λ κ·Έλ μ§ μμ΅λλ€. Node.js(μ ννλ libuv λΌμ΄λΈλ¬λ¦¬)λ μμ μ μ±κ²©μ΄λ νλμ¨μ΄μ νΉμ±μ λ°λΌ μ΄μ체μ (OS) 컀λμ μ§μ μμν μ§, μλλ©΄ μμ μ΄ κ΄λ¦¬νλ μ컀 μ€λ λ ν(Worker Thread Pool)μ λμ§μ§λ₯Ό μ² μ νκ² λΆλ¦¬ν΄μ μ²λ¦¬ν©λλ€. μ΄ λ κ°μ§κ° μ΄λ»κ² λλκ³ , λ μ΄λ»κ² μ κΈ°μ μΌλ‘ λ§λ¬Όλ € λμκ°λμ§ μ»΄ν¨ν° 곡ν(CS)μ νλμ¨μ΄ λ 벨λΆν° μμΈν μ€λͺ ν΄ λ³΄κ² μ΅λλ€.
본격μ μΈ μ€λͺ μ μμ, μ½κ² μ΄ν΄νμ€ μ μλλ‘ ν΅μ¬ μ©μ΄ λ€ κ°μ§λ₯Ό λ¨Όμ κ°λ³κ² μ§κ³ λμ΄κ°κ² μ΅λλ€. μ²«μ§Έλ‘ μ€λ λ(Thread)λ μ»΄ν¨ν°κ° μμ μ μ²λ¦¬νλ κ°μ₯ μμ μμ μ λ¨μλ‘, μλΉμ μ§μ ν λͺ μ΄λΌκ³ μκ°νμλ©΄ λ©λλ€. λμ§Έλ‘ λΈλ‘νΉ(Blocking)μ μ΄ μ§μμ΄ κ³ κΈ°λ₯Ό κ΅½λλΌ λΆν μμ λ λμ§ λͺ»νκ³ λ€λ₯Έ μλμ μ£Όλ¬Έμ μ ν λ°μ§ λͺ»νλ λ©μΆ€ μνλ₯Ό λ§ν©λλ€. μ μ§Έλ‘ μ€νλ‘λ©(Offloading)μ λ§€λμ κ° μ§μ κ³ κΈ°λ₯Ό κ΅½μ§ μκ³ μ£Όλ°© λ΄λΉμλ μΈλΆ μ 체μ κ·Έ μΌμ λ λ겨 μμνλ ν¨μ¨μ μΈ νλμ λλ€. λ§μ§λ§μΌλ‘ μ€λ λ ν(Thread Pool)μ μΌμ΄ μκΈΈ λλ§λ€ μ§μμ μλ‘ λ½λ λμ , 미리 κ³ μ©ν΄ λ 4λͺ μ λμ μ λ΄ λκΈ°μ‘°λ₯Ό μλ―Έν©λλ€.
μ΄μ νλμ¨μ΄μ CSμ κ΄μ μμ λκ° μ§μ§ μΌμ νλμ§ μ΄ν΄λ³΄κ² μ΅λλ€. μ»΄ν¨ν°μ ν΅μ¬ λΆνλ€μ μλ μ°¨μ΄κ° ν½λλ€. CPUλ μ΄λΉ μλ§μ μ°μ°μ νλ λ§€μ° λΉ λ₯Έ μ₯μΉμ΄λ©°, RAMμ CPUκ° μμ ν λ°μ΄ν°λ₯Ό μ¬λ €λλ λκ³ λΉ λ₯Έ μμ λμ λλ€. λ°λ©΄ Network Card(NIC)λ μΈλΆ μΈν°λ·λ§κ³Ό ν΅μ νλ μΆμ ꡬλ‘μ μλμ μΌλ‘ λλ¦¬κ³ μΈμ λ°μ΄ν°κ° μ¬μ§ λͺ¨λ₯΄λ νΉμ±μ΄ μμΌλ©°, Storage(SSD/HDD)λ λ°μ΄ν°λ₯Ό μꡬ μ μ₯νλ κ±°λν μ°½κ³ λ‘ λ¬Όλ¦¬μ μ΄κ³ ꡬ쑰μ μΈ νκ³ λλ¬Έμ κ°μ₯ λ립λλ€.
Node.jsμ λ©μΈ μ€λ λμΈ μ΄λ²€νΈ 루νλ μ€μ§ CPUμ RAM μμμλ§ μμ£Ό λΉ λ₯΄κ² λμκ°λλ€. μΈλΆ λ°μ΄ν°λ₯Ό κΈ°λ€λ €μΌ νλ λ€νΈμν¬ ν΅μ μ΄λ, λλ¦° νλλμ€ν¬λ₯Ό λ€μ ΈμΌ νλ μμ μ λ©μΈ μ€λ λκ° λ¬Άμ¬λ²λ¦¬λ λΈλ‘νΉ μνκ° λλ©΄ μ 체 μλ²κ° λ©μΆκ² λ©λλ€. κ·Έλμ Node.jsλ μ΄ λ¬΄κ±°μ΄ μ§λ€μ μΈλΆλ‘ μ€νλ‘λ©νμ¬ λκΈ°λλ°, μ¬κΈ°μ λ κ°μ§ λ€λ₯Έ κ²½λ‘κ° λ°μν©λλ€.
μ΄ λ κ°μ§ μμ κ²½λ‘λ OS 컀λκ³Ό μ€λ λ νλ‘ λλ©λλ€. libuvλ λ©μΈ μ€λ λμκ² λΉλκΈ° μμ μ λ°μμ λ, μ΄ μμ μ΄ λ€νΈμν¬ ν΅μ μΈμ§ μλλ©΄ νμΌ μ μΆλ ₯μ΄λ CPU μ°μ°μΈμ§ νλ¨νμ¬ μμ μ λ€λ₯Έ κ³³μΌλ‘ 보λ λλ€.
첫 λ²μ§Έ κ²½λ‘λ μ£Όλ‘ λ€νΈμν¬ ν΅μ μμ λ°μνλ OS 컀λ μμ(epoll / kqueue)μ λλ€. μ΄μ체μ (OS)λ μ΄λ―Έ λ€νΈμν¬ μΉ΄λ(NIC)λ₯Ό λ€λ£¨λ λ° μμ΄ μ λ¬Έκ°μ λλ€. λ€νΈμν¬ μμΌ ν΅μ μ΄λ HTTP μμ² λ±μ΄ λ€μ΄μ€λ©΄, libuvλ μ€λ λ νμ λκΈ°μ‘°λ₯Ό μ°μ§ μκ³ , λμ OS 컀λμκ² μ΄ μμΌμμ λ°μ΄ν°κ° λ€μ΄μ€λ©΄ λνν μλ €λ¬λΌκ³ μλλ§ λ§μΆκ³ λ€λμμλλ€. μ€μ λ‘ λ°μ΄ν°λ₯Ό λ°κ³ RAMμ μ μ¬νλ κ²μ NICμ OSκ° μμμ μ²λ¦¬νλ©°, μμ μ΄ λλλ©΄ OSκ° μλμ μΈλ € λ©μΈ μ€λ λμκ² κ°μ Έκ°λΌκ³ ν΅μ§ν©λλ€.
λ€λ§ μ¬κΈ°μ ν κ°μ§ μ£Όμν΄μΌ ν μμΈκ° μμ΅λλ€. λλ©μΈ μ£Όμλ₯Ό IPλ‘ λ°κΎΈλ dns.lookup() λ©μλμ κ²½μ°, OSμ λκΈ°μ μΈ μμ€ν
ν¨μλ₯Ό μ¬μ©νκΈ° λλ¬Έμ λ€νΈμν¬ μμ
μμλ μμΈμ μΌλ‘ OS 컀λμ΄ μλ libuv μ€λ λ νμ μ¬μ©νκ² λ©λλ€. μ΄λ μ€λ¬΄μμ λ³λͺ©μ μΆμ ν λ μμ£Ό μ€μν ν¬μΈνΈμ
λλ€.
λ λ²μ§Έ κ²½λ‘λ μ£Όλ‘ νμΌ I/O, μνΈν, μμΆμμ μ¬μ©λλ libuv μ€λ λ ν μμμ λλ€. νμΌ μμ€ν μ κ·Όμ μ΄μ체μ λ§λ€ λΉλκΈ°λ₯Ό μ§μνλ λ°©μμ΄ ννΈνλμ΄ μκ³ , μνΈνλ μμΆ κ°μ΄ μμνκ² CPUλ₯Ό λ§μ΄ μ¨μΌ νλ μ°μ°μ OS 컀λμ λΉλκΈ° APIλ‘ ν΄κ²°νκΈ° μ΄λ ΅μ΅λλ€. μ΄λ libuvκ° κΊΌλ΄ λλ κ²μ΄ λ°λ‘ κΈ°λ³Έκ° 4κ°λ₯Ό κ°μ§ μ€λ λ νμ λλ€. λ©μΈ μ€λ λκ° μ΄ νμΌμ μ½μ΄μ€λΌκ±°λ λΉλ°λ²νΈλ₯Ό μνΈνν΄ λ¬λΌκ³ νλ©΄, libuvλ μ€λ λ νμ μ컀 μ€λ λ μ€ νλλ₯Ό κΉ¨μμ κ·Έ μΌμ μ λ΄μν΅λλ€. μ΄ μ컀 μ€λ λλ λ°±κ·ΈλΌμ΄λμμ μ΄μ¬ν νμΌμ μ½κ±°λ μ°μ°μ ν λ€, λλλ©΄ λ©μΈ μ€λ λμκ² κ²°κ³Όλ₯Ό λλ €μ€λλ€. μ컀 μ€λ λ μμ²΄κ° λΈλ‘νΉλλλΌλ λ©μΈ μ€λ λμλ λΆλ¦¬λμ΄ μμΌλ λ©μΈ μ€λ λλ μμ νκ² λ€λ₯Έ μΌμ κ³μν μ μμ΅λλ€.
μ΄ λͺ¨λ κ³Όμ μ μ’ ν©νμ¬ λν λ μ€ν λμ μ΄μ μμ€ν μ λΉμ ν΄ λ³΄κ² μ΅λλ€. λ©μΈ μ€λ λλ νμ μ΄κ΄νλ λ¨ 1λͺ μ λ§€λμ λ‘μ, μλμ μ£Όλ¬Έμ λ°κ³ μμ±λ μ리λ₯Ό μλΉνλ κ΅ν΅μ λ¦¬λ§ νλ©° μ£Όλ°©μ λ€μ΄κ°μ μ§μ μ리νμ§ μμ΅λλ€. RAMμ λ§€λμ κ° μ£Όλ¬Έμμ μμ±λ μ리λ₯Ό μμλ‘ μ¬λ €λλ μΉ΄μ΄ν° ν μ΄λΈ μν μ ν©λλ€. OS 컀λκ³Ό NICλ μΈλΆ λ°°λ¬ λνμ¬κ° μμμ μλ Ήν΄ κ°λ μλν λλΌμ΄λΈμ€λ£¨ μμ€ν κ³Ό κ°μΌλ©°, libuv μ€λ λ νμ μ°½κ³ μμ λ¬΄κ±°μ΄ μμμ¬λ₯Ό κΊΌλ΄μ€κ±°λ μ₯μκ° κ³ κΈ°λ₯Ό ꡬμμΌ νλ 4λͺ μ μ λ΄ νΉμ μμ λ°κ³Ό κ°μ΅λλ€.
μ΄λ₯Ό λ°νμΌλ‘ μ¬μ©μκ° μ¬μ§μ²© μ±μ μ μν΄ νλ‘ν μ¬μ§μ μμ²νλ APIλ₯Ό νΈμΆνλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. λ¨Όμ μΈν°λ·λ§μ νκ³ λ€μ΄μ¨ μλμ μμ²μ΄ μλ²μ ν΅μ μ₯λΉμ λμ°©ν©λλ€. OSλ μ΄ μμ²μ μ‘°λ¦½ν΄ μΉ΄μ΄ν°μΈ RAMμ μ¬λ €λκ³ λ§€λμ μΈ λ©μΈ μ€λ λμκ² μλμ μΈλ¦½λλ€. μλμ λ€μ λ§€λμ λ λ¬λ €κ° μ£Όλ¬Έμλ₯Ό νμΈνκ³ , μ¬μ§ νμΌμ μ€ν 리μ§μμ μ½μ΄μμΌ νλ€λ κ²μ νμ ν©λλ€. λ§€λμ λ μ΄ μμ μ μμ μ΄ μ§μ νκ±°λ λλΌμ΄λΈμ€λ£¨ μ₯λΉκ° ν μ μλ€λ κ²μ μκΈ° λλ¬Έμ, μ¦μ 4λͺ μ νΉμ μμ λ°μΈ μ€λ λ ν μ€ λκΈ°νκ³ μλ 1λͺ μκ² μμ μ§μμλ₯Ό λμ§κ³ λ€λ₯Έ μλμ μ£Όλ¬Έμ λ°μΌλ¬ νμ°ν λ λ©λλ€.
κ·Έλμ μ컀 μ€λ λλ μ§ν μ°½κ³ λ‘ λ΄λ €κ° 물리μ μΈ νλλμ€ν¬λ₯Ό λ€μ Έμ μ¬μ§μ κ°μ Έμ΅λλ€. μμ μ΄ λλλ©΄ νΉμ μμ λ°μ μΉ΄μ΄ν°μ μ¬μ§μ μ¬λ €λκ³ λ§€λμ μκ² μμ μ΄ λλ¬λ€λ νμλ₯Ό λ¨κΉλλ€. λ§€λμ λ νμ λλ€κ° μ΄λ₯Ό λ³΄κ³ μΉ΄μ΄ν°λ‘ μμ μ¬μ§μ μ±κΈ΄ λ€, μ¬μ§μ μλμκ² λ³΄λ΄κΈ° μν΄ λ€μ λλΌμ΄λΈμ€λ£¨μ λ°°μΆκ΅¬ μμΌμ λ°μ΄ν°λ₯Ό λμ Έ λ£κ³ OSμκ² μ μ‘μ μ§μνλ©° λμ λ§Ίμ΅λλ€. μ€μ λ€νΈμν¬ λ°κΉ₯μΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ κ²μ ν΅μ μ₯λΉμ OSκ° μμμ μ²λ¦¬ν©λλ€.
μμ½νμλ©΄, λ©μΈ μ€λ λλ μ¬μ§ μκ³ OS 컀λκ³Ό μ€λ λ ν μμͺ½μΌλ‘ μμ
μ μ€νλ‘λ©νμ¬ λμ§κ³ μλ£λ κ²°κ³Όλ₯Ό λ°μμ€λ 컨νΈλ‘€ νμ μν μ μνν©λλ€. λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄λ HTTP ν΅μ κ°μ λ€νΈμν¬ ν΅μ μ OS 컀λμ΄ μ λ΄νλ―λ‘ μ€λ λ νμ μ ν μλͺ¨νμ§ μμΌλ©°, μ΄ λλΆμ μλ§ κ°μ λμ μ μ μ²λ¦¬κ° κ°λ₯ν΄μ§λλ€. λ°λ©΄ νμΌ μ
μΆλ ₯μ΄λ μνΈνλ libuv μ€λ λ νμ΄ λ°±κ·ΈλΌμ΄λ μ€λ λλ₯Ό μλͺ¨νμ¬ μ²λ¦¬νκ² λ©λλ€. μ΄ μμ
μ΄ λ무 λͺ°λ¦¬λ©΄ μ€λ λ ν 4κ°κ° κ½ μ°¨μ λ³λͺ©μ΄ λ°μν μ μμΌλ―λ‘ μν©μ λ°λΌ μ€λ λ νμ ν¬κΈ°λ₯Ό μ‘°μ νλ νλμ΄ νμνκΈ°λ ν©λλ€. μ΄λ Node.jsμ νκ²½ λ³μμΈ UV_THREADPOOL_SIZEλ₯Ό μ€μ νμ¬ μ€λ λ νμ ν¬κΈ°λ₯Ό μ μ΄ν μ μμ΅λλ€. κΈ°λ³Έκ°μ 4μ΄μ§λ§, μλ²μ 물리μ μ½μ΄ μλ μμ
νΉμ±μ λ§μΆ° μ΅λ 1024κΉμ§ λ릴 μ μμ΄ μνΈνλ μμΆ κ°μ λ¬΄κ±°μ΄ μμ
μ΄ λ§μ λ μ μ©ν©λλ€. μ΄μ²λΌ μ΄μ체μ μμ€ν
μ½κ³Ό μ€λ λ νμ μλ‘ λ€λ£¨λ μμμ΄ λͺ
νν λ€λ₯΄λ©°, μ΄λ²€νΈ 루νλ₯Ό μ€μ¬μΌλ‘ μλ²½νκ² λΆμ
νμ¬ μ κΈ°μ μΌλ‘ μλ²λ₯Ό μ΄μνκ² λ§λ€μ΄ μ€λλ€.
λ§μ§λ§μΌλ‘, μ€μ μ€λ¬΄ μν© μμ λ₯Ό ν΅ν΄ μ΄ λ©μ»€λμ¦μ΄ μ΄λ»κ² μ μ©λλμ§ μ΄ν΄λ³΄κ² μ΅λλ€. μ°λ¦¬κ° νν λ§λλ 'νμκ°μ κΈ°λ₯'μ κ°λ°νλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ¬μ©μκ° μ΄λ©μΌκ³Ό λΉλ°λ²νΈλ₯Ό μ λ ₯νκ³ κ°μ λ²νΌμ λλ₯΄λ©΄, λ¨Όμ μ¬μ©μμ κ°μ λ°μ΄ν°κ° μλ²μ λμ°©νλ κ³Όμ μ λ€νΈμν¬ ν΅μ μ΄λ―λ‘ OS 컀λμ΄ μ μ μΌλ‘ λ΄λΉν©λλ€. λ°μ΄ν°κ° λͺ¨λ λμ°©νλ©΄ OS 컀λμ΄ λ©μΈ μ€λ λμκ² μλ¦Όμ μ£Όκ³ , λ©μΈ μ€λ λλ μμ² λ°μ΄ν°λ₯Ό νμΈν©λλ€. κ·Έλ€μ, 보μμ μν΄ μ¬μ©μμ λΉλ°λ²νΈλ₯Ό ν΄μ±(Bcrypt λ±)νλ κ³Όμ μ κ±°μ³μΌ νλλ°, μ΄ μμ μ CPU μ°μ°μ λ§€μ° λ§μ΄ μꡬνλ λ¬΄κ±°μ΄ μμ μ λλ€. λ§μ½ λ©μΈ μ€λ λκ° μ΄λ₯Ό μ§μ μ²λ¦¬νλ©΄ κ·Έλμ λ€λ₯Έ μ¬μ©μμ μ μμ λ°μ§ λͺ»νλ λΈλ‘νΉ μνκ° λλ―λ‘, λ©μΈ μ€λ λλ μ€λ λ νμ μλ μ컀 μ€λ λμκ² λΉλ°λ²νΈ μνΈνλ₯Ό μ€νλ‘λ©νμ¬ μμν©λλ€.
μ컀 μ€λ λκ° λ°±κ·ΈλΌμ΄λμμ μνΈνλ₯Ό λ§μΉκ³ κ²°κ³Όλ₯Ό λλ €μ£Όλ©΄, μ΄μ λ©μΈ μ€λ λλ μ΄ μμ±λ λ°μ΄ν°λ₯Ό λ°μ΄ν°λ² μ΄μ€(DB)μ μ μ₯ν΄μΌ ν©λλ€. ν₯λ―Έλ‘κ²λ μ ν리μΌμ΄μ μλ²κ° DB μλ²μ ν΅μ νλ κ³Όμ μ λ΄λΆλ§μ΄λ μΈλΆλ§μ΄λ κ²°κ΅ λ€νΈμν¬ ν΅μ μ λλ€. λ°λΌμ λ©μΈ μ€λ λλ μ΄λ²μλ μ€λ λ νμ μ§μμ λΆλ₯΄μ§ μκ³ , λ€μ OS 컀λμκ² λ°μ΄ν°λ₯Ό DBλ‘ λ³΄λ΄κ³ λ΅λ³μ΄ μ€λ©΄ μλ €λ¬λΌκ³ μ€νλ‘λ©ν©λλ€. μ΅μ’ μ μΌλ‘ DBμμ μ μ₯ μλ£ μλ΅μ΄ μ€λ©΄ OS 컀λμ΄ λ©μΈ μ€λ λμκ² μλ¦Όμ μ£Όκ³ , λ©μΈ μ€λ λλ λΉλ‘μ μ¬μ©μμκ² κ°μ μλ£ λ©μμ§λ₯Ό μ μ‘νκ² λ©λλ€. μ΄μ²λΌ λ¨ νλμ νμκ°μ APIλ₯Ό μ²λ¦¬ν λλ, μμ μ μ±κ²©μ΄ CPU μ°μ°μΈμ§ λ€νΈμν¬ ν΅μ μΈμ§μ λ°λΌ μ€λ λ νκ³Ό OS 컀λμ μ€κ°λ©° μ κΈ°μ μΌλ‘ νλ ₯νλ κ²μ΄ Node.js μ€λ¬΄ μλ²μ ν΅μ¬ λμ λ°©μμ λλ€.
μ°Έκ³ ν΄μ£ΌμΈμ!
0
μλ νμΈμ, μΈνλ° AI μΈν΄μ λλ€. λ°μμ‘λ.
Node.jsμ κ΄λ ¨λ κ³ μ±λ₯ μ΄λ²€νΈ μ²λ¦¬μ κ΄λ ¨νμ¬ μ€μν μ¬νμ μ§λ¬Έν΄ μ£Όμ ¨κ΅°μ. λ€μμ μ΄μ체μ μ μν κ³Ό libuv μ€λ λ νμ μ°κ΄μ±μ λν μ€λͺ μ λλ€.
Node.jsμμμ I/O μ²λ¦¬
μ΄μ체μ μν :
- Node.jsλ λΉλκΈ° μ΄λ²€νΈ λλ¦¬λΈ λ°©μμΌλ‘ λμνλ©°, I/O μμ
μ체λ₯Ό μ§μ μννμ§ μκ³ μ΄μ체μ μκ² μμν©λλ€.
- μ΄μ체μ λ
epoll(Linux)λkqueue(macOS)μ κ°μ κ³ μ±λ₯ μ΄λ²€νΈ ν΅μ§ λ©μ»€λμ¦μ ν΅ν΄ νμΌ μ μΆλ ₯, λ€νΈμν¬ μ μΆλ ₯ λ±μ μμ μλ£λ₯Ό Node.js μ΄λ²€νΈ 루νμ ν΅μ§ν©λλ€. μ΄λ¬ν λ°©λ²μ ν΅ν΄ Node.js λ©μΈ μ€λ λλ λΈλ‘νΉ μμ΄ λ€λ₯Έ μμ μ κ³μ μ²λ¦¬ν μ μμ΅λλ€.
- Node.jsλ λΉλκΈ° μ΄λ²€νΈ λλ¦¬λΈ λ°©μμΌλ‘ λμνλ©°, I/O μμ
μ체λ₯Ό μ§μ μννμ§ μκ³ μ΄μ체μ μκ² μμν©λλ€.
libuv μ€λ λ ν:
- μΌλΆ μμ
(μ: νμΌ μ
μΆλ ₯, DNS μ‘°ν λ±)μ μ΄μ체μ κ° μ 곡νλ λΉλκΈ° I/O APIλ₯Ό μ¬μ©νμ§ μκ³ , libuvμ μ€λ λ νμμ μ§μ μ²λ¦¬λ©λλ€.
- libuv μ€λ λ νμ κΈ°λ³Έμ μΌλ‘ 4κ°μ μ컀 μ€λ λλ₯Ό κ°μ§κ³ μμΌλ©°, μ΄λ¬ν μ€λ λλ€μ΄ λΈλ‘νΉ μμ
μ μνν©λλ€.
- μ΄λ° λ°©μμΌλ‘ CPU μ§μ½μ μΈ μμ
μ΄λ μ€λ 걸리λ I/O μμ
μ΄ λ©μΈ μ€λ λμ μν₯μ μ£Όμ§ μλλ‘ λΆλ¦¬ν©λλ€.
- μΌλΆ μμ
(μ: νμΌ μ
μΆλ ₯, DNS μ‘°ν λ±)μ μ΄μ체μ κ° μ 곡νλ λΉλκΈ° I/O APIλ₯Ό μ¬μ©νμ§ μκ³ , libuvμ μ€λ λ νμμ μ§μ μ²λ¦¬λ©λλ€.
μ κΈ°μ μΈ λμ
- Node.jsλ λ©μΈ μ΄λ²€νΈ 루νμμ λ€νΈμν¬λ νμΌ μμ€ν
κ°μ I/O μμ
μμ²μ λ°μΌλ©΄, μμ
μ μ΄μ체μ μ μμνκ±°λ libuv μ€λ λ νμκ² λ§‘κΉλλ€.
- μλ₯Ό λ€μ΄ λ€νΈμν¬ μμ
μ λλΆλΆ μ΄μ체μ μ λΉλκΈ° APIλ₯Ό μ¬μ©ν΄ μ²λ¦¬λμ§λ§, μΌλΆ νμΌ μμ€ν
μμ
μ libuvμ μ€λ λ νμ μ¬μ©νμ¬ λΉλκΈ°λ‘ μ²λ¦¬λ©λλ€.
- μ΄λ μ΄μ체μ μ libuvκ° κ°μμ μν μ μννλ©°, Node.jsκ° ν¨μ¨μ μΌλ‘ λΉλκΈ° μ²λ¦¬λ₯Ό νλλ‘ μ§μνλ ꡬ쑰μ
λλ€.
μΆκ° μλ£μ κ΄λ ¨ μ§λ¬Έ URL:
- Understanding the Node.js Event Loop, Timers, and process.nextTick()
Node.jsκ° μ΄λ»κ² λΉλκΈ° I/Oλ₯Ό ν¨κ³Όμ μΌλ‘ μ²λ¦¬νλμ§λ₯Ό μ΄ν΄νλ©΄ λ³΄λ€ ν¨μ¨μ μΈ μλ² μ ν리μΌμ΄μ μ μ€κ³ν μ μμ΅λλ€. μ λ΄μ©μ΄ λμμ΄ λμ ¨κΈΈ λ°λλλ€. μ΄λ ν μΆκ°μ μΈ μ§λ¬Έλ μΈμ λ μ§ νμν©λλ€!
μ λ μ§λ¬Έμλμ μ΄ν΄λ₯Ό λκ³ μ μ§μ곡μ μλμ κΈ°μ‘΄ λ΅λ³μ μ°Έκ³ νμ¬ μ μ¬ν λ΅λ³ λ§ν¬λ₯Ό μΆμ²ν΄λλ¦¬κ³ μμ΅λλ€.
νμ¬ λ² ν κΈ°λ₯μΌλ‘ λ΅λ³μ΄ λ§μ‘±μ€λ½μ§ μμ μ μλ μ μν΄ λΆνλ립λλ€. π
μΆκ°μ μΌλ‘ κΆκΈν μ μ΄ μμΌμλ©΄, μ΄μ΄μ μ§λ¬Έν΄ μ£ΌμΈμ. κ³§ μ§μ곡μ μκ»μ λ΅λ³ν΄ μ£Όμ€ κ²μ
λλ€.
cacheκ΄λ ¨ μ§λ¬Έ λ립λλ€
0
8
0
React μ Virtual DOM μ μ΄μΌκΈ° μμ μ€νμ΄ μλ©λλ€.
0
19
1
ν μ± μ΄λ»κ² λ°μ?
1
34
1
PPT μλ£ κ³΅μ λ°μ μ μμκΉμ?
0
27
1
4μ£Όμ°¨ λ―Έμ κ²μνμ΄ μ보μ¬μ~
0
31
2
κ°μ μΌμ λ° μμ μλ£ κ³΅μ κ΄λ ¨ λ¬Έμλ립λλ€!
0
22
1
6λ² μ§λ¬Έ
0
42
2
μΌλ° κ°μμ μ°¨μ΄μ ?
1
28
1
μκ°μλ£ ν λ¬Έμ λ립λλ€.
1
34
2
!= μ°μ°μμ μν
0
28
1
JpaCursorItemReaderμ μ λ ¬ 쑰건 λΆμ¬μ μν₯
1
33
2
sizeofλ μ»΄νμΌ νμ μ°μ°μλΌμ CPUλ₯Ό μ¬μ©μΉ μλλ€
0
27
2
μ€μνμ§ μμ§λ§ μ€λͺ νμ λΆλΆμμ μλλΆλΆ..
0
24
0
"μ»΄νμΌ μμ μ μλ κ°μ μ΄λ»κ² μ°Έμ‘°ν κ²μΈκ°?" μΉμ
1
43
2
κ°μ λ£λ μμκ° μ΄λ»κ² λλμ?
0
39
1
stopPropagation()μ λν΄μ μ§λ¬Έ μμ΅λλ€.
0
38
2
12.13) νλ¨ μ¬λ°± μ€νμΌλ§ κ΄λ ¨ μ§λ¬Έ λ립λλ€.
0
55
2
27κ° Contextλ΄ RSC μ¬μ© κ΄λ ¨ λ¬Έμ
0
64
3
νμ΄μ§ μ²λ¦¬μμ offset/limitμ λν μ§λ¬Έ
1
43
1
νΉμ λ€μ κ°μ μ μ μμ λ κ²λ€μ΄ μμκΉμ?
0
60
1
Enable Linting νλͺ©μ μ°Ύμμκ° μμ΅λλ€.
0
38
2
1κ° μ§λ¬Έ
0
53
2
aiκ° λ§λ κ°μμΈκ°μ?
0
106
1
2κ° nodejs 3λ¨κ³ μ€λͺ μ§λ¬Έ
0
78
1

