λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ΄λ…Έλ² μ΄μ…˜μΊ ν”„/μ§€μ‹μŒ“κΈ°

5μ£Όμ°¨ 과제 React 심화 μ£Όμ°¨ ν‚€μ›Œλ“œ

πŸ” λ¦¬λ•μŠ€μ—μ„œ 미듀웨어 청크의 역할은 λ­˜κΉŒμš”?

λ¦¬λ•μŠ€μ˜ λ„€κ°€μ§€ ꡬ성 μš”μ†Œ

  • λ·°μ—μ„œ μƒνƒœκ°’μ„ λ³€κ²½μ‹œν‚€κ³  싢을 λ•Œ μ•‘μ…˜μ„ λ°œμƒμ‹œν‚¨λ‹€.
    • λ·°μ—μ„œ dispatchλ₯Ό ν˜ΈμΆœν•˜μ—¬, λ¦¬λ•μŠ€μ—κ²Œ μ•‘μ…˜μ΄ λ°œμƒν•¨μ„ μ•Œλ¦¬κ²Œ λœλ‹€.
  • μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λ©΄, κ·Έ μ•‘μ…˜μ„ 미듀웨어가 μ²˜λ¦¬ν•œλ‹€.
    • λ―Έλ“€μ›¨μ–΄λŠ” μ˜΅μ…”λ„μ΄λ‹€. κΈ°λŠ₯을 λ„£μ—ˆλ‹€λ©΄ 미듀웨어가 쀑간에 처리λ₯Όν•˜κ³  미듀웨어가 μ—†λ‹€λ©΄, μ•‘μ…˜μ€ λ°”λ‘œ λ¦¬λ“€μ„œλ‘œ λ„˜μ–΄κ°„λ‹€.
  • λ¦¬λ“€μ„œμ—μ„œλŠ” ν•΄λ‹Ή μ•‘μ…˜μ— μ˜ν•΄μ„œ(μ•‘μ…˜ νƒ€μž…) μƒνƒœλ₯Ό μ–΄λ–»κ²Œ λ³€κ²½ν• μ§€ 둜직이 담겨져 μžˆλ‹€. κ·Έ λ‘œμ§μ— 맞게 μƒˆλ‘œμš΄ μƒνƒœκ°’μ„ λ°˜ν™˜ν•œλ‹€.
  • μƒˆλ‘œμš΄ μƒνƒœκ°’μ€ μŠ€ν† μ–΄μ—κ²Œ λ„λ‹¬ν•˜κ²Œλ˜κ³ , μŠ€ν† μ–΄λŠ” μƒˆλ‘œμš΄ μƒνƒœκ°’μ„ μ €μž₯ν•œλ‹€.
  • μŠ€ν† μ–΄λ₯Ό 바라보고 μžˆλŠ” μ˜΅μ €λ²„λ“€μ΄ μžˆλŠ”λ°, μ˜΅μ €λ²„λ“€μ€ λ°μ΄ν„°μ˜ λ³€κ²½ 사싀을 μ•Œκ²Œλœλ‹€. 주둜 "λ·°"κ°€ μ˜΅μ €λ²„κ°€ λ˜λŠ”λ°, λ·°λŠ” 데이터가 λ³€κ²½ λ˜μ—ˆλ‹€λŠ” 사싀을 μ•Œλ©΄ 화면을 κ°±μ‹ ν•œλ‹€.

λ―Έλ“€μ›¨μ–΄λž€?

λ―Έλ“€μ›¨μ–΄λŠ” μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜ 된 λ‹€μŒ λ¦¬λ“€μ„œμ—μ„œ μ•‘μ…˜μ„ μ²˜λ¦¬ν•˜κΈ° 전에 μ•‘μ…˜μ„ λ°›μ•„μ™€μ„œ μ•‘μ…˜μ„ μ·¨μ†Œμ‹œν‚€κ±°λ‚˜ λ‹€λ₯Έ μ’…λ₯˜μ˜ μ•‘μ…˜μ„ μΆ”κ°€μ μœΌλ‘œ λ””μŠ€νŒ¨μΉ˜ν•˜λŠ”λ“± μ—…λ°μ΄νŠΈ 이전에 좔가적인 μž‘μ—…μ„ ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 역할이닀.

