committed by
GitHub
1 changed files with 353 additions and 0 deletions
@ -0,0 +1,353 @@ |
|||
# ์์กด์ฑ |
|||
|
|||
**FastAPI**๋ ์์ฃผ ๊ฐ๋ ฅํ์ง๋ง ์ง๊ด์ ์ธ **<abbr title="์ปดํฌ๋ํธ, ์์, ์ ๊ณต์, ์๋น์ค, ์ธ์ ํฐ๋ธ๋ก ์๋ ค์ ธ ์์ต๋๋ค">์์กด์ฑ ์ฃผ์
</abbr>** ์์คํ
์ ๊ฐ์ง๊ณ ์์ต๋๋ค. |
|||
|
|||
์ด๋ ์ฌ์ฉํ๊ธฐ ์์ฃผ ์ฝ๊ฒ ์ค๊ณํ์ผ๋ฉฐ, ์ด๋ ๊ฐ๋ฐ์๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ **FastAPI**๋ฅผ ์ฝ๊ฒ ํตํฉํ ์ ์๋๋ก ๋ง๋ค์์ต๋๋ค. |
|||
|
|||
## "์์กด์ฑ ์ฃผ์
"์ ๋ฌด์์
๋๊น? |
|||
|
|||
**"์์กด์ฑ ์ฃผ์
"**์ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ๋ฌ๋ถ์ ์ฝ๋(์ด ๊ฒฝ์ฐ, ๊ฒฝ๋ก ๋์ ํจ์)๊ฐ ์๋ํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ํ์๋ก ํ๋ ๊ฒ, ์ฆ "์์กด์ฑ"์ ์ ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค. |
|||
|
|||
๊ทธ ํ์, ์์คํ
(์ด ๊ฒฝ์ฐ FastAPI)์ ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ์๊ตฌํ๋ ์์กด์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.(์์กด์ฑ์ "์ฃผ์
"ํฉ๋๋ค) |
|||
|
|||
์ด๋ ์ฌ๋ฌ๋ถ์ด ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ ํ์๋ก ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค: |
|||
|
|||
* ๊ณต์ฉ๋ ๋ก์ง์ ๊ฐ์ก์ ๊ฒฝ์ฐ (๊ฐ์ ์ฝ๋ ๋ก์ง์ด ๊ณ์ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ). |
|||
* ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๊ณต์ ํ๋ ๊ฒฝ์ฐ. |
|||
* ๋ณด์, ์ธ์ฆ, ์ญํ ์๊ตฌ ์ฌํญ ๋ฑ์ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ. |
|||
* ๊ทธ๋ฆฌ๊ณ ๋ง์ ๋ค๋ฅธ ์ฌํญ... |
|||
|
|||
์ด ๋ชจ๋ ์ฌํญ์ ํ ๋ ์ฝ๋ ๋ฐ๋ณต์ ์ต์ํํฉ๋๋ค. |
|||
|
|||
## ์ฒซ๋ฒ์งธ ๋จ๊ณ |
|||
|
|||
์์ฃผ ๊ฐ๋จํ ์์ ๋ฅผ ๋ด
์๋ค. ๋๋ฌด ๊ฐ๋จํ ๊ฒ์ด๊ธฐ์ ์ง๊ธ ๋น์ฅ์ ์ ์ฉํ์ง ์์ ์ ์์ต๋๋ค. |
|||
|
|||
ํ์ง๋ง ์ด๋ฅผ ํตํด **์์กด์ฑ ์ฃผ์
** ์์คํ
์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ์ค์ ์ ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
### ์์กด์ฑ ํน์ "๋ํ๋๋ธ" ๋ง๋ค๊ธฐ |
|||
|
|||
์์กด์ฑ์ ์ง์คํด ๋ด
์๋ค. |
|||
|
|||
*๊ฒฝ๋ก ์๋ ํจ์*๊ฐ ๊ฐ์ง ์ ์๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ๋จ์ํ ํจ์์
๋๋ค: |
|||
|
|||
=== "Python 3.10+" |
|||
|
|||
```Python hl_lines="8-9" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.9+" |
|||
|
|||
```Python hl_lines="8-11" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py39.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+" |
|||
|
|||
```Python hl_lines="9-12" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an.py!} |
|||
``` |
|||
|
|||
=== "Python 3.10+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="6-7" |
|||
{!> ../../../docs_src/dependencies/tutorial001_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="8-11" |
|||
{!> ../../../docs_src/dependencies/tutorial001.py!} |
|||
``` |
|||
|
|||
์ด๊ฒ ๋ค์
๋๋ค. |
|||
|
|||
**๋จ ๋ ์ค์
๋๋ค**. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ , ์ด ํจ์๋ ์ฌ๋ฌ๋ถ์ ๋ชจ๋ *๊ฒฝ๋ก ์๋ ํจ์*๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ๊ฐ์ ํํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. |
|||
|
|||
์ฌ๋ฌ๋ถ์ ์ด๋ฅผ "๋ฐ์ฝ๋ ์ดํฐ"๊ฐ ์๋ (`@app.get("/some-path")`๊ฐ ์๋) *๊ฒฝ๋ก ์๋ ํจ์*๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ์ด ์ํ๋ ๋ฌด์์ด๋ ๋ฐํํ ์ ์์ต๋๋ค. |
|||
|
|||
์ด ๊ฒฝ์ฐ, ์ด ์์กด์ฑ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค: |
|||
|
|||
* ์ ํ์ ์ธ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์ `q`, `str`์ ์๋ฃํ์ผ๋ก ๊ฐ์ง๋๋ค. |
|||
* ์ ํ์ ์ธ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์ `skip`, `int`๋ฅผ ์๋ฃํ์ผ๋ก ๊ฐ์ง๋ฉฐ ๊ธฐ๋ณธ ๊ฐ์ `0`์
๋๋ค. |
|||
* ์ ํ์ ์ธ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์ `limit`,`int`๋ฅผ ์๋ฃํ์ผ๋ก ๊ฐ์ง๋ฉฐ ๊ธฐ๋ณธ ๊ฐ์ `100`์
๋๋ค. |
|||
|
|||
๊ทธ ํ ์์ ๊ฐ์ ํฌํจํ `dict` ์๋ฃํ์ผ๋ก ๋ฐํํ ๋ฟ์
๋๋ค. |
|||
|
|||
!!! ์ ๋ณด |
|||
FastAPI๋ 0.95.0 ๋ฒ์ ๋ถํฐ `Annotated`์ ๋ํ ์ง์์ (๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ๊ถ์ฅํฉ๋๋ค) ์ถ๊ฐํ์ต๋๋ค. |
|||
|
|||
์๋ ๋ฒ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ, `Annotated`๋ฅผ ์ฌ์ฉํ๋ ค ํ๋ฉด ์๋ฌ๋ฅผ ๋ง์ดํ๊ฒ ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
`Annotated`๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ต์ 0.95.1๋ก [FastAPI ๋ฒ์ ์
๊ทธ๋ ์ด๋](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}๋ฅผ ํ์คํ๊ฒ ํ์ธ์. |
|||
|
|||
### `Depends` ๋ถ๋ฌ์ค๊ธฐ |
|||
|
|||
=== "Python 3.10+" |
|||
|
|||
```Python hl_lines="3" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.9+" |
|||
|
|||
```Python hl_lines="3" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py39.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+" |
|||
|
|||
```Python hl_lines="3" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an.py!} |
|||
``` |
|||
|
|||
=== "Python 3.10+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="1" |
|||
{!> ../../../docs_src/dependencies/tutorial001_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="3" |
|||
{!> ../../../docs_src/dependencies/tutorial001.py!} |
|||
``` |
|||
|
|||
### "์์กด์"์ ์์กด์ฑ ๋ช
์ํ๊ธฐ |
|||
|
|||
*๊ฒฝ๋ก ์๋ ํจ์*์ ๋งค๊ฐ๋ณ์๋ก `Body`, `Query` ๋ฑ์ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๊ฐ์ด ์๋ก์ด ๋งค๊ฐ๋ณ์๋ก `Depends`๋ฅผ ์ฌ์ฉํฉ๋๋ค: |
|||
|
|||
=== "Python 3.10+" |
|||
|
|||
```Python hl_lines="13 18" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.9+" |
|||
|
|||
```Python hl_lines="15 20" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an_py39.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+" |
|||
|
|||
```Python hl_lines="16 21" |
|||
{!> ../../../docs_src/dependencies/tutorial001_an.py!} |
|||
``` |
|||
|
|||
=== "Python 3.10+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="11 16" |
|||
{!> ../../../docs_src/dependencies/tutorial001_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+ Annotated๊ฐ ์๋ ๊ฒฝ์ฐ" |
|||
|
|||
!!! ํ |
|||
๊ฐ๋ฅํ๋ค๋ฉด `Annotated`๊ฐ ๋ฌ๋ฆฐ ๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. |
|||
|
|||
```Python hl_lines="15 20" |
|||
{!> ../../../docs_src/dependencies/tutorial001.py!} |
|||
``` |
|||
|
|||
๋น๋ก `Body`, `Query` ๋ฑ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ๋ถ์ ํจ์์ ๋งค๊ฐ๋ณ์์ ์๋ `Depends`๋ฅผ ์ฌ์ฉํ์ง๋ง, `Depends`๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. |
|||
|
|||
`Depends`์ ๋จ์ผ ๋งค๊ฐ๋ณ์๋ง ์ ๋ฌํ์ต๋๋ค. |
|||
|
|||
์ด ๋งค๊ฐ๋ณ์๋ ํจ์๊ฐ์ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. |
|||
|
|||
์ฌ๋ฌ๋ถ์ ์ง์ **ํธ์ถํ์ง ์์์ต๋๋ค** (๋์ ๊ดํธ๋ฅผ ์น์ง ์์์ต๋๋ค), ๋จ์ง `Depends()`์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ ์คฌ์ ๋ฟ์
๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๊ทธ ํจ์๋ *๊ฒฝ๋ก ์๋ ํจ์*๊ฐ ์๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ต๋๋ค. |
|||
|
|||
!!! ํ |
|||
์ฌ๋ฌ๋ถ์ ๋ค์ ์ฅ์์ ํจ์๋ฅผ ์ ์ธํ๊ณ ์, "๋ค๋ฅธ ๊ฒ๋ค"์ด ์ด๋ป๊ฒ ์์กด์ฑ์ผ๋ก ์ฌ์ฉ๋๋์ง ์๊ฒ ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
์๋ก์ด ์์ฒญ์ด ๋์ฐฉํ ๋๋ง๋ค, **FastAPI**๋ ๋ค์์ ์ฒ๋ฆฌํฉ๋๋ค: |
|||
|
|||
* ์ฌ๋ฐ๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์์กด์ฑ("๋ํ๋๋ธ") ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. |
|||
* ํจ์์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ต๋๋ค. |
|||
* *๊ฒฝ๋ก ์๋ ํจ์*์ ์๋ ๋งค๊ฐ๋ณ์์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ ๋นํฉ๋๋ค |
|||
|
|||
```mermaid |
|||
graph TB |
|||
|
|||
common_parameters(["common_parameters"]) |
|||
read_items["/items/"] |
|||
read_users["/users/"] |
|||
|
|||
common_parameters --> read_items |
|||
common_parameters --> read_users |
|||
``` |
|||
|
|||
์ด๋ ๊ฒ ํ๋ฉด ๊ณต์ฉ ์ฝ๋๋ฅผ ํ๋ฒ๋ง ์ ์ด๋ ๋๋ฉฐ, **FastAPI**๋ *๊ฒฝ๋ก ์๋*์ ์ํด ์ด์ ๋ํ ํธ์ถ์ ์ฒ๋ฆฌํฉ๋๋ค. |
|||
|
|||
!!! ํ์ธ |
|||
ํน๋ณํ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์์๋ ๋๋ฉฐ, ์ด๋ฌํ ๊ฒ ํน์ ๋น์ทํ ์ข
๋ฅ๋ฅผ **FastAPI**์ "๋ฑ๋ก"ํ๊ธฐ ์ํด ์ด๋ค ๊ณณ์ ๋๊ฒจ์ฃผ์ง ์์๋ ๋ฉ๋๋ค. |
|||
|
|||
๋จ์ํ `Depends`์ ๋๊ฒจ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ฉฐ, **FastAPI**๋ ๋๋จธ์ง๋ฅผ ์ด์ฐํ ์ง ์๊ณ ์์ต๋๋ค. |
|||
|
|||
## `Annotated`์ธ ์์กด์ฑ ๊ณต์ ํ๊ธฐ |
|||
|
|||
์์ ์์ ์์ ๋ช๋ช ์์ **์ฝ๋ ์ค๋ณต**์ด ์๋ค๋ ๊ฒ์ ๋ณด์์ ๊ฒ๋๋ค. |
|||
|
|||
`common_parameters()`์์กด์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด, ํ์
๋ช
์์ `Depends()`์ ํจ๊ป ์ ์ฒด ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ด์ผ ํฉ๋๋ค: |
|||
|
|||
```Python |
|||
commons: Annotated[dict, Depends(common_parameters)] |
|||
``` |
|||
|
|||
ํ์ง๋ง `Annotated`๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ์, `Annotated` ๊ฐ์ ๋ณ์์ ์ ์ฅํ๊ณ ์ฌ๋ฌ ์ฅ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: |
|||
|
|||
=== "Python 3.10+" |
|||
|
|||
```Python hl_lines="12 16 21" |
|||
{!> ../../../docs_src/dependencies/tutorial001_02_an_py310.py!} |
|||
``` |
|||
|
|||
=== "Python 3.9+" |
|||
|
|||
```Python hl_lines="14 18 23" |
|||
{!> ../../../docs_src/dependencies/tutorial001_02_an_py39.py!} |
|||
``` |
|||
|
|||
=== "Python 3.8+" |
|||
|
|||
```Python hl_lines="15 19 24" |
|||
{!> ../../../docs_src/dependencies/tutorial001_02_an.py!} |
|||
``` |
|||
|
|||
!!! ํ |
|||
์ด๋ ๊ทธ์ ํ์ค ํ์ด์ฌ์ด๊ณ "type alias"๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ฌ์ค **FastAPI**์ ๊ตญํ๋๋ ๊ฒ์ ์๋๋๋ค. |
|||
|
|||
ํ์ง๋ง, `Annotated`๋ฅผ ํฌํจํ์ฌ, **FastAPI**๊ฐ ํ์ด์ฌ ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๊ธฐ์, ์ด๋ฅผ ์ฌ๋ฌ๋ถ์ ์ฝ๋ ํธ๋ฆญ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๐ |
|||
|
|||
์ด ์์กด์ฑ์ ๊ณ์ํด์ ์์ํ๋๋ก ์๋ํ ๊ฒ์ด๋ฉฐ, **์ ์ผ ์ข์ ๋ถ๋ถ**์ **ํ์
์ ๋ณด๊ฐ ๋ณด์กด๋๋ค๋ ๊ฒ์
๋๋ค**. ์ฆ ์ฌ๋ฌ๋ถ์ ํธ์ง๊ธฐ๊ฐ **์๋ ์์ฑ**, **์ธ๋ผ์ธ ์๋ฌ** ๋ฑ์ ๊ณ์ํด์ ์ ๊ณตํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. `mypy`๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. |
|||
|
|||
์ด๋ ํนํ **๋ง์ *๊ฒฝ๋ก ์๋***์์ **๊ฐ์ ์์กด์ฑ**์ ๊ณ์ํด์ ์ฌ์ฉํ๋ **๊ฑฐ๋ ์ฝ๋ ๊ธฐ๋ฐ**์์์ ์ฌ์ฉํ๋ฉด ์ ์ฉํ ๊ฒ์
๋๋ค. |
|||
|
|||
## `async`ํ๊ฒ, ํน์ `async`ํ์ง ์๊ฒ |
|||
|
|||
์์กด์ฑ์ด (*๊ฒฝ๋ก ์๋ ํจ์*์์ ์ฒ๋ผ ๋๊ฐ์ด) **FastAPI**์ ์ํด ํธ์ถ๋ ์ ์์ผ๋ฉฐ, ํจ์๋ฅผ ์ ์ํ ๋ ๋์ผํ ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. |
|||
|
|||
`async def`์ ์ฌ์ฉํ๊ฑฐ๋ ํน์ ์ผ๋ฐ์ ์ธ `def`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ธ `def` *๊ฒฝ๋ก ์๋ ํจ์* ์์ `async def`๋ก ์์กด์ฑ์ ์ ์ธํ ์ ์์ผ๋ฉฐ, `async def` *๊ฒฝ๋ก ์๋ ํจ์* ์์ `def`๋ก ์์กด์ฑ์ ์ ์ธํ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. |
|||
|
|||
์๋ฌด ๋ฌธ์ ์์ต๋๋ค. **FastAPI**๋ ๋ฌด์์ ํ ์ง ์๊ณ ์์ต๋๋ค. |
|||
|
|||
!!! ์ฐธ๊ณ |
|||
์ ๋ชจ๋ฅด์๊ฒ ๋ค๋ฉด, [Async: *"In a hurry?"*](../../async.md){.internal-link target=_blank} ๋ฌธ์์์ `async`์ `await`์ ๋ํด ํ์ธํ ์ ์์ต๋๋ค. |
|||
|
|||
## OpenAPI์ ํตํฉ |
|||
|
|||
๋ชจ๋ ์์ฒญ ์ ์ธ, ๊ฒ์ฆ๊ณผ ์์กด์ฑ(๋ฐ ํ์ ์์กด์ฑ)์ ๋ํ ์๊ตฌ ์ฌํญ์ ๋์ผํ OpenAPI ์คํค๋ง์ ํตํฉ๋ฉ๋๋ค. |
|||
|
|||
๋ฐ๋ผ์ ๋ํํ ๋ฌธ์์ ์ด๋ฌํ ์์กด์ฑ์ ๋ํ ๋ชจ๋ ์ ๋ณด ์ญ์ ํฌํจํ๊ณ ์์ต๋๋ค: |
|||
|
|||
<img src="/img/tutorial/dependencies/image01.png"> |
|||
|
|||
## ๊ฐ๋จํ ์ฌ์ฉ๋ฒ |
|||
|
|||
์ด๋ฅผ ๋ณด๋ฉด, *๊ฒฝ๋ก ์๋ ํจ์*๋ *๊ฒฝ๋ก*์ *์๋*์ด ๋งค์นญ๋๋ฉด ์ธ์ ๋ ์ง ์ฌ์ฉ๋๋๋ก ์ ์๋์์ผ๋ฉฐ, **FastAPI**๋ ์ฌ๋ฐ๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ํจ์๋ฅผ ํธ์ถํ๊ณ ํด๋น ์์ฒญ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค. |
|||
|
|||
์ฌ์ค, ๋ชจ๋ (ํน์ ๋๋ถ๋ถ์) ์น ํ๋ ์์ํฌ๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. |
|||
|
|||
์ฌ๋ฌ๋ถ์ ์ด๋ฌํ ํจ์๋ค์ ์ ๋ ์ง์ ํธ์ถํ์ง ์์ต๋๋ค. ํ๋ ์์ํฌ(์ด ๊ฒฝ์ฐ **FastAPI**)์ ์ํด ํธ์ถ๋ฉ๋๋ค. |
|||
|
|||
์์กด์ฑ ์ฃผ์
์์คํ
๊ณผ ํจ๊ป๋ผ๋ฉด **FastAPI**์๊ฒ ์ฌ๋ฌ๋ถ์ *๊ฒฝ๋ก ์๋ ํจ์*๊ฐ ์คํ๋๊ธฐ ์ ์ ์คํ๋์ด์ผ ํ๋ ๋ฌด์ธ๊ฐ์ ์ฌ๋ฌ๋ถ์ *๊ฒฝ๋ก ์๋ ํจ์* ๋ํ "์์กด"ํ๊ณ ์์์ ์๋ฆด ์ ์์ผ๋ฉฐ, **FastAPI**๋ ์ด๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ "์ฃผ์
"ํ ๊ฒ์
๋๋ค. |
|||
|
|||
"์์กด์ฑ ์ฃผ์
"์ด๋ผ๋ ๋์ผํ ์์ด๋์ด์ ๋ํ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์ฉ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: |
|||
|
|||
* ๋ฆฌ์์ค |
|||
* ์ ๊ณต์ |
|||
* ์๋น์ค |
|||
* ์ธ์ ํฐ๋ธ |
|||
* ์ปดํฌ๋ํธ |
|||
|
|||
## **FastAPI** ํ๋ฌ๊ทธ์ธ |
|||
|
|||
ํตํฉ๊ณผ "ํ๋ฌ๊ทธ์ธ"์ **์์กด์ฑ ์ฃผ์
** ์์คํ
์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก **"ํ๋ฌ๊ทธ์ธ"์ ๋ง๋ค ํ์๋ ์์ต๋๋ค**, ์๋ํ๋ฉด ์์กด์ฑ์ ์ฌ์ฉํจ์ผ๋ก์จ ์ฌ๋ฌ๋ถ์ *๊ฒฝ๋ก ์๋ ํจ์*์ ํตํฉ๊ณผ ์ํธ ์์ฉ์ ๋ฌดํ๋๋ก ์ ์ธํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ "๋ง ๊ทธ๋๋ก", ๊ทธ์ ํ์๋ก ํ๋ ํ์ด์ฌ ํจํค์ง๋ฅผ ์ํฌํธํ๊ณ ๋จ ๋ช ์ค์ ์ฝ๋๋ก ์ฌ๋ฌ๋ถ์ API ํจ์์ ํตํฉํจ์ผ๋ก์จ, ์์กด์ฑ์ ์์ฃผ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. |
|||
|
|||
๊ด๊ณํ ๋ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ณด์ ๋ฑ, ์ด์ ๋ํ ์์๋ฅผ ๋ค์ ์ฅ์์ ๋ณผ ์ ์์ต๋๋ค. |
|||
|
|||
## **FastAPI** ํธํ์ฑ |
|||
|
|||
์์กด์ฑ ์ฃผ์
์์คํ
์ ๋จ์ํจ์ **FastAPI**๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์์๋ค๊ณผ ํธํํ ์ ์๊ฒ ํฉ๋๋ค: |
|||
|
|||
* ๋ชจ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค |
|||
* NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค |
|||
* ์ธ๋ถ ํจํค์ง |
|||
* ์ธ๋ถ API |
|||
* ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ์์คํ
|
|||
* API ์ฌ์ฉ ๋ชจ๋ํฐ๋ง ์์คํ
|
|||
* ์๋ต ๋ฐ์ดํฐ ์ฃผ์
์์คํ
|
|||
* ๊ธฐํ ๋ฑ๋ฑ. |
|||
|
|||
## ๊ฐํธํ๊ณ ๊ฐ๋ ฅํ๋ค |
|||
|
|||
๊ณ์ธต์ ์ธ ์์กด์ฑ ์ฃผ์
์์คํ
์ ์ ์ํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ์ง๋ง, ์ฌ์ ํ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. |
|||
|
|||
์ฌ๋ฌ๋ถ์ ์ค์ค๋ก๋ฅผ ์์กดํ๋ ์์กด์ฑ์ ์ ์ํ ์ ์์ต๋๋ค. |
|||
|
|||
๋์๋, ๊ณ์ธต์ ์ธ ๋๋ฌด๋ก ๋ ์์กด์ฑ์ด ๋ง๋ค์ด์ง๋ฉฐ, ๊ทธ๋ฆฌ๊ณ **์์กด์ฑ ์ฃผ์
** ์์คํ
์ (ํ์ ์์กด์ฑ๋ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ด๋ฌํ ์์กด์ฑ๋ค์ ์ฒ๋ฆฌํ๊ณ ๊ฐ ๋จ๊ณ๋ง๋ค ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค(์ฃผ์
ํฉ๋๋ค). |
|||
|
|||
์๋ฅผ ๋ค๋ฉด, ์ฌ๋ฌ๋ถ์ด 4๊ฐ์ API ์๋ํฌ์ธํธ(*๊ฒฝ๋ก ์๋*)๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํด๋ด
์๋ค: |
|||
|
|||
* `/items/public/` |
|||
* `/items/private/` |
|||
* `/users/{user_id}/activate` |
|||
* `/items/pro/` |
|||
|
|||
๊ทธ ๋ค์ ๊ฐ๊ฐ์ ๋ํด ๊ทธ์ ์์กด์ฑ๊ณผ ํ์ ์์กด์ฑ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๊ถํ ์๊ตฌ ์ฌํญ์ ์ถ๊ฐํ ์ ์์ ๊ฒ๋๋ค: |
|||
|
|||
```mermaid |
|||
graph TB |
|||
|
|||
current_user(["current_user"]) |
|||
active_user(["active_user"]) |
|||
admin_user(["admin_user"]) |
|||
paying_user(["paying_user"]) |
|||
|
|||
public["/items/public/"] |
|||
private["/items/private/"] |
|||
activate_user["/users/{user_id}/activate"] |
|||
pro_items["/items/pro/"] |
|||
|
|||
current_user --> active_user |
|||
active_user --> admin_user |
|||
active_user --> paying_user |
|||
|
|||
current_user --> public |
|||
active_user --> private |
|||
admin_user --> activate_user |
|||
paying_user --> pro_items |
|||
``` |
|||
|
|||
## **OpenAPI**์์ ํตํฉ |
|||
|
|||
์ด ๋ชจ๋ ์์กด์ฑ์ ๊ฐ๊ฐ์ ์๊ตฌ์ฌํญ์ ์ ์ธํ๋ ๋์์, *๊ฒฝ๋ก ์๋*์ ๋งค๊ฐ๋ณ์, ๊ฒ์ฆ ๋ฑ์ ์ถ๊ฐํฉ๋๋ค. |
|||
|
|||
**FastAPI**๋ ์ด ๋ชจ๋ ๊ฒ์ OpenAPI ์คํค๋ง์ ์ถ๊ฐํ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ํํ ๋ฌธ์ ์์คํ
์ ๋ํ๋ ๊ฒ์
๋๋ค. |
Loadingโฆ
Reference in new issue