Sonamuλ λΉλκΈ° λ°±κ·ΈλΌμ΄λ μμ
μ μ²λ¦¬νλ Workflow μμ€ν
μ μ 곡ν©λλ€. κΈ΄ μμ
μ λ°±κ·ΈλΌμ΄λλ‘ λΆλ¦¬νμ¬ API μλ΅ μλλ₯Ό κ°μ νκ³ , Worker νλ‘μΈμ€λ‘ μμ
μ λΆμ° μ²λ¦¬ν μ μμ΅λλ€.
기본 ꡬ쑰
enableWorker
Worker νλ‘μΈμ€λ₯Ό νμ±νν μ§ κ²°μ ν©λλ€.
νμ
: boolean (μ νμ )
κΈ°λ³Έκ°: false
Workerλ?
- λ³λ νλ‘μΈμ€μμ μμ
μ μ²λ¦¬
- λ©μΈ API μλ²μ μν₯ μμ
- μ¬λ¬ Workerλ₯Ό μ€ννμ¬ λΆμ° μ²λ¦¬ κ°λ₯
νλ‘λμ
νκ²½μμλ enableWorker: trueλ‘ μ€μ νμ¬ Worker μ μ© νλ‘μΈμ€λ₯Ό μ€ννλ κ²μ
κΆμ₯ν©λλ€.
νκ²½ λ³μλ‘ μ μ΄
.env:
workerOptions
Workerμ λμ λ°©μμ μ€μ ν©λλ€.
νμ
: WorkflowOptions (μ νμ )
concurrency
Workerκ° λμμ μ²λ¦¬ν μμ
μμ
λλ€.
νμ
: number
κΈ°λ³Έκ°: 1
κΆμ₯κ°:
1 - λ¨μν μμ
, μμ°¨ μ²λ¦¬ νμ
2-5 - μΌλ°μ μΈ λ°±κ·ΈλΌμ΄λ μμ
10+ - κ°λ²Όμ΄ I/O μμ£Ό μμ
concurrencyλ₯Ό λμ΄λ©΄ λ λ§μ μμ
μ λμμ μ²λ¦¬νμ§λ§, CPUμ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ μ¦κ°ν©λλ€.
usePubSub
λ€μ€ Worker κ° μμ
λΆμ°μ μν΄ Pub/Subμ μ¬μ©ν©λλ€.
νμ
: boolean
κΈ°λ³Έκ°: true
λμ λ°©μ:
false: κ° Workerκ° λ
립μ μΌλ‘ μμ
νλ§
true: PostgreSQL LISTEN/NOTIFYλ‘ μ μμ
μλ¦Όμ μ¦μ μ ν
Pub/Subμ PostgreSQLμ λ΄μ₯ LISTEN/NOTIFY λ©μ»€λμ¦μ μ¬μ©νλ―λ‘, λ³λμ μΈνλΌ(Redis λ±) μ€μΉκ°
νμνμ§ μμ΅λλ€. μ΄λ―Έ ꡬμ±λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ·Έλλ‘ νμ©ν©λλ€.
listenDelay
μμ
μ νμΈνλ μ£ΌκΈ°(λ°λ¦¬μ΄)μ
λλ€.
νμ
: number (ms)
κΈ°λ³Έκ°: 500 (0.5μ΄)
κΆμ₯κ°:
100-500ms - λΉ λ₯Έ μλ΅μ΄ νμν μμ
500-1000ms - μΌλ°μ μΈ λ°±κ·ΈλΌμ΄λ μμ
1000-5000ms - κΈ΄κΈνμ§ μμ μμ
contextProvider
Workerμμ μ€νλλ μμ
μ Contextλ₯Ό μμ±ν©λλ€.
νμ
: (defaultContext) => Context | Promise<Context>
defaultContext ν¬ν¨ νλ:
reply - Fastify reply κ°μ²΄ (null in worker)
request - Fastify request κ°μ²΄ (null in worker)
headers - μμ² ν€λ
createSSE - SSE μ€νΈλ¦Ό μμ±
naiteStore - Naite λ‘κΉ
μ€ν μ΄
컀μ€ν
Context
Worker Contextμμλ requestμ replyκ° nullμ
λλ€. HTTP κ΄λ ¨ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
κΈ°λ³Έ μμ
λ¨μΌ Worker (κ°λ°)
λ€μ€ Worker (νλ‘λμ
)
μ€μ μμ
νκ²½λ³ μ€μ
κ³ λΆν μν¬νλ‘μ°
컀μ€ν
Context
Workflow μ¬μ©
tasks μ€μ ν workflow() ν¨μλ‘ λ°±κ·ΈλΌμ΄λ μμ
μ μ μν©λλ€.
νΈμΆ:
β Workflow μ¬μ©λ²
Worker μ€ν
κ°λ° νκ²½
κ°λ° νκ²½μμλ enableWorker: falseλ‘ λκ³ λ©μΈ νλ‘μΈμ€μμ μ²λ¦¬:
νλ‘λμ
νκ²½
Worker μ μ© νλ‘μΈμ€λ₯Ό λ³λλ‘ μ€ν:
package.json:
λ€μ€ Worker
μ¬λ¬ Workerλ₯Ό μ€ννμ¬ μ²λ¦¬λ μ¦κ°:
PM2λ Dockerλ₯Ό μ¬μ©νλ©΄ μ¬λ¬ Workerλ₯Ό μ½κ² κ΄λ¦¬ν μ μμ΅λλ€.
Pub/Sub λμ λ°©μ
usePubSub: true(κΈ°λ³Έκ°)μΌ λ, Workerλ PostgreSQLμ λ΄μ₯ LISTEN/NOTIFY λ©μ»€λμ¦μ μ¬μ©νμ¬ μ μμ
μλ¦Όμ μμ ν©λλ€. λ³λμ λ©μμ§ λΈλ‘컀(Redis λ±)κ° νμνμ§ μμΌλ©°, μ΄λ―Έ ꡬμ±λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ·Έλλ‘ νμ©ν©λλ€.
μ£Όμμ¬ν
1. Worker Context μ ν
2. enableWorker μ€μ
3. concurrency κ³Όλ€ μ€μ
λ€μ λ¨κ³
Task μ€μ μ μλ£νλ€λ©΄: