λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🌌 | WEB DEV/NodeJS

[NodeJS] 2. λ…Έλ“œμ˜ νŠΉμ„±

by KASSID 2023. 9. 17.

λͺ©μ°¨

    728x90

    λ…Έλ“œμ˜ 4가지 νŠΉμ„±μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž!

     

    1. 이벀트 기반

    Node.JSλŠ” 이벀트 κΈ°λ°˜μ΄λ‹€.

    μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ 사전에 지정해놓은 μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

     

    - 이벀트 μ˜ˆμ‹œ : 클릭, λ§ˆμš°μŠ€μ˜€λ²„, 슀크둀, get, post λ“±

     

    μ΄λ•Œ 이 이벀트λ₯Ό λ“±λ‘ν•˜λŠ” ν•¨μˆ˜κ°€ 이벀트 λ¦¬μŠ€λ„ˆμ΄λ‹€.

    λ˜ν•œ 이벀트 λ¦¬μŠ€λ„ˆμ—μ„œ 이벀트λ₯Ό κ°μ§€ν•œ 경우 싀행될 ν•¨μˆ˜κ°€ 콜백 ν•¨μˆ˜μ΄λ‹€.

     

    [이벀트]
    1) 이벀트 λ¦¬μŠ€λ„ˆμ— 콜백 ν•¨μˆ˜ 등둝
    2) μ‹œμŠ€ν…œμ—μ„œ 이벀트 λ°œμƒ -> λ¦¬μŠ€λ„ˆμ—μ„œ 감지
    3) λ“±λ‘λœ 콜백 ν•¨μˆ˜ 호좜

     

     μ‚¬μ‹€ 이 κ°œλ…μ€ 거의 λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ›λ¦¬μ— μ μš©λ˜λŠ” κ°œλ…μ΄λ‹€.

     

     


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

    NodeJSλŠ” λΈ”λ‘œν‚Ήμ΄λ©΄μ„œ 동기 / λ…ΌλΈ”λ‘œν‚Ήμ΄λ©΄μ„œ 비동기 이닀. (μš°μ„ , μ΄λ ‡κ²Œ λ‘˜μ”© μ§μ§€μ–΄μ„œ μ•Œκ³ μžˆμž.)

     

    - 동기 : μ½”λ“œκ°€ μˆœμ„œλŒ€λ‘œ λ™μž‘

    - 비동기 : μ½”λ“œκ°€ μˆœμ„œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•ŠμŒ

     

    - λΈ”λ‘œν‚Ή : μ½”λ“œκ°€ μˆœμ„œλŒ€λ‘œ 싀행됨

    - λ…Ό λΈ”λ‘œν‚Ή : μ½”λ“œκ°€ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜μ§€ μ•Šμ„ 수 있음 (μ–΄λ– ν•œ κ·œμΉ™μ— 따라 -> μ‹€ν–‰ Context, 이벀트 루프에 λ“±μž₯)

                       

    λ…Ό λΈ”λ‘œν‚Ήμ€ μ˜€λž˜κ±Έλ¦¬λŠ” ν•¨μˆ˜λ₯Ό λ°±κ·ΈλΌμš΄λ“œλ‘œ 보내고

    λ‹€μŒ μ½”λ“œκ°€ λ¨Όμ € μ‹€ν–‰λ˜κ²Œ ν•˜λŠ” 것을 λ§ν•˜λŠ”λ°

    μ΄λŸ¬ν•œ 방식 ν•˜μ— 일뢀 μ½”λ“œ(I/Oμž‘μ—…, μ••μΆ•, μ•”ν˜Έν™” λ“±)λŠ” λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 병렬 μ‹€ν–‰λœλ‹€.

    (λ‚˜λ¨Έμ§€λŠ” λΈ”λ‘œν‚Ή!)

     

     


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

    OSμ—μ„œ λ“±μž₯ν•˜λŠ” κ°œλ…μΈ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ κ°„λ‹¨νžˆ μ•Œμ•„λ³΄λ©΄

     

    - ν”„λ‘œμ„ΈμŠ€ : OSμ—μ„œ ν• λ‹Ήν•˜λŠ” μž‘μ—…λ‹¨μœ„, ν”„λ‘œμ„ΈμŠ€κ°„ μžμ› 곡유 λΆˆκ°€

    - μŠ€λ ˆλ“œ : ν”„λ‘œμ„ΈμŠ€ λ‚΄ μ‹€ν–‰ μž‘μ—… λ‹¨μœ„, λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€ μžμ› 곡유 

     

    기본적으둜 ν”„λ‘œκ·Έλž¨μ„ ν•˜λ‚˜ λ„μšΈλ•Œλ§ˆλ‹€ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜ λ„μ›Œμ§„λ‹€.

    κ·Έ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ λΆ€λΆ„μ μœΌλ‘œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 것듀이 μŠ€λ ˆλ“œλΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

     

    Node ν”„λ‘œμ„ΈμŠ€λŠ” λ©€ν‹° μŠ€λ ˆλ“œμ΄κΈ΄ ν•˜μ§€λ§Œ

    직접 λ‹€λ£° 수 μžˆλŠ” 것은 ν•˜λ‚˜μ΄κΈ° λ•Œλ¬Έμ— μ‹±κΈ€ μŠ€λ ˆλ“œλΌκ³  ν•œλ‹€.

    (14버전 μ΄ν›„λ‘œλŠ” λ©€ν‹° μŠ€λ ˆλ“œ 컨트둀 κ°€λŠ₯!!)

     

    - 그럼 μ‚¬λžŒμ΄ μ»¨νŠΈλ‘€ν•˜λŠ” 1개의 μŠ€λ ˆλ“œ μ™Έ λ‚˜λ¨Έμ§€λŠ” 무슨 역할을 μˆ˜ν–‰ν• κΉŒ?

    λ‚˜λ¨Έμ§€ μŠ€λ ˆλ“œλŠ” μ½”λ“œλ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•  μ€€λΉ„λ₯Ό ν•˜κ³  μžˆλ‹€.

    (μœ„μ—μ„œ 닀룬 λ…ΌλΈ”λ‘œν‚Ήμ˜ νŠΉμ •ν•œ 쑰건이 좩쑱될 λ•Œ κΉŒμ§€!)

     

    - λ©€ν‹° μŠ€λ ˆλ”©μ„ ν•œλ‹€λ©΄?

    이의 μž₯μ μœΌλ‘œλŠ” λ™μ‹œμ— μ—¬λŸ¬κ°€μ§€λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것이닀.

    즉, λ©€ν‹°νƒœμŠ€ν‚Ήμ΄ κ°€λŠ₯ν•˜λ„λ‘ ν•  수 μžˆλŠ” 것이닀.

    λ˜ν•œ μ—λŸ¬ λ°œμƒμ‹œ μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ—¬ 극볡해낼 수 μžˆλ‹€.

     

    단점은 μ‚¬λžŒμ΄ λ©€ν‹°νƒœμŠ€ν‚Ήμ„ ν•  수 μ—†κΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž˜λ°μ΄ μ–΄λ ΅λ‹€λŠ” 점이 μžˆλ‹€.

    λ˜ν•œ μŠ€λ ˆλ“œ 처리 λΉ„μš©μ΄ λ°œμƒν•˜κ³  μžμ›μ„ 더 μ‚¬μš©ν•˜κ²Œ λœλ‹€.

     

     


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

    μœ„μ—μ„œ 닀룬 μ‹±κΈ€ μŠ€λ ˆλ“œμ™€ λ©€ν‹° μŠ€λ ˆλ“œμ˜ μž₯단점을 νƒ€ν˜‘ν•œ 방식이 NodeJSκ°€ μ±„νƒν•œ 방식은

    μ‹±κΈ€ μŠ€λ ˆλ“œλ₯Ό μ—¬λŸ¬κ°œ μ΄μš©ν•˜λŠ” λ©€ν‹° ν”„λ‘œμ„Έμ‹± 방법이닀.

     

    λΉ„μœ ν•˜μžλ©΄

    λ¨Όμ € ν•œ λͺ…μ˜ 점원이 κ³ κ°λ“€μ˜ μš”μ²­μ„ λ¨Όμ € λͺ¨λ‘ λ°›μ•„λ‘” ν›„, μˆœμ„œλ₯Ό 맀기고, μ£Όλ°©μ—μ„œ λͺ¨λ‘ 처리 μ™„λ£Œκ°€ 되면 응닡을 ν•œλ‹€. (μ‹±κΈ€ μŠ€λ ˆλ“œ)

    ν•˜μ§€λ§Œ μš”μ²­μ΄ λ„ˆλ¬΄ λ§Žμ€ 경우 μ μ›μ΄λ‚˜ 주방이 퍼질 수 μžˆλ‹€.

    이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ μ—¬λŸ¬ 개의 체인점을 두며 μ²˜λ¦¬ν•˜λŠ” 방식을 ν™œμš©ν•œλ‹€. (λ©€ν‹° ν”„λ‘œμ„Έμ‹±)

     

     

    "λ©€ν‹° μŠ€λ ˆλ“œλŠ” μ–΄λ ΅μ§€λ§Œ 효율적으둜 ν”„λ‘œκ·Έλž¨μ„ 돌리고 μ‹Άμ–΄γ… "

    λ₯Ό ν•΄μ†Œν•˜κ³  μ‹Άλ‹€λ©΄ NodeJSλ₯Ό 선택할 수 μžˆλŠ” 것이닀.

    (λ¬Όλ‘  μ•„μ˜ˆ μ‹±κΈ€ μŠ€λ ˆλ“œλ§Œ κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 것보닀 14버전이후 λ©€ν‹° μŠ€λ ˆλ“œλŠ” ν•  수 μžˆλ„λ‘ μ—΄μ–΄ λ†“μ•˜μŒ!)

     

    μœ„μ˜ νŠΉμ„±μ— λ”°λΌμ„œ

    NodeJS의 핡심은 μ‹±κΈ€ μŠ€λ ˆλ“œλ₯Ό μ–Όλ§ˆλ‚˜ 효율적으둜 관리할 수 μžˆλŠ”κ°€! 이닀.

     

    λŒ“κΈ€