Step์ด ํ์ํ ์ด์
Workflow์์ Step์ ์ฌ์ฉํ์ง ์์ผ๋ฉด, ์์ ์ค๊ฐ์ ์คํจํ์ ๋ ์ฒ์๋ถํฐ ๋ค์ ์คํํด์ผ ํฉ๋๋ค. Step์ ์ฌ์ฉํ๋ฉด ์คํจํ ์ง์ ๋ถํฐ ์ฌ๊ฐํ ์ ์์ต๋๋ค.- ๋ถ๋ถ ์ฌ์๋: ์คํจํ step๋ถํฐ ๋ค์ ์คํ
- ์งํ ์ํฉ ์ถ์ : ๊ฐ step์ ์คํ ์๊ฐ๊ณผ ์ํ ํ์ธ
- ๋๋ฒ๊น ์ฉ์ด: ์ด๋ step์์ ์คํจํ๋์ง ๋ช ํํ ํ์
step.define()
step.define()์ ํจ์๋ฅผ step์ผ๋ก ๊ฐ์ธ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค. ๋น๋๊ธฐ ํจ์๋ฅผ step์ผ๋ก ๋ง๋ค๋ฉด ์คํ ์ด๋ ฅ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
name: Step ์๋ณ์ (workflow ๋ด์์ ๊ณ ์ ํด์ผ ํจ)- ๋น๋๊ธฐ ํจ์: ์ค์ ์์ ์ ์ํํ๋ ์ฝ๋
.run(): Step์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
๋ฐํ๊ฐ ์ฌ์ฉ
Step์ ๋ฐํ๊ฐ์ ๋ค์ step์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ step์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฅ๋์ง๋ง, ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๋ฌ๋ฉ๋๋ค.fetch_datastep์ด data ๋ฐํ- data๊ฐ ๋ฉ๋ชจ๋ฆฌ์์
transformstep์ผ๋ก ์ ๋ฌ - transformed๊ฐ ๋ฉ๋ชจ๋ฆฌ์์
savestep์ผ๋ก ์ ๋ฌ
Step ์ฌ์๋ ์์๋ ์ด์ step์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ณต์๋์ด ์ฌ์ฉ๋ฉ๋๋ค.
step.get()
step.get()์ Model ๋ฉ์๋๋ฅผ step์ผ๋ก ์คํํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์
๋๋ค. ๋ณ๋๋ก ํจ์๋ฅผ ๊ฐ์ธ์ง ์์๋ ๋์ด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋๋ค.
- Model์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฌ์ฌ์ฉ
- ์ฝ๋ ์ค๋ณต ์ ๊ฑฐ
- ํ์ ์์ ์ฑ ์ ์ง
์ปค์คํ ์ด๋ฆ ์ง์
Step ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ๋ก๊ทธ๋ฅผ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.๋ฐํ๊ฐ ํ์ฉ
Model ๋ฉ์๋์ ๋ฐํ๊ฐ๋ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.step.sleep()
step.sleep()์ ์ผ์ ์๊ฐ ๋๊ธฐํ๋ step์
๋๋ค. ์ฌ์๋ ๊ฐ ์ง์ฐ, API rate limit ํํผ, ์ ๊ธฐ ํด๋ง ๋ฑ์ ํ์ฉํฉ๋๋ค.
์ค์ ํ์ฉ:
- ์ฌ์๋ ์ง์ฐ: ์คํจ ํ 5์ด ๋๊ธฐ
- Rate limiting: API ํธ์ถ ๊ฐ 1์ด ๋๊ธฐ
- ๋ฐฐ์น ๊ฐ๊ฒฉ: 100๊ฐ์ฉ ์ฒ๋ฆฌ ํ 10์ด ํด์
์ค์ ์์
1. ๋ฐฐ์น ์ฒ๋ฆฌ
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ์์ ๋ฐฐ์น๋ก ๋๋์ด ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ ๋ฐฐ์น๋ฅผ ๋ณ๋ step์ผ๋ก ๋ง๋ค๋ฉด ์ค๊ฐ์ ์คํจํด๋ ์ฒ๋ฆฌ๋ ๋ฐฐ์น๋ ์ฌ์คํํ์ง ์์ต๋๋ค.- 100๊ฐ์ฉ ๋ฐฐ์น๋ก ๋๋์ด ์ฒ๋ฆฌ
- ๊ฐ ๋ฐฐ์น๊ฐ ๋ ๋ฆฝ์ ์ธ step
- ์งํ๋ฅ ์ ๋ก๊ทธ๋ก ๊ธฐ๋ก
2. ์ธ๋ถ API ํธ์ถ
์ธ๋ถ API ํธ์ถ์ ๋คํธ์ํฌ ๋ฌธ์ ๋ก ์คํจํ ์ ์์ต๋๋ค. Step์ผ๋ก ๋๋๋ฉด ์คํจํ API ํธ์ถ๋ง ์ฌ์๋ํ ์ ์์ต๋๋ค.- API ํธ์ถ ์คํจ ์ ๋ฐ์ดํฐ ์ ๊ทํ๋ ์คํต
- ์ ๊ทํ ์คํจ ์ API ์ฌํธ์ถ ์ํจ
- ๊ฐ ๋จ๊ณ์ ์คํ ์๊ฐ ์ธก์ ๊ฐ๋ฅ
3. ํ์ผ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ
ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ํ์ฑํ์ฌ ์ ์ฅํ๋ ํ์ดํ๋ผ์ธ์ ๋๋ค. ๊ฐ ๋จ๊ณ๋ฅผ step์ผ๋ก ๋๋๋ฉด ๋๋ฒ๊น ๊ณผ ์ฌ์๋๊ฐ ์ฌ์์ง๋๋ค.- ๋ค์ด๋ก๋ โ 2. ํ์ฑ โ 3. ๊ฒ์ฆ โ 4. ์ ์ฅ
- ๊ฐ ๋จ๊ณ๊ฐ ์คํจํ๋ฉด ํด๋น step๋ถํฐ ์ฌ์๋
- ํ์ผ์ ํ ๋ฒ๋ง ๋ค์ด๋ก๋
4. Rate Limiting์ด ์๋ API
API์ rate limit์ด ์์ ๋๋ ์์ฒญ ๊ฐ ์ง์ฐ์ ์ถ๊ฐํฉ๋๋ค.step.sleep()์ ์ฌ์ฉํ๋ฉด ์ฌ์๋ ์ ์ง์ฐ์ด ๋ฐ๋ณต๋์ง ์์ต๋๋ค.
- ๊ฐ ์๋ฆผ ์ฌ์ด์ 100ms ๋๊ธฐ
- API ์๋ฒ ๊ณผ๋ถํ ๋ฐฉ์ง
- ์ฌ์๋ ์ ์ด๋ฏธ ์ฑ๊ณตํ ์๋ฆผ์ ์คํต
Step ๋ช ๋ช ๊ท์น
๊ณ ์ ํ ์ด๋ฆ ์ฌ์ฉ
๊ฐ์ workflow ๋ด์์ step ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค. ์ค๋ณต๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ๋ง์ง๋ง step๋ง ์คํ๋ฉ๋๋ค.๋ฐ๋ณต๋ฌธ์์ ๋์ ์ด๋ฆ
๋ฐ๋ณต๋ฌธ์์ step์ ์์ฑํ ๋๋ ์ธ๋ฑ์ค๋ฅผ ํฌํจํ์ฌ ์ด๋ฆ์ ๊ณ ์ ํ๊ฒ ๋ง๋ญ๋๋ค.- ์์
๋ด์ฉ์ ๋ํ๋ด๋ ๋ช
์ฌ ์ฌ์ฉ:
fetch_user,send_email - ์ธ๋ฑ์ค ํฌํจ:
process_batch_0,process_batch_1 - Snake case ๊ถ์ฅ:
send_welcome_email
์ฃผ์์ฌํญ
๋ค์ ๋จ๊ณ
@workflow ๋ฐ์ฝ๋ ์ดํฐ
Workflow ์ ์ํ๊ณ ์ค์ผ์ค๋งํ๊ธฐ
์๋ฌ ์ฒ๋ฆฌ
์ฌ์๋ ํจํด๊ณผ ๋ณด์ ํธ๋์ญ์
๋ฐฐ์ฐ๊ธฐ