committed by
GitHub
1 changed files with 61 additions and 0 deletions
@ -0,0 +1,61 @@ |
|||
# ๋ฏธ๋ค์จ์ด |
|||
|
|||
๋ฏธ๋ค์จ์ด๋ฅผ **FastAPI** ์์ฉ ํ๋ก๊ทธ๋จ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|||
|
|||
"๋ฏธ๋ค์จ์ด"๋ ํน์ *๊ฒฝ๋ก ์๋*์ ์ํด ์ฒ๋ฆฌ๋๊ธฐ ์ , ๋ชจ๋ **์์ฒญ**์ ๋ํด์ ๋์ํ๋ ํจ์์
๋๋ค. ๋ํ ๋ชจ๋ **์๋ต**์ด ๋ฐํ๋๊ธฐ ์ ์๋ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค. |
|||
|
|||
* ๋ฏธ๋ค์จ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก ์ค๋ **์์ฒญ**๋ฅผ ๊ฐ์ ธ์ต๋๋ค. |
|||
* **์์ฒญ** ๋๋ ๋ค๋ฅธ ํ์ํ ์ฝ๋๋ฅผ ์คํ ์ํฌ ์ ์์ต๋๋ค. |
|||
* **์์ฒญ**์ ์์ฉ ํ๋ก๊ทธ๋จ์ *๊ฒฝ๋ก ์๋*์ผ๋ก ์ ๋ฌํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. |
|||
* ์ ํ๋ฆฌ์ผ์ด์
์ *๊ฒฝ๋ก ์์
*์์ ์์ฑํ **์๋ต**๋ฅผ ๋ฐ์ต๋๋ค. |
|||
* **์๋ต** ๋๋ ๋ค๋ฅธ ํ์ํ ์ฝ๋๋ฅผ ์คํ์ํค๋ ๋์์ ํ ์ ์์ต๋๋ค. |
|||
* **์๋ต**๋ฅผ ๋ฐํํฉ๋๋ค. |
|||
|
|||
!!! note "๊ธฐ์ ์ธ๋ถ์ฌํญ" |
|||
๋ง์ฝ `yield`๋ฅผ ์ฌ์ฉํ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๋ฏธ๋ค์จ์ด๊ฐ ์คํ๋๊ณ ๋ ํ์ exit์ด ์คํ๋ฉ๋๋ค. |
|||
|
|||
๋ง์ฝ (๋์ค์ ๋ฌธ์์์ ๋ค๋ฃฐ) ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ด ์๋ค๋ฉด, ๋ชจ๋ ๋ฏธ๋ค์จ์ด๊ฐ ์คํ๋๊ณ *๋ ํ์* ์คํ๋ฉ๋๋ค. |
|||
|
|||
## ๋ฏธ๋ค์จ์ด ๋ง๋ค๊ธฐ |
|||
|
|||
๋ฏธ๋ค์จ์ด๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ํจ์ ์๋จ์ `@app.middleware("http")` ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
๋ฏธ๋ค์จ์ด ํจ์๋ ๋ค์ ํญ๋ชฉ๋ค์ ๋ฐ์ต๋๋ค: |
|||
|
|||
* `request`. |
|||
* `request`๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ `call_next` ํจ์. |
|||
* ์ด ํจ์๋ `request`๋ฅผ ํด๋นํ๋ *๊ฒฝ๋ก ์์
*์ผ๋ก ์ ๋ฌํฉ๋๋ค. |
|||
* ๊ทธ๋ฐ ๋ค์, *๊ฒฝ๋ก ์์
*์ ์ํด ์์ฑ๋ `response` ๋ฅผ ๋ฐํํฉ๋๋ค. |
|||
* `response`๋ฅผ ๋ฐํํ๊ธฐ ์ ์ ์ถ๊ฐ๋ก `response`๋ฅผ ์์ ํ ์ ์์ต๋๋ค. |
|||
|
|||
```Python hl_lines="8-9 11 14" |
|||
{!../../../docs_src/middleware/tutorial001.py!} |
|||
``` |
|||
|
|||
!!! tip "ํ" |
|||
์ฌ์ฉ์ ์ ์ ํค๋๋ <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">'X-' ์ ๋์ฌ๋ฅผ ์ฌ์ฉ</a>ํ์ฌ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฌ๋ ๋ง์ฝ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ๋ณผ ์ ์๋ ์ฌ์ฉ์ ์ ์ ํค๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๊ทธ๊ฒ๋ค์ CORS ์ค์ ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank})์ <a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">Starlette CORS ๋ฌธ์</a>์ ๋ช
์๋ `expose_headers` ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ํค๋๋ค์ ์ถ๊ฐํ์ฌ์ผํฉ๋๋ค. |
|||
|
|||
!!! note "๊ธฐ์ ์ ์ธ๋ถ์ฌํญ" |
|||
`from starlette.requests import request`๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. |
|||
|
|||
**FastAPI**๋ ๊ฐ๋ฐ์์๊ฒ ํธ์๋ฅผ ์ํด ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Starlette์์ ์ง์ ํ์๋์์ต๋๋ค. |
|||
|
|||
### `response`์ ์ ๊ณผ ํ |
|||
|
|||
*๊ฒฝ๋ก ์๋*์ ๋ฐ๊ธฐ ์ `request`์ ํจ๊ป ์๋ํ ์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ `response` ๋ํ ์์ฑ๋ ํ ๋ฐํ๋๊ธฐ ์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, ์์ฒญ์ ์ํํ๊ณ ์๋ต์ ์์ฑํ๋๋ฐ ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ `X-Process-Time` ๊ฐ์ ์ฌ์ฉ์ ์ ์ ํค๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. |
|||
|
|||
```Python hl_lines="10 12-13" |
|||
{!../../../docs_src/middleware/tutorial001.py!} |
|||
``` |
|||
|
|||
## ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด |
|||
|
|||
๋ฏธ๋ค์จ์ด์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ [์๋ จ๋ ์ฌ์ฉ์ ์๋ด์: ํฅ์๋ ๋ฏธ๋ค์จ์ด](../advanced/middleware.md){.internal-link target=\_blank}์์ ํ์ธํ ์ ์์ต๋๋ค. |
|||
|
|||
๋ค์ ๋ถ๋ถ์์ ๋ฏธ๋ค์จ์ด์ ํจ๊ป <abbr title="๊ต์ฐจ-์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ">CORS</abbr>๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง์ ๋ํด ํ์ธํ ๊ฒ์
๋๋ค. |
Loadingโฆ
Reference in new issue