Syncerλ?
νμΌ λ³κ²½ κ°μ§
Entity, Model, Types νμΌ λ³κ²½ μΆμ Checksum κΈ°λ° ν¨μ¨μ κ°μ§
μλ μ½λ μμ±
νμ
, μ€ν€λ§, API ν΄λΌμ΄μΈνΈ μμ±Template κΈ°λ° μμ±
HMR μ§μ
κ°λ° μ€ μ€μκ° λ°μνμΌ λ¬΄ν¨ν λ° μ¬λ‘λ
λ©ν° νκ² λκΈ°ν
web, app λ± μ¬λ¬ νλ‘μ νΈ λκΈ°νμλ νμΌ λ³΅μ¬
Syncerμ λμ νλ¦
κ°μ λμ νμΌ
Syncerκ° λ³κ²½μ μΆμ νλ νμΌ ν¨ν΄μ λλ€:| νμΌ νμ | ν¨ν΄ | μ©λ |
|---|---|---|
| Entity | src/application/**/*.entity.json | λ°μ΄ν° ꡬ쑰 μ μ |
| Types | src/application/**/*.types.ts | νμ μ μ |
| Model | src/application/**/*.model.ts | λΉμ¦λμ€ λ‘μ§ |
| Frame | src/application/**/*.frame.ts | νλ μ λ‘μ§ |
| Functions | src/application/**/*.functions.ts | μ νΈ ν¨μ |
| Generated | src/application/sonamu.generated.ts | μμ±λ λ² μ΄μ€ νμΌ |
| Config | src/sonamu.config.ts | Sonamu μ€μ |
| Workflow | src/application/**/*.workflow.ts | μν¬νλ‘μ° μ μ |
| i18n | src/i18n/**/*.ts | λ€κ΅μ΄ νμΌ |
νμΌ ν¨ν΄:
file-patterns.tsμμ κ΄λ¦¬λλ©°, checksumμΌλ‘ λ³κ²½ κ°μ§μλ λκΈ°ν
κ°λ° μλ² μμ΄ μλμΌλ‘ λκΈ°νν μ μμ΅λλ€.μλ λκΈ°ν (HMR)
κ°λ° μλ² μ€ν μ€μλ νμΌ λ³κ²½μ΄ μλμΌλ‘ κ°μ§λκ³ λκΈ°νλ©λλ€.Syncer μ΄λ²€νΈ
Syncerλ EventEmitterλ‘ μ΄λ²€νΈλ₯Ό λ°μμν΅λλ€.| μ΄λ²€νΈ | λ°μ μμ | μ¬μ© μμ |
|---|---|---|
onHMRCompleted | HMR μλ£ μ | νμ μμ νΈλ¦¬κ±° |
Syncer μ‘μ
νμΌ λ³κ²½ μ νμ λ°λΌ λ€λ₯Έ μ‘μ μ΄ μ€νλ©λλ€.1. Entity λ³κ²½ (handleEntityChange)
Entity νμΌμ΄ λ³κ²½λλ©΄ μ€ν€λ§λ₯Ό μ¬μμ±ν©λλ€.
νΈλ¦¬κ±°: *.entity.json νμΌ λ³κ²½
μ‘μ
:
- EntityManager μ¬λ‘λ
- μ Entityλ©΄
*.types.tsμμ± - μ€ν€λ§ νμΌ μμ±:
sonamu.generated.tssonamu.generated.sso.ts
- νκ²μ νμΌ λ³΅μ¬
2. Types/Functions/Generated λ³κ²½
νμ νμΌμ΄ λ³κ²½λλ©΄ νκ²μ 볡μ¬ν©λλ€. νΈλ¦¬κ±°:*.types.ts, *.functions.ts, *.generated.ts λ³κ²½
μ‘μ
:
- λ³κ²½λ νμΌ λͺ©λ‘ μμ§
- κ° νκ²(
web,app)μ λ³΅μ¬ sonamuimportλ₯Ό./sonamu.sharedλ‘ λ³κ²½
sonamu.shared.ts: web/appμλ sonamu ν¨ν€μ§κ° μμΌλ―λ‘, κ³΅ν΅ μ νΈλ¦¬ν°λ₯Ό shared νμΌλ‘ μ 곡ν©λλ€.
3. Model/Frame λ³κ²½
Model νμΌμ΄ λ³κ²½λλ©΄ API ν΄λΌμ΄μΈνΈλ₯Ό μ¬μμ±ν©λλ€. νΈλ¦¬κ±°:*.model.ts, *.frame.ts λ³κ²½
μ‘μ
:
- Model, Types, APIs μ¬λ‘λ
- API ν΄λΌμ΄μΈνΈ μμ± (
services.generated.ts) - HTTP ν
μ€νΈ νμΌ μμ± (
sonamu.generated.http) - SSR νμΌ μ¬μμ± (
queries.generated.ts,entry-server.generated.tsx)
4. Config λ³κ²½
μ€μ νμΌμ΄ λ³κ²½λλ©΄ νκ²½ λ³μλ₯Ό λκΈ°νν©λλ€. νΈλ¦¬κ±°:sonamu.config.ts λ³κ²½
μ‘μ
:
.sonamu.envνμΌ μμ±/μ λ°μ΄νΈ- κ° νκ²μ 볡μ¬
web/.sonamu.env
5. Workflow λ³κ²½
μν¬νλ‘μ° νμΌμ΄ λ³κ²½λλ©΄ μ¬λ‘λν©λλ€. νΈλ¦¬κ±°:*.workflow.ts λ³κ²½
μ‘μ
: μν¬νλ‘μ° μ¬λ‘λ λ° λκΈ°ν
6. i18n λ³κ²½
λ€κ΅μ΄ νμΌμ΄ λ³κ²½λλ©΄ SD νμΌμ μ¬μμ±ν©λλ€. νΈλ¦¬κ±°:src/i18n/**/*.ts λ³κ²½
μ‘μ
:
- Locale νμΌμ νκ²μ 볡μ¬
sd.generated.tsμμ± (api, web, app)
Checksum κΈ°λ° λ³κ²½ κ°μ§
Syncerλ νμΌμ checksumμ μ μ₯νμ¬ ν¨μ¨μ μΌλ‘ λ³κ²½μ κ°μ§ν©λλ€.- νμΌ λ΄μ©μ SHA-256 ν΄μ κ³μ°
- μ μ₯λ checksumκ³Ό λΉκ΅
- λ€λ₯΄λ©΄ λ³κ²½μΌλ‘ νλ¨
- λκΈ°ν ν checksum κ°±μ
- λΉ λ₯Έ λ³κ²½ κ°μ§ (νμΌ λ΄μ© λΉκ΅ λΆνμ)
- μ νν λ³κ²½ μΆμ (timestamp μν₯ μμ)
- μ¬λ¬ νμΌ λμ λ³κ²½ μ²λ¦¬
Syncer API
Syncerλ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ¬μ©ν μ μμ΅λλ€.μλ λκΈ°ν
ν νλ¦Ώ μμ±
λͺ¨λ λ‘λ
Syncer μ€μ
sonamu.config.tsμμ Syncer λμμ μ€μ ν μ μμ΅λλ€.
api/src/sonamu.config.ts
κ°λ° μν¬νλ‘μ°
Syncerλ₯Ό νμ©ν μΌλ°μ μΈ κ°λ° νλ¦μ λλ€:1
κ°λ° μλ² μμ
2
Entity μ μ
Sonamu UIμμ Entityλ₯Ό μ μνκ±°λ
.entity.json νμΌμ μμ ν©λλ€.μλ μ€ν:*.types.tsμμ±sonamu.generated.tsκ°±μsonamu.generated.sso.tsκ°±μ- νκ²μ νμΌ λ³΅μ¬
3
Model μμ±
λΉμ¦λμ€ λ‘μ§μ Modelμ μμ±νκ³
@api λ°μ½λ μ΄ν°λ₯Ό μΆκ°ν©λλ€.μλ μ€ν:services.generated.tsκ°±μsonamu.generated.httpκ°±μ- SSR νμΌ κ°±μ
4
νλ‘ νΈμλ κ°λ°
μμ±λ API ν΄λΌμ΄μΈνΈμ Typesλ₯Ό μ¬μ©νμ¬ UIλ₯Ό κ°λ°ν©λλ€.
5
μ€μκ° λ°μ
Modelμ΄λ Entityλ₯Ό μμ νλ©΄ HMRλ‘ μ¦μ λ°μλ©λλ€.λΈλΌμ°μ μλ‘κ³ μΉ¨ μμ΄ λ³κ²½μ¬ν νμΈ κ°λ₯!
λ¬Έμ ν΄κ²°
Syncerκ° λμνμ§ μμ λ
νμΌμ΄ μμ±λμ§ μμ
νμΌμ΄ μμ±λμ§ μμ
νμΈ μ¬ν:
- κ°λ° μλ²κ° μ€ν μ€μΈμ§ νμΈ
- νμΌμ΄ κ°μ λμ ν¨ν΄μ ν¬ν¨λλμ§ νμΈ
- Checksum νμΌ μμ ν μ¬μλ
νκ²μ νμΌμ΄ 볡μ¬λμ§ μμ
νκ²μ νμΌμ΄ 볡μ¬λμ§ μμ
νμΈ μ¬ν:
sonamu.config.tsμsync.targetsνμΈ- νκ² λλ ν 리 μ‘΄μ¬ νμΈ
- νκ² λλ ν 리μ
src/services/λλ ν 리 μμ±
HMRμ΄ λλ¦Ό
HMRμ΄ λλ¦Ό
μ΅μ ν λ°©λ²:
- Node.js μ΅μ λ²μ μ¬μ© (v22+)
- SSD μ¬μ© (HDDλ λλ¦Ό)
- λΆνμν νμΌ μ μΈ
- TypeScript νλ‘μ νΈ λΆλ¦¬ (monorepo)
import μλ¬ λ°μ
import μλ¬ λ°μ
μμΈ:
sonamu importκ° ./sonamu.sharedλ‘ λ³νλμ§ μμν΄κ²°: