πŸ”Žλ…Έλ“œ μ‹œμž‘ν•˜κΈ°

μ„œκ°€ν¬Β·2021λ…„ 10μ›” 6일
1

Node.js

λͺ©λ‘ 보기
1/15
post-thumbnail

Node의 μ •μ˜

크둬 v8 μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μœΌλ‘œ λΉŒλ“œλœ μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„

λŸ°νƒ€μž„ : νŠΉμ • μ–Έμ–΄λ‘œ λ§Œλ“  ν”„λ‘œκ·Έλž¨λ“€μ„ μ‹€ν–‰ν•  수 있게 ν•΄μ£ΌλŠ” 가상 λ¨Έμ‹ (크둬의 V8 엔진 μ‚¬μš©)의 μƒνƒœ
즉, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ§Œλ“  ν”„λ‘œκ·Έλž¨λ“€μ„ μ‹€ν–‰ν•  수 있게 ν•΄ 쀌

Node의 λ‚΄λΆ€ ꡬ쑰

V8 엔진: μ˜€ν”ˆ μ†ŒμŠ€ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 --> 속도 문제 κ°œμ„ 
libuv: λ…Έλ“œμ˜ νŠΉμ„±μΈ 이벀트 기반, λ…ΌλΈ”λ‘œν‚Ή I/O λͺ¨λΈμ„ κ΅¬ν˜„ν•œ 라이브

Node의 νŠΉμ„±

1. 이벀트 기반

μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ 미리 지정해둔 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방식
이벀트의 예: 클릭, λ„€νŠΈμ›Œν¬ μš”μ²­, 타이머 λ“±
이벀트 λ¦¬μŠ€λ„ˆ: 이벀트λ₯Ό λ“±λ‘ν•˜λŠ” ν•¨μˆ˜
콜백 ν•¨μˆ˜: μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ 싀행될 ν•¨μˆ˜

2.λ…ΌλΈ”λ‘œν‚Ή I/O

λ…Ό λΈ”λ‘œν‚Ή: 였래 κ±Έλ¦¬λŠ” ν•¨μˆ˜λ₯Ό λ°±κ·ΈλΌμš΄λ“œλ‘œ λ³΄λ‚΄μ„œ λ‹€μŒ μ½”λ“œκ°€ λ¨Όμ € μ‹€ν–‰λ˜κ²Œ ν•˜κ³ , λ‚˜μ€‘μ— 였래 κ±Έλ¦¬λŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰
λ…Ό λΈ”λ‘œν‚Ή 방식 ν•˜μ—μ„œ 일뢀 μ½”λ“œλŠ” λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ³‘λ ¬λ‘œ 싀행됨
일뢀 μ½”λ“œ: I/O μž‘μ—…(파일 μ‹œμŠ€ν…œ μ ‘κ·Ό, λ„€νŠΈμ›Œν¬ μš”μ²­), μ••μΆ•, μ•”ν˜Έν™” λ“±
λ‚˜λ¨Έμ§€ μ½”λ“œλŠ” λΈ”λ‘œν‚Ή λ°©μ‹μœΌλ‘œ 싀행됨
∴ I/O μž‘μ—…μ΄ λ§Žμ„ λ•Œ λ…Έλ“œ ν™œμš©μ„±μ΄ κ·ΉλŒ€ν™”

λ…Έλ“œλŠ” λΈ”λ‘œν‚Ή&동기, 비동기&λ…ΌλΈ”λ‘œν‚Ή
동기: μ½”λ“œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰
비동기: μ½”λ“œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€

3.ν”„λ‘œμ„ΈμŠ€ vs μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€: μš΄μ˜μ²΄μ œμ—μ„œ ν• λ‹Ήν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„, ν”„λ‘œμ„ΈμŠ€ κ°„ μžμ› 곡유X
μŠ€λ ˆλ“œ: ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„, λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€ μžμ› 곡유

  • λ…Έλ“œ ν”„λ‘œμ„ΈμŠ€λŠ” λ©€ν‹° μŠ€λ ˆλ“œμ΄μ§€λ§Œ 직접 λ‹€λ£° 수 μžˆλŠ” μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ΄κΈ° λ•Œλ¬Έμ— μ‹±κΈ€ μŠ€λ ˆλ“œλΌκ³  ν‘œν˜„
    λ…ΌλΈ”λ‘œν‚Ή- μ½”λ“œ λ™μ‹œμ— μ•ˆ λŒμ•„κ°. λŒμ•„κ°€λ €λ©΄ νŠΉμ •μ‘°κ±΄ 만쑱 λ”°λΌμ„œ λ‚˜λ¨Έμ§€ μŠ€λ ˆλ“œλŠ” 쑰건 만쑱되면 μ½”λ“œλ₯Ό λ™μ‹œμ— 돌림

λ…Έλ“œλŠ” 주둜 λ©€ν‹° μŠ€λ ˆλ“œ λŒ€μ‹  λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ ν™œμš©
(λ…Έλ“œλŠ” 14버전뢀터 λ©€ν‹° μŠ€λ ˆλ“œ μ‚¬μš© κ°€λŠ₯)

4.μ‹±κΈ€ μŠ€λ ˆλ“œ

μ‹±κΈ€ μŠ€λ ˆλ“œλΌ 주어진 일을 ν•˜λ‚˜λ°–μ— μ²˜λ¦¬ν•˜μ§€ λͺ»ν•¨
λΈ”λ‘œν‚Ήμ΄ λ°œμƒν•˜λŠ” 경우 λ‚˜λ¨Έμ§€ μž‘μ—…μ€ λͺ¨λ‘ λŒ€κΈ°ν•΄μ•Ό 함 -> λΉ„νš¨μœ¨ λ°œμƒ

λŒ€μ‹  λ…Ό λΈ”λ‘œν‚Ή λͺ¨λΈμ„ μ±„νƒν•˜μ—¬ 일뢀 μ½”λ“œ(I/O)λ₯Ό λ°±κ·ΈλΌμš΄λ“œ(λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€)μ—μ„œ μ‹€ν–‰ κ°€λŠ₯

  • μš”μ²­μ„ λ¨Όμ € λ°›κ³ , μ™„λ£Œλ  λ•Œ 응닡함
  • I/O κ΄€λ ¨ μ½”λ“œκ°€ μ•„λ‹Œ 경우 μ‹±κΈ€ μŠ€λ ˆλ“œ, λΈ”λ‘œν‚Ή λͺ¨λΈκ³Ό 같아짐
    <μŠ€λ ˆλ“œ ν•˜λ‚˜λŠ” cpu ν•œ μ½”μ–΄λ₯Ό μž‘μ•„λ¨ΉμŒ>

5.λ©€ν‹° μŠ€λ ˆλ“œ λͺ¨λΈκ³Όμ˜ 비ꡐ

μ‹±κΈ€ μŠ€λ ˆλ“œ λͺ¨λΈμ€ μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λŠ” 경우 멈좀

  • ν”„λ‘œκ·Έλž˜λ° λ‚œμ΄λ„ 쉽고, CPU, λ©”λͺ¨λ¦¬ μžμ› 적게 μ‚¬μš©

λ©€ν‹° μŠ€λ ˆλ“œ λͺ¨λΈμ€ μ—λŸ¬ λ°œμƒ μ‹œ μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ—¬ 극볡

  • 단, μƒˆλ‘œμš΄ μŠ€λ ˆλ“œ μƒμ„±μ΄λ‚˜ 놀고 μžˆλŠ” μŠ€λ ˆλ“œ μ²˜λ¦¬μ— λΉ„μš© λ°œμƒ
  • ν”„λ‘œκ·Έλž˜λ° λ‚œμ΄λ„ 어렀움
  • μŠ€λ ˆλ“œ 수만큼 μžμ›μ„ 많이 μ‚¬μš©ν•¨

