Boundaryλ?
Boundaryλ βμ¬λ‘λ κ°λ₯ν κ²½κ³βλ₯Ό μλ―Έν©λλ€. HMR μμ€ν μ λ€μκ³Ό κ°μ κ·μΉμΌλ‘ λμν©λλ€:- Boundary νμΌ: λ³κ²½ μ λ€μ λ‘λλ μ μλ νμΌ (Model, API, Entity λ±)
- Non-boundary νμΌ: λ³κ²½ μ μ 체 μλ² μ¬μμμ΄ νμν νμΌ (μ€μ , νκ²½λ³μ λ±)
μ Boundaryκ° νμνκ°?
μ μ importλ Node.js μμ μ ν λ²λ§ μ€νλλ―λ‘ λ°νμμ κ΅μ²΄ν μ μμ΅λλ€:Sonamuμ Boundary μ€μ
Sonamuλ κΈ°λ³Έμ μΌλ‘ νλ‘μ νΈμ λͺ¨λ TypeScript νμΌμ Boundaryλ‘ μ€μ ν©λλ€:src/ μλμ λͺ¨λ νμΌμ HMRμ΄ κ°λ₯νλ©°, λ³κ²½ μ μλμΌλ‘ μ¬λ‘λλ©λλ€.
Boundary νμΌ μμ
Boundary νμΌλ€ (HMR κ°λ₯):user.model.ts- Model νμΌuser.api.ts- API νμΌuser.entity.ts- Entity μ μhelpers.ts- μ νΈλ¦¬ν° ν¨μconstants.ts- μμ μ μ
sonamu.config.ts- Sonamu μ€μ .env- νκ²½λ³μpackage.json- μμ‘΄μ±
Boundary κ·μΉ
1. λμ Import νμ
Boundary νμΌμ λ°λμ λμ μΌλ‘ importλμ΄μΌ ν©λλ€. β μλͺ»λ μ: μ μ importSonamuλ μλμΌλ‘ μ²λ¦¬ν©λλ€
λ€νν Sonamuμ Syncerλ Entity κΈ°λ° νμΌλ€μ μλμΌλ‘ λμ importν©λλ€:2. Boundary κ° μ μ Import νμ©
Boundary νμΌλΌλ¦¬λ μ μ importκ° κ°λ₯ν©λλ€ (Sonamuμ κ°μ μ¬ν):- λ νμΌ λͺ¨λ Boundaryμ΄λ―λ‘
- λ λ€ Syncerμ μν΄ λμ μΌλ‘ λ‘λλ¨
- μλ‘ μ°Έμ‘°ν΄λ HMRμ΄ μ μ μλν¨
3. Non-boundaryμ Boundary Import μ ν
Non-boundary νμΌμ΄ Boundaryλ₯Ό μ μ importνλ©΄ HMRμ΄ μλνμ§ μμ΅λλ€:μ€μ μλ리μ€
User-Post κ΄κ³μμ HMR νμ©νκΈ°
μν©: User Entityμrole νλλ₯Ό μΆκ°νκ³ , Post APIμμ μμ±μ κΆν 체ν¬λ₯Ό μΆκ°νλ €κ³ ν©λλ€.
1λ¨κ³: Entity μμ
user.entity.tsμ λ°μ΄νΈuser.types.tsμ¬μμ±UserModelμ¬λ‘λ
UserModelμ¬λ‘λUserModelμ μ¬μ©νλ λͺ¨λ API μ¬λ‘λ
PostApi.createμ¬λ±λ‘- μλ² μ¬μμ μμ΄ λ°λ‘ ν μ€νΈ κ°λ₯!
μ ν΅μ λ°©μμ΄λΌλ©΄:
- Entity μμ
- Types νμΌ μλ μμ±
- Model νμΌ μμ
- μλ² μ¬μμ (30μ΄)
- API νμΌ μμ
- μλ² μ¬μμ (30μ΄)
- ν μ€νΈ
- Entity μμ (μλ μμ±)
- Model νμΌ μμ (μλ μ¬λ‘λ)
- API νμΌ μμ (μλ μ¬λ‘λ)
- ν μ€νΈ β
볡μ‘ν λΉμ¦λμ€ λ‘μ§ κ°λ°
μν©: μ£Όλ¬Έ μμ± μ μ¬κ³ νμΈ, κ²°μ μ²λ¦¬, μλ¦Ό λ°μ‘μ ꡬνν©λλ€. νμΌ κ΅¬μ‘°:import.meta.hot API
Boundary νμΌμμλimport.meta.hot APIλ₯Ό μ¬μ©νμ¬ HMR λμμ μΈλ°νκ² μ μ΄ν μ μμ΅λλ€.
dispose() - 리μμ€ μ 리
λͺ¨λμ΄ μ¬λ‘λλκΈ° μ μ μ 리 μμ μ μνν©λλ€:- νμ΄λ¨Έ/μΈν°λ² μ 리
- μ΄λ²€νΈ 리μ€λ μ κ±°
- WebSocket μ°κ²° μ’ λ£
- λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ ν μ 리
- νμΌ νΈλ€ λ«κΈ°
decline() - μ 체 μ¬μμ μꡬ
νΉμ λͺ¨λμ HMRμμ μ μΈνκ³ μ 체 μ¬μμμ μꡬν©λλ€:- μ μ μ€μ νμΌ
- λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ€μ
- μ΄κΈ°νκ° λ³΅μ‘ν μ±κΈν€
- μν κ΄λ¦¬κ° κΉλ€λ‘μ΄ λͺ¨λ
boundary κ°μ²΄ - μν 곡μ
Boundary κ° λ°μ΄ν°λ₯Ό 곡μ νμ¬ μ¬λ‘λ νμλ μνλ₯Ό μ μ§ν©λλ€:νμ μ μ
TypeScriptμμimport.meta.hotμ μ¬μ©νλ €λ©΄ νμ
μ μκ° νμν©λλ€:
λλ²κΉ
Boundary μ€μ νμΈ
νΉμ νμΌμ΄ Boundaryλ‘ μ€μ λμ΄ μλμ§ νμΈ:μμ‘΄μ± νΈλ¦¬ μκ°ν
μ±λ₯ μ΅μ ν
λΆνμν Boundary μ μΈ
λͺ¨λ νμΌμ Boundaryλ‘ μ€μ νλ©΄ μμ‘΄μ± νΈλ¦¬κ° μ»€μ Έμ λλ €μ§ μ μμ΅λλ€:μμ‘΄μ± μ΅μν
Model κ° μν μ°Έμ‘°λ₯Ό νΌνκ³ , νμν κ²λ§ import:μμ½
Sonamuμ Boundary μμ€ν : β μλ μ²λ¦¬: Syncerκ° Entity κΈ°λ° νμΌμ μλμΌλ‘ λμ importβ Boundary κ° μ°Έμ‘° κ°λ₯: ModelλΌλ¦¬ μ μ import νμ©
β μΈλ°ν μ μ΄:
import.meta.hot APIλ‘ λ¦¬μμ€ μ 리, μν μ μ§β λλ²κΉ λꡬ:
hot.dump()λ‘ μμ‘΄μ± νΈλ¦¬ νμΈ
λλΆλΆμ κ²½μ° Boundaryλ₯Ό μ κ²½ μΈ νμ μμ΄ Sonamuκ° μλμΌλ‘ μ²λ¦¬ν©λλ€!