Search

Node.js ν•΅μ‹¬κ°œλ…

Node.js ν•΅μ‹¬κ°œλ…

β€’
μ‹±κΈ€ μŠ€λ ˆλ“œ (Single-Threaded)
β€’
λ…ΌλΈ”λ‘œν‚Ή I/O (Non-Blocking I/O)
β€’
이벀트 기반 (Event-Driven)
β€’
npm (Node Package Manager)
β€’
V8 엔진

μ‹±κΈ€ μŠ€λ ˆλ“œ (Single-Threaded)

β€’
Node.jsλŠ” 기본적으둜 μ‹±κΈ€ μŠ€λ ˆλ“œ λͺ¨λΈμ„ μ±„νƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν•˜λ‚˜μ˜ μ£Όμš” μŠ€λ ˆλ“œμ—μ„œ 이벀트 루프λ₯Ό 톡해 λͺ¨λ“  μž‘μ—…μ„ μ²˜λ¦¬ν•œλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
β€’
μ΄λŠ” κ°„λ‹¨ν•œ ꡬ쑰λ₯Ό 가지고 μžˆμ–΄ κ°œλ°œμžκ°€ λ³΅μž‘ν•œ 동기화 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.
μŠ€λ ˆλ“œ(Thread) λž€? μŠ€λ ˆλ“œλŠ” 컴퓨터 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ΅œμ†Œ μ‹€ν–‰ λ‹¨μœ„μž…λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ μŠ€λ ˆλ“œλ‘œ ꡬ성될 수 있으며, 각 μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ λ³‘λ ¬λ‘œ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€ (Process)

: μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›λŠ”Β μž‘μ—…μ˜ λ‹¨μœ„

μŠ€λ ˆλ“œ (Thread)

: ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ ν• λ‹Ή 받은 μžμ›μ„ μ΄μš©ν•˜λŠ”Β μ‹€ν–‰ λ‹¨μœ„

λ…ΌλΈ”λ‘œν‚Ή I/O (Non-Blocking I/O)

β€’
Node.jsλŠ” 비동기 및 λ…ΌλΈ”λ‘œν‚Ή I/Oλ₯Ό μ±„νƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” I/O μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  λ‹€μŒ μž‘μ—…μ„ 계속 μˆ˜ν–‰ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
β€’
μ΄λŸ¬ν•œ μ ‘κ·Ό 방식은 λ§Žμ€ λ™μ‹œ 연결을 λ‹€λ£° λ•Œ 효율적이며, λŒ€μš©λŸ‰ 데이터λ₯Ό λ‹€λ£° λ•Œ λΉ λ₯Έ 응닡성을 μ œκ³΅ν•©λ‹ˆλ‹€.
λΈ”λ‘œν‚Ή vs λ…ΌλΈ”λ‘œν‚Ή λΈ”λ‘œν‚Ήκ³Ό λ…ΌλΈ”λ‘œν‚Ήμ€ ν•¨μˆ˜κ°€ λ°”λ‘œ return λ˜λŠ”μ§€ 여뢀에 따라 정해진닀. λΈ”λ‘œν‚Ή : μž‘μ—…μ΄ μ™„λ£Œλ  λ•Œ return λ…ΌλΈ”λ‘œν‚Ή : λ°”λ‘œ return
동기 vs 비동기 λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… μ™„λ£Œ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ”μ§€ 따라 정해진닀. 동기 : μž‘μ—… μ™„λ£Œ 확인 비동기: μž‘μ—… μ™„λ£Œ 확인

이벀트 기반 (Event-Driven)

β€’
Node.jsλŠ” 이벀트 기반 μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λΉ„λ™κΈ°μ μœΌλ‘œ μž‘μ—…μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
β€’
μ΄λŸ¬ν•œ λͺ¨λΈμ€ μ΄λ²€νŠΈμ— λ°˜μ‘ν•˜κ³  λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

λͺ¨λ“ˆ μ‹œμŠ€ν…œ

β€’
Node.jsλŠ” λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ 기본적으둜 μ œκ³΅ν•˜μ—¬ μ½”λ“œλ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ λΆ€ν’ˆμœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
β€’
CommonJS μŠ€νƒ€μΌμ˜ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ μ±„νƒν•˜μ—¬ μ½”λ“œλ₯Ό κ΅¬μ„±ν•˜κ³  λͺ¨λ“ˆ 간에 μ˜μ‘΄μ„±μ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

npm (Node Package Manager)

β€’
Node.js의 νŒ¨ν‚€μ§€ κ΄€λ¦¬μžμΈ npm은 μˆ˜λ§Žμ€ μ˜€ν”ˆ μ†ŒμŠ€ νŒ¨ν‚€μ§€λ₯Ό μ œκ³΅ν•˜λ©°, κ°œλ°œμžλ“€μ΄ νŒ¨ν‚€μ§€λ₯Ό μ‰½κ²Œ κ³΅μœ ν•˜κ³  μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

V8 엔진

β€’
Node.jsλŠ” Google Chrome λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©λ˜λŠ” V8 JavaScript 엔진을 기반으둜 ν•©λ‹ˆλ‹€. 이 엔진은 λΉ λ₯Έ 속도와 높은 μ„±λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
Node.js의 μ΄λŸ¬ν•œ νŠΉμ§•λ“€μ€ 특히 μ›Ή μ„œλ²„ 및 λ„€νŠΈμ›Œν¬ μ‘μš© ν”„λ‘œκ·Έλž¨ κ°œλ°œμ— μ ν•©ν•˜κ²Œ λ§Œλ“€μ–΄μ Έ μžˆμŠ΅λ‹ˆλ‹€. 비동기적이고 λ…ΌλΈ”λ‘œν‚Ή I/OλŠ” λ™μ‹œμ„±μ„ μ§€μ›ν•˜κ³ , μ‹±κΈ€ μŠ€λ ˆλ“œ λͺ¨λΈμ€ κ°„λ‹¨ν•˜κ³  효율적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.