즉 λ¦¬λ“€μ„œ λ‚΄μ˜ μ–΄λ–€ 둜직이 μ‹€ν–‰λ˜κΈ° μ‚¬μ΄μ˜ 쀑간닀리 역할을 해쀄 ν•¨μˆ˜λ“€μ„ μž‘μ„±ν•˜λŠ” 곡간이닀.

πŸ“Ž thunkλ₯Ό μ‚¬μš©ν•˜λ©΄ μš°λ¦¬κ°€ dispatchλ₯Ό ν• λ•Œ 객체가 μ•„λ‹Œ ν•¨μˆ˜λ₯Ό dispatch ν•  수 있게 ν•΄μ€€λ‹€. 즉 dispatch(객체) κ°€ μ•„λ‹ˆλΌ dispatch(ν•¨μˆ˜)λ₯Ό ν•  수 있게 λ˜λŠ” 것.κ·Έλž˜μ„œ 쀑간에 μš°λ¦¬κ°€ ν•˜κ³ μž ν•˜λŠ” μž‘μ—…μ„ ν•¨μˆ˜λ₯Ό 톡해 넣을 수 있고, 그것이 쀑간에 싀행이 λ˜λŠ” 것이닀. κ·Έλž˜μ„œ μ•„λž˜ 흐름과 같이 싀행이 되며 이 ν•¨μˆ˜λ₯Ό thunk ν•¨μˆ˜λΌκ³  λΆ€λ₯Έλ‹€.dispatch(ν•¨μˆ˜) → ν•¨μˆ˜μ‹€ν–‰ → ν•¨μˆ˜μ•ˆμ—μ„œ dispatch(객체)보톡 μš°λ¦¬κ°€ λ¦¬λ•μŠ€ 미듀웨어λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μ„œλ²„μ™€μ˜ 톡신을 μœ„ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 λŒ€λΆ€λΆ„μ΄λ‹€.

 

πŸ” ν”„λ‘œλ―ΈμŠ€λŠ” μ •ν™•νžˆ λ§ν•˜λ©΄ 비동기가 μ•„λ‹™λ‹ˆλ‹€. 비동기와 ν”„λ‘œλ―ΈμŠ€λŠ” 각각 λ¬΄μ—‡μΌκΉŒμš”?

동기와 λΉ„λ™κΈ°μ˜ ꡬ뢄은 μš”μ²­λ°›κ³  μ‘λ‹΅λ°›λŠ” μ‹œκ°„λŒ€μ˜ 차이이닀.

μš”μ²­ν•˜κ³ -μ‘λ‹΅λ°›λŠ” μ‹œκ°„μ„ ν•˜λ‚˜μ˜ λ°•μŠ€(box)둜 μ •μ˜ν•œλ‹€λ©΄, λ™κΈ°λŠ” λ°•μŠ€ μ•ˆμ—μ„œ 움직이고, λΉ„λ™κΈ°λŠ” λ°•μŠ€λ₯Ό λ²—μ–΄λ‚˜ μž‘λ™λ˜λŠ” 원리이닀.

  1. λ™κΈ°μš”μ²­μ„ ν•˜λ©΄ (λ°”λ‘œ) 응닡을 λ°›λŠ”λ‹€λŠ” μ˜λ―Έμš”μ²­κ³Ό 응닡이 같은 μ‹œκ°„λŒ€ “μ•ˆμ—” κ³ μ •λ˜μ–΄ μžˆμ–΄, μš”μ²­μ— λŒ€ν•΄ 응닡이 μ™„λ£Œλ˜κΈ°κΉŒμ§€ ν”„λ‘œκ·Έλž¨μ΄ μ •μ§€ν•œλ‹€.
  2. 응닡을 λ°›κ³ λ‚˜μ„œμ•Ό λΉ„λ‘œμ†Œ λ‹€μ‹œ μ§„ν–‰λ˜λŠ” νŠΉμ„±μ„ κ°€μ§„λ‹€.λΉ„λ™κΈ°μš”μ²­ ν•œ λ‚΄μš©μ„ μ–Έμ  κ°„ 응닡해 쀄 κ²ƒμ΄λΌλŠ” 약속을 μ˜λ―Έν•œλ‹€.
  3. μš”μ²­-응닡 κ°„ 결합이 μžμœ λ‘œμ›Œ ν”„λ‘œκ·Έλž¨μ΄ 응닡 λ°›κΈ° μœ„ν•΄ λŒ€κΈ°ν•˜μ§€ μ•Šκ³  μ§„ν–‰λ˜λŠ” νŠΉμ„±μ΄ μžˆλ‹€. μΆ”ν›„ 응닡을 받은 ν›„ λ‹€μŒ λ‘œμ§μ„ μˆ˜ν–‰ ν•œλ‹€.
  4. Promiseμžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 비동기 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ μ½œλ°±μ„ μ‚¬μš©ν•œλ‹€. PromiseλŠ” 전톡적인 콜백 νŒ¨ν„΄μ΄ κ°€μ§„ 단점을 일뢀 λ³΄μ™„ν•˜λ©° 동기 처리 μ‹œμ μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•œλ‹€.
  5. PromiseλŠ” 비동기 처리 λ‘œμ§μ„ μΆ”μƒν™”ν•œ 객체와 그것을 μ‘°μž‘ν•˜λŠ” 방식을 λ§ν•œλ‹€. Promise κ°μ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ μΈμžκ°€ 같은 λ°©μ‹μœΌλ‘œ ν†΅μΌλœλ‹€. λ³΅μž‘ν•œ 비동기 처리λ₯Ό μ‰½κ²Œ νŒ¨ν„΄ν™”ν•  수 μžˆλ‹€.

