상세 컨텐츠

λ³Έλ¬Έ 제λͺ©

[Node.js] 1μž₯ λ…Έλ“œ μ‹œμž‘ν•˜κΈ°

22-23/22-23 Node.js

by Kimpeep 2022. 9. 19. 19:00

λ³Έλ¬Έ

728x90

πŸ” Node.jsλŠ” Chorme V8 Javascript μ—”μ§„μœΌλ‘œ λΉŒλ“œλœ Javascript λŸ°νƒ€μž„μ΄λ‹€.

λ…Έλ“œλŠ” μ „λ°˜μ μœΌλ‘œ μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ‚¬μš©λ˜μ§€λ§Œ, Javascript λŸ°νƒ€μž„μœΌλ‘œμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 데에도 μ‚¬μš©λ  수 μžˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ„œλ²„μ™€ λŸ°νƒ€μž„μ˜ 차이점은 λ¬΄μ—‡μΌκΉŒ?

πŸ“Œ μ„œλ²„

ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)μ—μ„œ μž…λ ₯ ν›„, μš”μ²­μ„ 보내면 λ‚΄λ €λ°›κΈ°, 즉 응닡이 κ°€λŠ₯ν•˜κ²Œ λœλ‹€.

데이터λ₯Ό μƒμ„±ν•˜κ³ , μ €μž₯ν•˜κ³ , μ „μ†‘ν•˜λŠ” 역할을 ν•˜λŠ” 것이 즉 μ„œλ²„μ΄λ‹€.

πŸ“Œ λŸ°νƒ€μž„

νŠΉμ • μ–Έμ–΄λ‘œ λ§Œλ“  ν”„λ‘œκ·Έλž¨λ“€μ„ μ‹€ν–‰ν•  수 μžˆλŠ” ν™˜κ²½μ„ λœ»ν•œλ‹€.

즉, λ…Έλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 싀행기라고 봐도 λ¬΄λ°©ν•˜λ‹€.

 

πŸ” libuv 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©°, 이벀트 기반 및 λ…ΌλΈ”λ‘œν‚Ή I/O λͺ¨λΈμ„ κ΅¬ν˜„ν•œλ‹€.

πŸ“Œ μ΄λ²€νŠΈ 기반

이벀트 (클릭, λ„€νŠΈμ›Œν¬ μš”μ²­ λ“±) λ°œμƒ μ‹œ, 미리 지정해 λ‘” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방식을 μ˜λ―Έν•œλ‹€.

이벀트 λ¦¬μŠ€λ„ˆμ— 콜백 ν•¨μˆ˜λ₯Ό 사전에 등둝해 두고, μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ ν•΄λ‹Ή λ¦¬μŠ€λ„ˆμ— μžˆλŠ” 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식이닀.

 

βœ… 이벀트 루프

μ—¬λŸ¬ μ΄λ²€νŠΈκ°€ λ™μ‹œμ— λ°œμƒν–ˆμ„ λ•Œ, μ–΄λ–€ μˆœμ„œλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• μ§€ νŒλ‹¨ν•˜λŠ” μ—­ν• 

FILO μˆœμ„œλ‘œ 싀행이 되며, λ…Έλ“œκ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μž‘μ—…μ„ λ°˜λ³΅ν•˜κΈ°μ— 루프(Loop)라고도 뢀름

 

πŸ“Œ λ…ΌλΈ”λ‘œν‚Ή I/O λͺ¨λΈ

 I/O == Input, Output, μž…λ ₯/좜λ ₯을 μ˜λ―Έν•˜λ©°, 파일 μ‹œμŠ€ν…œ μ ‘κ·Ό (파일 읽기, μ“°κΈ°, 폴더 λ§Œλ“€κΈ° λ“±)  λ˜λŠ” λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ μš”μ²­ 등이 I/O의 일쒅이 될 수 μžˆλ‹€.

λ…ΌλΈ”λ‘œν‚Ή I/O λͺ¨λΈμ€ 이전 μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜μ§€ μ•Šκ³ , λ°”λ‘œ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

