committed by
GitHub
1 changed files with 96 additions and 0 deletions
@ -0,0 +1,96 @@ |
|||||
|
# ๊ณ ๊ธ ๋ฏธ๋ค์จ์ด |
||||
|
|
||||
|
๋ฉ์ธ ํํ ๋ฆฌ์ผ์์ [Custom Middleware](../tutorial/middleware.md){.internal-link target=_blank}๋ฅผ ์์ฉํ๋ก๊ทธ๋จ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฝ์ผ์
จ์ต๋๋ค. |
||||
|
|
||||
|
๊ทธ๋ฆฌ๊ณ [CORS with the `CORSMiddleware`](){.internal-link target=_blank}ํ๋ ๋ฐฉ๋ฒ๋ ๋ณด์
จ์ต๋๋ค. |
||||
|
|
||||
|
์ด ์น์
์์๋ ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด๋ค์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. |
||||
|
|
||||
|
## ASGI ๋ฏธ๋ค์จ์ด ์ถ๊ฐํ๊ธฐ |
||||
|
|
||||
|
**FastAPI**๋ Starlette์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ผ๋ฉฐ, <abbr title="Asynchronous Server Gateway Interface">ASGI</abbr> ์ฌ์์ ๊ตฌํํ๋ฏ๋ก ASGI ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
||||
|
|
||||
|
๋ฏธ๋ค์จ์ด๊ฐ FastAPI๋ Starlette์ฉ์ผ๋ก ๋ง๋ค์ด์ง์ง ์์๋ ASGI ์ฌ์์ ์ค์ํ๋ ํ ๋์ํ ์ ์์ต๋๋ค. |
||||
|
|
||||
|
์ผ๋ฐ์ ์ผ๋ก ASGI ๋ฏธ๋ค์จ์ด๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ASGI ์ฑ์ ๋ฐ๋ ํด๋์ค๋ค์
๋๋ค. |
||||
|
|
||||
|
๋ฐ๋ผ์ ํ์ฌ ASGI ๋ฏธ๋ค์จ์ด ๋ฌธ์์์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋๋ก ์๋ดํ ๊ฒ์
๋๋ค. |
||||
|
|
||||
|
```Python |
||||
|
from unicorn import UnicornMiddleware |
||||
|
|
||||
|
app = SomeASGIApp() |
||||
|
|
||||
|
new_app = UnicornMiddleware(app, some_config="rainbow") |
||||
|
``` |
||||
|
|
||||
|
ํ์ง๋ง ๋ด๋ถ ๋ฏธ๋ค์จ์ด๊ฐ ์๋ฒ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์ ์ ์ ์์ธ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ ๋๋ก ์๋ํ๋๋ก ํ๋ ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ FastAPI(์ค์ ๋ก๋ Starlette)๊ฐ ์์ต๋๋ค. |
||||
|
|
||||
|
์ด๋ฅผ ์ํด `app.add_middleware()`๋ฅผ ์ฌ์ฉํฉ๋๋ค(CORS์ ์์์์ ๊ฐ์ด). |
||||
|
|
||||
|
```Python |
||||
|
from fastapi import FastAPI |
||||
|
from unicorn import UnicornMiddleware |
||||
|
|
||||
|
app = FastAPI() |
||||
|
|
||||
|
app.add_middleware(UnicornMiddleware, some_config="rainbow") |
||||
|
``` |
||||
|
|
||||
|
`app.add_middleware()`๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฏธ๋ค์จ์ด ํด๋์ค์ ๋ฏธ๋ค์จ์ด์ ์ ๋ฌํ ์ถ๊ฐ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค. |
||||
|
|
||||
|
## ํตํฉ ๋ฏธ๋ค์จ์ด |
||||
|
|
||||
|
**FastAPI**์๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํ ์ฌ๋ฌ ๋ฏธ๋ค์จ์ด๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. |
||||
|
|
||||
|
/// note | ๊ธฐ์ ์ธ๋ถ ์ฌํญ |
||||
|
|
||||
|
๋ค์ ์์ ์์๋ `from starlette.middleware.something import SomethingMiddleware`๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. |
||||
|
|
||||
|
**FastAPI**๋ ๊ฐ๋ฐ์์ ํธ์๋ฅผ ์ํด `fastapi.middleware`์ ์ฌ๋ฌ ๋ฏธ๋ค์จ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๋ถ๋ถ์ ๋ฏธ๋ค์จ์ด๋ Starlette์์ ์ง์ ์ ๊ณตํฉ๋๋ค. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
## `HTTPSRedirectMiddleware` |
||||
|
|
||||
|
๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ด `https` ๋๋ `wss`์ฌ์ผ ํฉ๋๋ค. |
||||
|
|
||||
|
`http` ๋๋ `ws`๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๋์ ๋ณด์ ์ฒด๊ณ๋ก ๋ฆฌ๋๋ ์
๋ฉ๋๋ค. |
||||
|
|
||||
|
{* ../../docs_src/advanced_middleware/tutorial001.py hl[2,6] *} |
||||
|
|
||||
|
## `TrustedHostMiddleware` |
||||
|
|
||||
|
HTTP ํธ์คํธ ํค๋ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ชจ๋ ์์ ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋ `Host` ํค๋๋ฅผ ๊ฐ๋๋ก ๊ฐ์ ํฉ๋๋ค. |
||||
|
|
||||
|
{* ../../docs_src/advanced_middleware/tutorial002.py hl[2,6:8] *} |
||||
|
|
||||
|
๋ค์ ์ธ์๊ฐ ์ง์๋ฉ๋๋ค: |
||||
|
|
||||
|
* `allowed_hosts` - ํธ์คํธ ์ด๋ฆ์ผ๋ก ํ์ฉํด์ผ ํ๋ ๋๋ฉ์ธ ์ด๋ฆ ๋ชฉ๋ก์
๋๋ค. ์ผ์นํ๋ ํ์ ๋๋ฉ์ธ์ ๋ํด `*.example.com`๊ณผ ๊ฐ์ ์์ผ๋์นด๋ ๋๋ฉ์ธ์ด ์ง์๋ฉ๋๋ค. ๋ชจ๋ ํธ์คํธ ์ด๋ฆ์ ํ์ฉํ๋ ค๋ฉด `allowed_hosts=[โ*โ]`๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฏธ๋ค์จ์ด๋ฅผ ์๋ตํ์ธ์. |
||||
|
|
||||
|
์์ ์์ฒญ์ ์ ํจ์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ํ์ธ๋์ง ์์ผ๋ฉด `400`์ด๋ผ๋ ์๋ต์ด ์ ์ก๋ฉ๋๋ค. |
||||
|
|
||||
|
## `GZipMiddleware` |
||||
|
|
||||
|
`Accept-Encoding` ํค๋์ `โgzipโ`์ด ํฌํจ๋ ๋ชจ๋ ์์ฒญ์ ๋ํด GZip ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค. |
||||
|
|
||||
|
๋ฏธ๋ค์จ์ด๋ ํ์ค ์๋ต๊ณผ ์คํธ๋ฆฌ๋ฐ ์๋ต์ ๋ชจ๋ ์ฒ๋ฆฌํฉ๋๋ค. |
||||
|
|
||||
|
{* ../../docs_src/advanced_middleware/tutorial003.py hl[2,6] *} |
||||
|
|
||||
|
์ง์๋๋ ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: |
||||
|
|
||||
|
* `minimum_size` - ์ด ์ต์ ํฌ๊ธฐ(๋ฐ์ดํธ)๋ณด๋ค ์์ ์๋ต์ GZipํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ `500`์
๋๋ค. |
||||
|
* `compresslevel` - GZip ์์ถ ์ค์ ์ฌ์ฉ๋ฉ๋๋ค. 1์์ 9 ์ฌ์ด์ ์ ์์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ `9`์
๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก ์์ถ ์๋๋ ๋นจ๋ผ์ง์ง๋ง ํ์ผ ํฌ๊ธฐ๋ ์ปค์ง๊ณ , ๊ฐ์ด ๋์์๋ก ์์ถ ์๋๋ ๋๋ ค์ง์ง๋ง ํ์ผ ํฌ๊ธฐ๋ ์์์ง๋๋ค. |
||||
|
|
||||
|
## ๊ธฐํ ๋ฏธ๋ค์จ์ด |
||||
|
|
||||
|
๋ค๋ฅธ ๋ง์ ASGI ๋ฏธ๋ค์จ์ด๊ฐ ์์ต๋๋ค. |
||||
|
|
||||
|
์๋ฅผ ๋ค์ด: |
||||
|
|
||||
|
<a href=โhttps://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.pyโ class=โexternal-linkโ target=โ_blankโ>์ ๋น์ฝ์ `ProxyHeadersMiddleware`></a> |
||||
|
<a href=โhttps://github.com/florimondmanca/msgpack-asgiโ class=โexternal-linkโ target=โ_blankโ>MessagePack</a> |
||||
|
|
||||
|
์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด๋ฅผ ํ์ธํ๋ ค๋ฉด <a href=โhttps://www.starlette.io/middleware/โ class=โexternal-linkโ target=โ_blankโ>์คํ๋ ์ ๋ฏธ๋ค์จ์ด ๋ฌธ์</a> ๋ฐ <a href=โhttps://github.com/florimondmanca/awesome-asgiโ class=โexternal-linkโ target=โ_blankโ>ASGI Awesome List</a>๋ฅผ ์ฐธ์กฐํ์ธ์. |
Loadingโฆ
Reference in new issue