πŸ” TDZ(Temporal Dead Zone/μΌμ‹œμ  μ‚¬κ°μ§€λŒ€)λž€?

TDZ λž€?

TDZ λž€ Temporal Dead Zone 의 μ•½μžλ‘œ 우리 말둜 λ²ˆμ—­ν•˜λ©΄ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€λΌλŠ” 의미이며, μŠ€μ½”ν”„ μ‹œμž‘ ~ μ΄ˆκΈ°ν™” μ‹œμž‘ μ‚¬μ΄μ˜ ꡬ간을 μ˜λ―Έν•œλ‹€. λ‹€λ₯Έ 말둜 λ³€μˆ˜κ°€ μ„ μ–Έλ˜κ³  λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”κ°€ 이루어지기 μ „κΉŒμ§€μ˜ ꡬ간이라고 말할 수 μžˆλ‹€.

TDZ μ—μ„œλŠ” μ„ μ–Έ 되기 μ „μ΄κ±°λ‚˜ μ΄ˆκΈ°ν™” 되기 전인 μƒνƒœμ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

κ·Έλž˜μ„œ TDZ ꡬ간 λ•Œ μ„ μ–Έλ˜μ§€ μ•Šκ±°λ‚˜ μ΄ˆκΈ°ν™” 전인 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ²Œ 되면 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λœλ‹€.

λ³€μˆ˜ 생성 단계

TDZ λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” Javascript 의 λ³€μˆ˜ 생성 단계λ₯Ό λ¨Όμ € μ•Œμ•„μ•Ό ν•œλ‹€.

  1. μ„ μ–Έ 단계 (Declaration phase): λ³€μˆ˜λ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ³€μˆ˜ 객체에 λ“±λ‘ν•˜λŠ” 단계이닀.
  2. μ΄ˆκΈ°ν™” 단계 (Initialization phase): μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘ν•œ λ³€μˆ˜λ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬λ₯Ό λ§Œλ“œλŠ” 단계, λ©”λͺ¨λ¦¬κ°€ λ§Œλ“€μ–΄μ§€λ©΄ μ²˜μŒμ—λŠ” undefined κ°€ ν• λ‹Ήλœλ‹€.
  3. ν• λ‹Ή 단계 (Assignment phase): μ‚¬μš©μžκ°€ undefined 둜 ν• λ‹Ήλœ λ³€μˆ˜μ— λ‹€λ₯Έ 값을 ν• λ‹Ήν•˜λŠ” 단계이닀.
  • var λŠ” μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™” 단계가 λ™μ‹œμ— 이루어진닀.
  • let, const λŠ” μ„ μ–Έ, μ΄ˆκΈ°ν™”, ν• λ‹Ή 단계가 각각 λ”°λ‘œ 이루어진닀.
  • function (ν•¨μˆ˜ μ„ μ–Έλ¬Έ) 은 μ„ μ–Έ, μ΄ˆκΈ°ν™”, ν• λ‹Ή 단계가 λ™μ‹œμ— 이루어진닀.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™” 단계가 λ”°λ‘œ 이루어 μ§€λŠ” let, const 같은 κ²½μš°λŠ” TDZ에 영ν–₯을 받을 수 밖에 μ—†λ‹€.

 