점원: μŠ€λ ˆλ“œ, μ£Όλ¬Έ: μš”μ²­, μ„œλΉ™: 응닡

6. λ©€ν‹° μŠ€λ ˆλ“œμ˜ ν™œμš©

! λ…Έλ“œ 14버전
λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ worker_threads λͺ¨λ“ˆ λ„μž…
CPUλ₯Ό 많이 μ‚¬μš©ν•˜λŠ” μž‘μ—…μΈ κ²½μš°μ— ν™œμš© κ°€λŠ₯

λ…Έλ“œμ˜ μ—­ν• 

1. μ„œλ²„λ‘œμ„œμ˜ λ…Έλ“œ

μ„œλ²„: λ„€νŠΈμ›Œν¬λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ— μ •λ³΄λ‚˜ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 컴퓨터 λ˜λŠ” ν”„λ‘œκ·Έλž¨
ν΄λΌμ΄μ–ΈνŠΈ: μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚΄λŠ” 주체(λΈŒλΌμš°μ €, λ°μŠ€ν¬νƒ‘ ν”„λ‘œκ·Έλž¨, λͺ¨λ°”일 μ•±, λ‹€λ₯Έ μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚΄λŠ” μ„œλ²„)
ex>
λΈŒλΌμš°μ €(ν΄λΌμ΄μ–ΈνŠΈ, μš”μ²­)κ°€ κΈΈλ²— μ›Ήμ‚¬μ΄νŠΈ(μ„œλ²„, 응닡)에 접속
ν•Έλ“œν°(ν΄λΌμ΄μ–ΈνŠΈ)을 톡해 μ•±μŠ€ν† μ–΄(μ„œλ²„)μ—μ„œ μ•± λ‹€μš΄λ‘œλ“œ

λ…Έλ“œ != μ„œλ²„
ν•˜μ§€λ§Œ, λ…Έλ“œλŠ” μ„œλ²„λ₯Ό ꡬ성할 수 있게 ν•˜λŠ” λͺ¨λ“ˆμ„ 제곡

2. μ„œλ²„λ‘œμ„œμ˜ λ…Έλ“œ

λ…Έλ“œ μ„œλ²„μ˜ μž₯단점

CPU μž‘μ—…μ„ μœ„ν•΄ AWS Lambdaλ‚˜ Google Cloud Functions같은 별도 μ„œλΉ„μŠ€ μ‚¬μš©
νŽ˜μ΄νŒ”, λ„·ν”Œλ¦­μŠ€, λ‚˜μ‚¬, μ›”λ§ˆνŠΈ, λ§ν¬λ“œμΈ, μš°λ²„ λ“±μ—μ„œ 메인 λ˜λŠ” μ„œλΈŒ μ„œλ²„λ‘œ μ‚¬μš©

3. μ„œλ²„ μ™Έμ˜ λ…Έλ“œ

μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ΄κΈ° λ•Œλ¬Έμ— μš©λ„κ°€ μ„œλ²„μ—λ§Œ ν•œμ •λ˜μ§€ μ•ŠμŒ
μ›Ή, λͺ¨λ°”일, λ°μŠ€ν¬νƒ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λ„ μ‚¬μš©
μ›Ή ν”„λ ˆμž„μ›Œν¬: Angular, React, Vue, Meteor λ“±
λͺ¨λ°”일 μ•± ν”„λ ˆμž„μ›Œν¬: React Native
λ°μŠ€ν¬νƒ‘ 개발 도ꡬ: Electron(Atom, Slack, VSCode, Discord λ“± μ œμž‘)
μœ„ ν”„λ ˆμž„μ›Œν¬κ°€ λ…Έλ“œ 기반으둜 λ™μž‘ν•¨

πŸ˜ƒμΆœμ²˜πŸ˜ƒ
Node.js κ΅κ³Όμ„œ - κΈ°λ³ΈλΆ€ν„° ν”„λ‘œμ νŠΈ μ‹€μŠ΅κΉŒμ§€
https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard

0개의 λŒ“κΈ€