βœ… λΈ”λ‘œν‚Ή λͺ¨λΈ

이전 μž‘μ—…μ΄ λλ‚˜μ•Όμ§€λ§Œ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•¨

 

λ…ΌλΈ”λ‘œν‚Ήμ€ λΈ”λ‘œν‚Ήμ— λΉ„ν•΄ μž‘μ—… μ‹œκ°„λ„ λ‹¨μΆ•λ˜λ©°, 이에 따라 μ„±λŠ₯도 크게 λ‹¬λΌμ§ˆ 수 μžˆλ‹€. 

I/O μž‘μ—…μ΄ 없더라도, 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ μ‹€ν–‰ μˆœμ„œλ₯Ό λ°”κΏ”μ€ŒμœΌλ‘œμ¨ μž‘μ—… μ‹œκ°„μ„ 단좕할 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

λ”λΆˆμ–΄, λ…ΌλΈ”λ‘œν‚Ήκ³Ό λ™μ‹œλŠ” λ‹€λ₯Έ μ˜λ―Έμ΄λ‹€. 

βœ… λ™μ‹œμ„±

λ™μ‹œ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•œ μž‘μ—…μ„ λ…Ό λΈ”λ‘œν‚Ή μ²˜λ¦¬ν•΄μ•Ό 얻을 수 μžˆλŠ” 것

 

πŸ“Œ μ‹±κΈ€ μŠ€λ ˆλ“œλž€?

μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜λΏμ΄λΌλŠ” 것을 μ˜λ―Έν•˜λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ λ™μ‹œμ— 싀행될 수 μ—†λŠ” μ΄μœ μ΄κΈ°λ„ ν•˜λ‹€.

βœ… ν”„λ‘œμ„ΈμŠ€ VS μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€ : μš΄μ˜μ²΄μ œμ—μ„œ ν• λ‹Ήν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„λ‘œ, ν”„λ‘œμ„ΈμŠ€ κ°„ λ©”λͺ¨λ¦¬ λ“±μ˜ μžμ›μ„ κ³΅μœ ν•˜μ§€ μ•ŠμŒ

μŠ€λ ˆλ“œ : ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„λ‘œ, μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•  수 있으며 같은 μ£Όμ†Œμ˜ λ©”λͺ¨λ¦¬λ‘œ 접근이 κ°€λŠ₯ν•΄, 데이터λ₯Ό μ„œλ‘œ κ³΅μœ ν•  수 있음

 

λ…Έλ“œκ°€ μ‹€μ œλ‘œ μ‹±κΈ€ μŠ€λ ˆλ“œμΈ 것은 μ•„λ‹ˆμ§€λ§Œ, μš°λ¦¬κ°€ 직접 μ œμ–΄ν•  수 μžˆλŠ” μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜λΏμ΄κΈ°μ— μ‹±κΈ€ μŠ€λ ˆλ“œλΌκ³  여겨진닀.

μ‹±κΈ€ μŠ€λ ˆλ“œλŠ” 점원 ν•˜λ‚˜κ°€ ν˜Όμžμ„œ λ§Žμ€ 일을 μ²˜λ¦¬ν•  수 μžˆμœΌλ‚˜, CPUλ₯Ό 많이 μ‚¬μš©ν•˜λŠ” μž‘μ—… λ˜λŠ” 점원이 μ•„ν”„κ²Œ 될 경우 λ¬Έμ œκ°€ 생길 수 μžˆλ‹€. 

λ©€ν‹° μŠ€λ ˆλ“œμ— λΉ„ν•΄ λΉ„νš¨μœ¨μ μ΄λΌκ³  느껴질 수 μžˆμœΌλ‚˜, μ‹€μ œλ‘œ λ©€ν‹° μŠ€λ ˆλ“œ λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것은 μ–΄λ €μš°λ―€λ‘œ λ©€ν‹° ν”„λ‘œμ„Έμ‹± 방식을 λŒ€μ‹  μ‚¬μš©ν•œλ‹€.

 