TDZ μ˜ˆμ‹œ

좜처: https://velog.io/@leejpsd

TDZ 에 영ν–₯을 λ°›λŠ” 것

  1. let
  2. const
  3. class
  4. class의 constructor() λ‚΄λΆ€μ˜ super() (ν•΄λ‹Ή 클래슀의 contructor μ—μ„œ super ν•¨μˆ˜κ°€ 호좜되기 μ „κΉŒμ§€λŠ” ν•΄λ‹Ή ν΄λž˜μŠ€μ—μ„œ this λ₯Ό μ°Έμ‘°ν•˜λ©΄ μ—λŸ¬ λ°œμƒ)
  5. ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜ (λ§€κ°œλ³€μˆ˜ μ„ μ–Έ 전에 μ°Έμ‘°ν•˜λ©΄ μ—λŸ¬ λ°œμƒ)

TDZ 에 영ν–₯을 λ°›μ§€ μ•ŠλŠ” 것

  1. var
  2. function (ν•¨μˆ˜ 선언식)
  3. import (import ꡬ문)

 

 πŸ”‘ Q1. λ¦¬λ•μŠ€ 미듀웨어λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜ 된 λ‹€μŒ, λ¦¬λ“€μ„œμ—μ„œ ν•΄λ‹Ή μ•‘μ…˜μ„ λ°›μ•„μ™€μ„œ μ—…λ°μ΄νŠΈν•˜κΈ° 전에 좔가적인 μž‘μ—…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 좔가적인 μž‘μ—…λ“€μ—λŠ” 무엇이 μžˆμ„κΉŒμš”?

  • νŠΉμ • 쑰건에 따라 μ•‘μ…˜μ΄ λ¬΄μ‹œλ˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€.
  • μ•‘μ…˜μ„ μ½˜μ†”μ— 좜λ ₯ν•˜κ±°λ‚˜, μ„œλ²„μͺ½μ— λ‘œκΉ…μ„ ν•  수 μžˆλ‹€.
  • μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜ 됐을 λ•Œ 이λ₯Ό μˆ˜μ •ν•΄μ„œ λ¦¬λ“€μ„œμ—κ²Œ μ „λ‹¬λ˜λ„λ‘ ν•  수 μžˆλ‹€.
  • νŠΉμ • μ•‘μ…˜μ΄ λ°œμƒν–ˆμ„ λ•Œ 이에 κΈ°λ°˜ν•˜μ—¬ λ‹€λ₯Έ μ•‘μ…˜μ΄ λ°œμƒλ˜λ„λ‘ ν•  수 μžˆλ‹€.
  • νŠΉμ • μ•‘μ…˜μ΄ λ°œμƒν–ˆμ„ λ•Œ νŠΉμ • μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€.

πŸ”‘Q2. λ¦¬λ•μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

λ¦¬μ•‘νŠΈμ—μ„œ λ°μ΄ν„°λŠ” 단방ν–₯(λΆ€λͺ¨μ—μ„œ μžμ‹ λ°©ν–₯으둜)으둜 흐λ₯΄κΈ° λ•Œλ¬Έμ— μžμ‹μ»΄ν¬λ„ŒνŠΈμ—μ„œ λΆ€λͺ¨μ»΄ν¬λ„ŒνŠΈμ˜ 데이터에 μ ‘κ·Όν•  수 μ—†λ‹€.

λ¦¬λ•μŠ€λŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” μ „μ—­ 데이터λ₯Ό κ΄€λ¦¬ν•΄μ£ΌλŠ” 라이브러리 이닀.

λ¦¬λ•μŠ€λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” μŠ€ν† μ–΄μ™€ 데이터에 μ ‘κ·Όν•΄μ„œ 데이터λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” λ¦¬λ“€μ„œκ°€ μžˆλ‹€.

 

 

좜처 https://www.notion.so/Chapter-3-3-b80a41499fc9485b887906b77f50bafc