Skip to main content
workflow() ν•¨μˆ˜λŠ” μž₯κΈ° μ‹€ν–‰ μž‘μ—…, λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…, μŠ€μΌ€μ€„λ§ μž‘μ—…μ„ μ •μ˜ν•©λ‹ˆλ‹€. OpenWorkflowλ₯Ό 기반으둜 내ꡬ성 μžˆλŠ” μ‹€ν–‰, μž¬μ‹œλ„, λͺ¨λ‹ˆν„°λ§μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

μ„€μ • (sonamu.config.ts)

μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ PostgreSQL 섀정이 ν•„μš”ν•©λ‹ˆλ‹€.

μ˜΅μ…˜

name

μ›Œν¬ν”Œλ‘œμš° 이름을 μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’: ν•¨μˆ˜ 이름을 snake_case둜 λ³€ν™˜

version

μ›Œν¬ν”Œλ‘œμš° 버전을 μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’: null
같은 이름에 λ‹€λ₯Έ λ²„μ „μ˜ μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ³‘λ ¬λ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

schema

μž…λ ₯ λ°μ΄ν„°μ˜ Zod μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

schedules

Cron ν‘œν˜„μ‹μœΌλ‘œ μŠ€μΌ€μ€„μ„ μ •μ˜ν•©λ‹ˆλ‹€.
Cron ν‘œν˜„μ‹ μ˜ˆμ‹œ:

μ›Œν¬ν”Œλ‘œμš° ν•¨μˆ˜

μ›Œν¬ν”Œλ‘œμš° ν•¨μˆ˜λŠ” 4개의 λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μŠ΅λ‹ˆλ‹€:

input

μ›Œν¬ν”Œλ‘œμš° μ‹€ν–‰ μ‹œ μ „λ‹¬λœ μž…λ ₯ λ°μ΄ν„°μž…λ‹ˆλ‹€.

step

Step APIλŠ” μ›Œν¬ν”Œλ‘œμš°μ˜ 각 단계λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 각 step은 λ…λ¦½μ μœΌλ‘œ μž¬μ‹œλ„λ˜κ³  볡ꡬ될 수 μžˆμŠ΅λ‹ˆλ‹€.
Step의 μž₯점:
  • 각 step은 ν•œ 번만 싀행됨 (λ©±λ“±μ„±)
  • μ‹€νŒ¨ μ‹œ ν•΄λ‹Ή step만 μž¬μ‹œλ„
  • 이미 μ™„λ£Œλœ step은 κ±΄λ„ˆλœ€

logger

LogTape Logger μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€.

version

ν˜„μž¬ μ›Œν¬ν”Œλ‘œμš°μ˜ λ²„μ „μž…λ‹ˆλ‹€.

μ›Œν¬ν”Œλ‘œμš° μ‹€ν–‰

μˆ˜λ™ μ‹€ν–‰

μŠ€μΌ€μ€„ μ‹€ν–‰

Step API 상세

step.define().run()

ν•¨μˆ˜λ₯Ό step으둜 κ°μ‹Έμ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
μ‚¬μš© μ˜ˆμ‹œ:

step.get().run()

Model λ©”μ„œλ“œλ₯Ό step으둜 μ‹€ν–‰ν•©λ‹ˆλ‹€.
μ‚¬μš© μ˜ˆμ‹œ:

step.sleep()

μ§€μ •λœ μ‹œκ°„ λ™μ•ˆ λŒ€κΈ°ν•©λ‹ˆλ‹€.
μ‹œκ°„ ν˜•μ‹: "10s", "5m", "1h", "1d" μ‚¬μš© μ˜ˆμ‹œ:

μž¬μ‹œλ„ μ •μ±…

Step의 μž¬μ‹œλ„λŠ” OpenWorkflow λ°±μ—”λ“œμ—μ„œ μžλ™μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. λ³„λ„μ˜ retry μ˜΅μ…˜ 섀정이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό

μ›Œν¬ν”Œλ‘œμš° λ‚΄μ—μ„œ Sonamu Model을 자유둭게 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—λŸ¬ 처리

μžλ™ μž¬μ‹œλ„

Step이 μ‹€νŒ¨ν•˜λ©΄ μžλ™μœΌλ‘œ μž¬μ‹œλ„λ©λ‹ˆλ‹€.

μˆ˜λ™ μ—λŸ¬ 처리

컀링 μŠ€νƒ€μΌ (μ˜΅μ…˜ μš°μ„  적용)

workflow()λŠ” μ˜΅μ…˜λ§Œ λ¨Όμ € λ„˜κΈ°κ³  μ‹€ν–‰ ν•¨μˆ˜λ₯Ό λ‚˜μ€‘μ— λ„˜κΈ°λŠ” μ˜€λ²„λ‘œλ“œλ„ μ œκ³΅ν•©λ‹ˆλ‹€. μ˜΅μ…˜ μ •μ˜μ™€ μ‹€ν–‰ λ‘œμ§μ„ λΆ„λ¦¬ν•΄μ„œ 읽고 싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
workflowλŠ” ν•¨μˆ˜μ΄λ©° TypeScript λ°μ½”λ ˆμ΄ν„°κ°€ μ•„λ‹™λ‹ˆλ‹€. @workflow(...)λ₯Ό ν•¨μˆ˜ μ„ μ–Έ μœ„μ— λΆ™μ΄λŠ” ν˜•νƒœλŠ” μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°μ½”λ ˆμ΄ν„°λŠ” ν΄λž˜μŠ€μ™€ 클래슀 λ©€λ²„μ—λ§Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμ˜μ‚¬ν•­

1. λ©±λ“±μ„±

Step은 λ©±λ“±ν•΄μ•Ό ν•©λ‹ˆλ‹€. 같은 μž…λ ₯으둜 μ—¬λŸ¬ 번 싀행해도 같은 κ²°κ³Όλ₯Ό 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2. κΈ΄ μž‘μ—…μ€ step으둜 λ‚˜λˆ„κΈ°

3. Step 이름 κ³ μœ μ„±

Step 이름은 μ›Œν¬ν”Œλ‘œμš° λ‚΄μ—μ„œ κ³ μœ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ‹ˆν„°λ§

μ‹€ν–‰ μƒνƒœ 확인

둜그 확인

μ›Œν¬ν”Œλ‘œμš°λŠ” μžλ™μœΌλ‘œ LogTapeλ₯Ό 톡해 λ‘œκΉ…λ©λ‹ˆλ‹€:

μ˜ˆμ‹œ λͺ¨μŒ

λ‹€μŒ 단계

@api

API μ—”λ“œν¬μΈνŠΈ λ§Œλ“€κΈ°

@transactional

νŠΈλžœμž­μ…˜ μ‚¬μš©ν•˜κΈ°

μŠ€μΌ€μ€„λ§

μž‘μ—… μŠ€μΌ€μ€„λ§ κ°€μ΄λ“œ

OpenWorkflow

OpenWorkflow λ¬Έμ„œ