βœ… λ©€ν‹° μŠ€λ ˆλ”© VS λ©€ν‹° ν”„λ‘œμ„Έμ‹±

λ©€ν‹° μŠ€λ ˆλ”© λ©€ν‹° ν”„λ‘œμ„Έμ‹±
ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆ μ—¬λŸ¬ μŠ€λ ˆλ“œ μ‚¬μš© μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€ μ‚¬μš©
CPU μž‘μ—…μ΄ λ§Žμ„ λ•Œ μ‚¬μš© I/O μš”μ²­μ΄ λ§Žμ„ λ•Œ μ‚¬μš©
ν”„λ‘œκ·Έλž˜λ°μ΄ 어렀움 ν”„λ‘œκ·Έλž˜λ°μ΄ 비ꡐ적 쉬움

πŸ” Node.jsκ°€ μ„œλ²„κ°€ λœλ‹€λ©΄?

μ„œλ²„μ—λŠ” I/O μš”μ²­μ΄ 많이 λ°œμƒν•˜κΈ°μ—, I/O μž‘μ—…μ„ λ…ΌλΈ”λ‘œν‚Ή λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” λ…Έλ“œλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ μž₯점이 λ“œλŸ¬λ‚œλ‹€.

κ·ΈλŸ¬λ‚˜  CPU λΆ€ν•˜κ°€ 큰 μž‘μ—…μœΌλ‘œλŠ” μ ν•©ν•˜μ§€ μ•ŠκΈ°μ—, κ°œμˆ˜λŠ” λ§Žμ§€λ§Œ ν¬κΈ°λŠ” μž‘μ€ 데이터λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ£Όκ³ λ°›λŠ” 데에 μ ν•©ν•˜λ‹€.

μ‹€μ‹œκ°„ μ±„νŒ…, 주식 차트, JSON 데이터 제곡 API μ„œλ²„ λ“±μ—μ„œ λ…Έλ“œλ₯Ό 많이 μ‚¬μš©ν•˜κ³  μžˆλ‹€.

 

λ…Έλ“œλŠ” μ›Ή μ„œλ²„λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆμ–΄, WASλ₯Ό μΆ”κ°€λ‘œ μ„€μΉ˜ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€λŠ” μž₯점이 있으며, μžλ°”μŠΌν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜κΈ°μ— μžλ°”μŠ€ν¬λ¦½νŠΈ ν•˜λ‚˜λ‘œ λͺ¨λ“  μ›Ή μ‚¬μ΄νŠΈλ₯Ό μ œμž‘ν•  수 μžˆλ‹€.

 

πŸ” Node.jsλ₯Ό μ„œλ²„ μ™Έμ˜ μš©λ„λ‘œ μ‚¬μš©ν•΄ 보자

μ•žμ„œ μ΄μ•ΌκΈ°ν•œ κ²ƒμ²˜λŸΌ, λ…Έλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ΄κΈ°μ— μ„œλ²„ μ™Έλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

μ›Ή ν”„λ ˆμž„μ›Œν¬μΈ μ•΅κ·€λŸ¬, λ¦¬μ•‘νŠΈ, λ·° 등이 λ…Έλ“œ 기반으둜 λŒμ•„κ°€λŠ” λŒ€ν‘œμ μΈ μ˜ˆμ‹œλΌκ³  ν•  수 있으며,

λͺ¨λ°”일 개발 도ꡬ인 λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ, λ°μŠ€ν¬ν†± 개발 도ꡬ인 μΌλ ‰νŠΈλ‘ λ„ λ…Έλ“œ 기반으둜 λŒμ•„κ°€κ³  μžˆλ‹€.

 

πŸ” Node.js와 κ΄€λ ¨λœ 자료 λͺ¨μŒ.zip

λ…Έλ“œ 곡식 μ‚¬μ΄νŠΈ : https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

λ…Έλ“œ 곡식 κ°€μ΄λ“œ : https://nodejs.org/ko/docs/guides/

 

κ°€μ΄λ“œ | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 


Node.js 

Editor : PeeP 

728x90

κ΄€λ ¨κΈ€ 더보기