committed by
GitHub
1 changed files with 102 additions and 0 deletions
@ -0,0 +1,102 @@ |
|||
# ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
|
|||
|
|||
FastAPI์์๋ ์๋ต์ ๋ฐํํ ํ์ ์คํํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ ์ํ ์ ์์ต๋๋ค. |
|||
|
|||
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ต์ ๋ฐ๊ธฐ ์ํด ์์
์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ฒญ ํ์ ๋ฐ์ํด์ผํ๋ ์์
์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. |
|||
|
|||
์ด๋ฌํ ์์
์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. |
|||
|
|||
* ์์
์ ์ํํ ํ ์ ์ก๋๋ ์ด๋ฉ์ผ ์๋ฆผ |
|||
* ์ด๋ฉ์ผ ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ ์ด๋ฉ์ผ์ ์ ์กํ๋ ๊ฒ์ (๋ช ์ด ์ ๋) "๋๋ฆฐ" ๊ฒฝํฅ์ด ์์ผ๋ฏ๋ก, ์๋ต์ ์ฆ์ ๋ฐํํ๊ณ ์ด๋ฉ์ผ ์๋ฆผ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์กํ๋ ๊ฒ ๊ฐ๋ฅํฉ๋๋ค. |
|||
* ๋ฐ์ดํฐ ์ฒ๋ฆฌ: |
|||
* ์๋ฅผ ๋ค์ด ์ฒ๋ฆฌ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ "Accepted" (HTTP 202)์ ๋ฐํํ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. |
|||
|
|||
## `๋ฐฑ๊ทธ๋ผ์ด๋ ์์
` ์ฌ์ฉ |
|||
|
|||
๋จผ์ ์๋์ ๊ฐ์ด `BackgroundTasks`๋ฅผ ์ํฌํธํ๊ณ , `BackgroundTasks`๋ฅผ _๊ฒฝ๋ก ๋์ ํจ์_ ์์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ธ์ค๊ณ ์ ์ํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="1 13" |
|||
{!../../../docs_src/background_tasks/tutorial001.py!} |
|||
``` |
|||
|
|||
**FastAPI** ๋ `BackgroundTasks` ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค. |
|||
|
|||
## ์์
ํจ์ ์์ฑ |
|||
|
|||
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ผ๋ก ์คํํ ํจ์๋ฅผ ์ ์ํฉ๋๋ค. |
|||
|
|||
์ด๊ฒ์ ๋จ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ ์ ์๋ ํ์ค ํจ์์ผ ๋ฟ์
๋๋ค. |
|||
|
|||
**FastAPI**๋ ์ด๊ฒ์ด `async def` ํจ์์ด๋ , ์ผ๋ฐ `def` ํจ์์ด๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. |
|||
|
|||
์ด ๊ฒฝ์ฐ, ์๋ ์์
์ ํ์ผ์ ์ฐ๋ ํจ์์
๋๋ค. (์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ ์๋ฌผ๋ ์ด์
) |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ์ด ์์
์ `async`์ `await`๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ผ๋ฐ `def` ํจ์๋ก ์ ์ธํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="6-9" |
|||
{!../../../docs_src/background_tasks/tutorial001.py!} |
|||
``` |
|||
|
|||
## ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ถ๊ฐ |
|||
|
|||
_๊ฒฝ๋ก ๋์ ํจ์_ ๋ด์์ ์์
ํจ์๋ฅผ `.add_task()` ํจ์ ํตํด _๋ฐฑ๊ทธ๋ผ์ด๋ ์์
_ ๊ฐ์ฒด์ ์ ๋ฌํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="14" |
|||
{!../../../docs_src/background_tasks/tutorial001.py!} |
|||
``` |
|||
|
|||
`.add_task()` ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค : |
|||
|
|||
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ์์
ํจ์ (`write_notification`). |
|||
- ์์
ํจ์์ ์์๋๋ก ์ ๋ฌ๋์ด์ผ ํ๋ ์ผ๋ จ์ ์ธ์ (`email`). |
|||
- ์์
ํจ์์ ์ ๋ฌ๋์ด์ผํ๋ ๋ชจ๋ ํค์๋ ์ธ์ (`message="some notification"`). |
|||
|
|||
## ์์กด์ฑ ์ฃผ์
|
|||
|
|||
`BackgroundTasks`๋ฅผ ์์กด์ฑ ์ฃผ์
์์คํ
๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด _๊ฒฝ๋ก ๋์ ํจ์_, ์ข
์์ฑ, ํ์ ์ข
์์ฑ ๋ฑ ์ฌ๋ฌ ์์ค์์ BackgroundTasks ์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. |
|||
|
|||
**FastAPI**๋ ๊ฐ ๊ฒฝ์ฐ์ ์ํํ ์์
๊ณผ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฌ์ฉํ๊ธฐ์, ๋ชจ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ด ํจ๊ป ๋ณํฉ๋๊ณ ๋์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ฉ๋๋ค. |
|||
|
|||
=== "Python 3.6 and above" |
|||
|
|||
```Python hl_lines="13 15 22 25" |
|||
{!> ../../../docs_src/background_tasks/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "Python 3.10 and above" |
|||
|
|||
```Python hl_lines="11 13 20 23" |
|||
{!> ../../../docs_src/background_tasks/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
์ด ์์ ์์๋ ์๋ต์ด ๋ฐํ๋ ํ์ `log.txt` ํ์ผ์ ๋ฉ์์ง๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. |
|||
|
|||
์์ฒญ์ ์ฟผ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๋ก๊ทธ์ ๊ธฐ๋ก๋ฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ _๊ฒฝ๋ก ๋์ ํจ์_ ์์ ์์ฑ๋ ๋ ๋ค๋ฅธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๊ฒฝ๋ก ๋งค๊ฐ ๋ณ์๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์์ฑํฉ๋๋ค. |
|||
|
|||
## ๊ธฐ์ ์ ์ธ๋ถ์ฌํญ |
|||
|
|||
`BackgroundTasks` ํด๋์ค๋ <a href="https://www.starlette.io/background/" class="external-link" target="_blank">`starlette.background`</a>์์ ์ง์ ๊ฐ์ ธ์ต๋๋ค. |
|||
|
|||
`BackgroundTasks` ํด๋์ค๋ FastAPI์์ ์ง์ ์ํฌํธํ๊ฑฐ๋ ํฌํจํ๊ธฐ ๋๋ฌธ์ ์ค์๋ก `BackgroundTask` (๋์ `s`๊ฐ ์์)์ ์ํฌํธํ๋๋ผ๋ starlette.background์์ `BackgroundTask`๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. |
|||
|
|||
(`BackgroundTask`๊ฐ ์๋) `BackgroundTasks`๋ฅผ ์ฌ์ฉํ๋ฉด, _๊ฒฝ๋ก ๋์ ํจ์_ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ ๋๋จธ์ง๋ **FastAPI**๊ฐ ๋์ ์ฒ๋ฆฌํ๋๋ก ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ `Request` ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์
๋๋ค. |
|||
|
|||
FastAPI์์ `BackgroundTask`๋ฅผ ๋จ๋
์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ์ ํ ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ๊ฐ์ฒด๋ฅผ ์ฝ๋์์ ์์ฑํ๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ Starlette `Response`๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. |
|||
|
|||
<a href="https://www.starlette.io/background/" class="external-link" target="_blank">`Starlette์ ๊ณต์ ๋ฌธ์`</a>์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค. |
|||
|
|||
## ๊ฒฝ๊ณ |
|||
|
|||
๋ง์ฝ ๋ฌด๊ฑฐ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ํํด์ผํ๊ณ ๋์ผํ ํ๋ก์ธ์ค์์ ์คํํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ (์: ๋ฉ๋ชจ๋ฆฌ, ๋ณ์ ๋ฑ์ ๊ณต์ ํ ํ์๊ฐ ์์) <a href="https://docs.celeryq.dev" class="external-link" target="_blank">`Celery`</a>์ ๊ฐ์ ํฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ด ๋ ์ ์์ต๋๋ค. |
|||
|
|||
RabbitMQ ๋๋ Redis์ ๊ฐ์ ๋ฉ์์ง/์์
ํ ์์คํ
๋ณด๋ค ๋ณต์กํ ๊ตฌ์ฑ์ด ํ์ํ ๊ฒฝํฅ์ด ์์ง๋ง, ์ฌ๋ฌ ์์
ํ๋ก์ธ์ค๋ฅผ ํนํ ์ฌ๋ฌ ์๋ฒ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ ์ ์์ต๋๋ค. |
|||
|
|||
์์ ๋ฅผ ๋ณด์๋ ค๋ฉด [ํ๋ก์ ํธ ์์ฑ๊ธฐ](../project-generation.md){.internal-link target=\_blank} ๋ฅผ ์ฐธ๊ณ ํ์ธ์. ํด๋น ์์ ์๋ ์ด๋ฏธ ๊ตฌ์ฑ๋ `Celery`๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฌ๋ ๋์ผํ FastAPI ์ฑ์์ ๋ณ์ ๋ฐ ๊ฐ์ฒด์ ์ ๊ทผํด์ผํ๋ ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ด ํ์ํ ๊ฒฝ์ฐ (์ : ์๋ฆผ ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ) ๊ฐ๋จํ๊ฒ `BackgroundTasks`๋ฅผ ์ฌ์ฉํด๋ณด์ธ์. |
|||
|
|||
## ์์ฝ |
|||
|
|||
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ถ๊ฐํ๊ธฐ ์ํด _๊ฒฝ๋ก ๋์ ํจ์_ ์ ๋งค๊ฐ๋ณ์๋ก `BackgroundTasks`๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ฌ์ฉํฉ๋๋ค. |
Loadingโฆ
Reference in new issue