Browse Source
* Update all and add missing
* ๐จ Auto format
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pull/14925/head
committed by
GitHub
93 changed files with 548 additions and 620 deletions
@ -0,0 +1,61 @@ |
|||
# ๊ณ ๊ธ Python ํ์
{ #advanced-python-types } |
|||
|
|||
Python ํ์
์ ๋ค๋ฃฐ ๋ ์ ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ์์ด๋์ด๋ฅผ ์๊ฐํฉ๋๋ค. |
|||
|
|||
## `Union` ๋๋ `Optional` ์ฌ์ฉ { #using-union-or-optional } |
|||
|
|||
์ด๋ค ์ด์ ๋ก ์ฝ๋์์ `|`๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด, ์๋ฅผ ๋ค์ด ํ์
์ด๋
ธํ
์ด์
์ด ์๋๋ผ `response_model=` ๊ฐ์ ๊ณณ์ด๋ผ๋ฉด, ํ์ดํ ๋ฌธ์(`|`) ๋์ `typing`์ `Union`์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, ์ด๋ค ๊ฐ์ด `str` ๋๋ `None`์ด ๋ ์ ์๋ค๊ณ ์ ์ธํ ์ ์์ต๋๋ค: |
|||
|
|||
```python |
|||
from typing import Union |
|||
|
|||
|
|||
def say_hi(name: Union[str, None]): |
|||
print(f"Hi {name}!") |
|||
``` |
|||
|
|||
`typing`์๋ `None`์ด ๋ ์ ์์์ ์ ์ธํ๋ ์ถ์ฝํ์ผ๋ก `Optional`๋ ์์ต๋๋ค. |
|||
|
|||
์์ฃผ ๊ฐ์ธ์ ์ธ ๊ด์ ์์์ ํ์
๋๋ค: |
|||
|
|||
- ๐จ `Optional[SomeType]` ์ฌ์ฉ์ ํผํ์ธ์ |
|||
- ๋์ โจ **`Union[SomeType, None]`๋ฅผ ์ฌ์ฉํ์ธ์** โจ. |
|||
|
|||
๋์ ๋๋ฑํ๋ฉฐ ๋ด๋ถ์ ์ผ๋ก๋ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๋จ์ด "optional"์ ๊ฐ์ด ์ ํ ์ฌํญ์ด๋ผ๋ ์ธ์์ ์ฃผ๋ ๋ฐ๋ฉด, ์ค์ ์๋ฏธ๋ "๊ฐ์ด `None`์ด ๋ ์ ์๋ค"๋ ๋ป์
๋๋ค. ๊ฐ์ด ์ ํ ์ฌํญ์ด ์๋๋ผ ์ฌ์ ํ ํ์์ธ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ต๋๋ค. |
|||
|
|||
`Union[SomeType, None]`๊ฐ ์๋ฏธ๋ฅผ ๋ ๋ช
ํํ๊ฒ ๋๋ฌ๋ธ๋ค๊ณ ์๊ฐํฉ๋๋ค. |
|||
|
|||
์ด๋ ๋จ์ง ๋จ์ด์ ๋ช
์นญ์ ๋ฌธ์ ์
๋๋ค. ํ์ง๋ง ์ด๋ฐ ๋จ์ด๊ฐ ์ฌ๋ฌ๋ถ๊ณผ ํ์์ด ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์๊ฐํ๋์ง์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, ๋ค์ ํจ์๋ฅผ ๋ณด์ธ์: |
|||
|
|||
```python |
|||
from typing import Optional |
|||
|
|||
|
|||
def say_hi(name: Optional[str]): |
|||
print(f"Hey {name}!") |
|||
``` |
|||
|
|||
๋งค๊ฐ๋ณ์ `name`์ `Optional[str]`๋ก ์ ์๋์ด ์์ง๋ง, ์ฌ์ค ์ ํ์ ์ด์ง ์์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์ ์์ด ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค: |
|||
|
|||
```Python |
|||
say_hi() # ์ด๋ฐ, ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค! ๐ฑ |
|||
``` |
|||
|
|||
`name` ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํ์์
๋๋ค(์ ํ์ ์ด ์๋). ๋์ , `name`์๋ `None`์ ์ ๋ฌํ ์ ์์ต๋๋ค: |
|||
|
|||
```Python |
|||
say_hi(name=None) # ์๋ํฉ๋๋ค. None์ ์ ํจํฉ๋๋ค ๐ |
|||
``` |
|||
|
|||
์ข์ ์์์, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ์
์ ํฉ์งํฉ์ ์ ์ํ ๋ ๊ทธ๋ฅ `|`๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์
๋๋ค: |
|||
|
|||
```python |
|||
def say_hi(name: str | None): |
|||
print(f"Hey {name}!") |
|||
``` |
|||
|
|||
๊ทธ๋์ ๋ณดํต์ `Optional`๊ณผ `Union` ๊ฐ์ ์ด๋ฆ์ ๋ํด ๊ฑฑ์ ํ์ง ์์ผ์
๋ ๋ฉ๋๋ค. ๐ |
|||
@ -54,7 +54,7 @@ Pydantic ๋ชจ๋ธ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก, ํ์
์ด๋
ธํ
์ด์
(๊ทธ๋ฆฌ๊ณ ํ์ |
|||
|
|||
๋ค์ํ ๋ฐ์ดํฐ ํ์
, `Field()`๋ก ์ถ๊ฐ ๊ฒ์ฆ ๋ฑ Pydantic ๋ชจ๋ธ์์ ์ฌ์ฉํ๋ ๋์ผํ ๊ฒ์ฆ ๊ธฐ๋ฅ๊ณผ ๋๊ตฌ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
{* ../../docs_src/settings/tutorial001_py39.py hl[2,5:8,11] *} |
|||
{* ../../docs_src/settings/tutorial001_py310.py hl[2,5:8,11] *} |
|||
|
|||
/// tip | ํ |
|||
|
|||
@ -70,7 +70,7 @@ Pydantic ๋ชจ๋ธ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก, ํ์
์ด๋
ธํ
์ด์
(๊ทธ๋ฆฌ๊ณ ํ์ |
|||
|
|||
์ด์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ `settings` ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/tutorial001_py39.py hl[18:20] *} |
|||
{* ../../docs_src/settings/tutorial001_py310.py hl[18:20] *} |
|||
|
|||
### ์๋ฒ ์คํํ๊ธฐ { #run-the-server } |
|||
|
|||
@ -104,11 +104,11 @@ $ ADMIN_EMAIL="[email protected]" APP_NAME="ChimichangApp" fastapi run main.p |
|||
|
|||
์๋ฅผ ๋ค์ด `config.py` ํ์ผ์ ๋ค์์ฒ๋ผ ๋ง๋ค ์ ์์ต๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/app01_py39/config.py *} |
|||
{* ../../docs_src/settings/app01_py310/config.py *} |
|||
|
|||
๊ทธ๋ฆฌ๊ณ `main.py` ํ์ผ์์ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/app01_py39/main.py hl[3,11:13] *} |
|||
{* ../../docs_src/settings/app01_py310/main.py hl[3,11:13] *} |
|||
|
|||
/// tip | ํ |
|||
|
|||
@ -126,7 +126,7 @@ $ ADMIN_EMAIL="[email protected]" APP_NAME="ChimichangApp" fastapi run main.p |
|||
|
|||
์ด์ ์์์์ ์ด์ด์, `config.py` ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/app02_an_py39/config.py hl[10] *} |
|||
{* ../../docs_src/settings/app02_an_py310/config.py hl[10] *} |
|||
|
|||
์ด์ ๋ ๊ธฐ๋ณธ ์ธ์คํด์ค `settings = Settings()`๋ฅผ ์์ฑํ์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ธ์. |
|||
|
|||
@ -134,7 +134,7 @@ $ ADMIN_EMAIL="[email protected]" APP_NAME="ChimichangApp" fastapi run main.p |
|||
|
|||
์ด์ ์๋ก์ด `config.Settings()`๋ฅผ ๋ฐํํ๋ ์์กด์ฑ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
{* ../../docs_src/settings/app02_an_py39/main.py hl[6,12:13] *} |
|||
{* ../../docs_src/settings/app02_an_py310/main.py hl[6,12:13] *} |
|||
|
|||
/// tip | ํ |
|||
|
|||
@ -146,13 +146,13 @@ $ ADMIN_EMAIL="[email protected]" APP_NAME="ChimichangApp" fastapi run main.p |
|||
|
|||
๊ทธ ๋ค์ *๊ฒฝ๋ก ์ฒ๋ฆฌ ํจ์*์์ ์ด๋ฅผ ์์กด์ฑ์ผ๋ก ์๊ตฌํ๊ณ , ํ์ํ ์ด๋์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
{* ../../docs_src/settings/app02_an_py39/main.py hl[17,19:21] *} |
|||
{* ../../docs_src/settings/app02_an_py310/main.py hl[17,19:21] *} |
|||
|
|||
### ์ค์ ๊ณผ ํ
์คํธ { #settings-and-testing } |
|||
|
|||
๊ทธ ๋ค์, `get_settings`์ ๋ํ ์์กด์ฑ override๋ฅผ ๋ง๋ค์ด ํ
์คํธ ์ค์ ๋ค๋ฅธ ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์์ง๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/app02_an_py39/test_main.py hl[9:10,13,21] *} |
|||
{* ../../docs_src/settings/app02_an_py310/test_main.py hl[9:10,13,21] *} |
|||
|
|||
์์กด์ฑ override์์๋ ์ `Settings` ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ `admin_email`์ ์ ๊ฐ์ ์ค์ ํ๊ณ , ๊ทธ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. |
|||
|
|||
@ -193,11 +193,11 @@ APP_NAME="ChimichangApp" |
|||
|
|||
๊ทธ๋ฆฌ๊ณ `config.py`๋ฅผ ๋ค์์ฒ๋ผ ์
๋ฐ์ดํธํฉ๋๋ค: |
|||
|
|||
{* ../../docs_src/settings/app03_an_py39/config.py hl[9] *} |
|||
{* ../../docs_src/settings/app03_an_py310/config.py hl[9] *} |
|||
|
|||
/// tip | ํ |
|||
|
|||
`model_config` ์์ฑ์ Pydantic ์ค์ ์ ์ํ ๊ฒ์
๋๋ค. ์์ธํ ๋ด์ฉ์ <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic: Concepts: Configuration</a>์ ์ฐธ๊ณ ํ์ธ์. |
|||
`model_config` ์์ฑ์ Pydantic ์ค์ ์ ์ํ ๊ฒ์
๋๋ค. ์์ธํ ๋ด์ฉ์ <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic: Concepts: Configuration</a>๋ฅผ ์ฐธ๊ณ ํ์ธ์. |
|||
|
|||
/// |
|||
|
|||
@ -226,11 +226,11 @@ def get_settings(): |
|||
|
|||
ํ์ง๋ง ์์ `@lru_cache` ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, `Settings` ๊ฐ์ฒด๋ ์ต์ด ํธ์ถ ์ ๋ฑ ํ ๋ฒ๋ง ์์ฑ๋ฉ๋๋ค. โ๏ธ |
|||
|
|||
{* ../../docs_src/settings/app03_an_py39/main.py hl[1,11] *} |
|||
{* ../../docs_src/settings/app03_an_py310/main.py hl[1,11] *} |
|||
|
|||
๊ทธ ๋ค์ ์์ฒญ๋ค์์ ์์กด์ฑ์ผ๋ก `get_settings()`๊ฐ ๋ค์ ํธ์ถ๋ ๋๋ง๋ค, `get_settings()`์ ๋ด๋ถ ์ฝ๋๋ฅผ ์คํํด์ ์ `Settings` ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋์ , ์ฒซ ํธ์ถ์์ ๋ฐํ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ณ์ ๋ฐํํฉ๋๋ค. |
|||
|
|||
#### `lru_cache` Technical Details { #lru-cache-technical-details } |
|||
#### `lru_cache` ๊ธฐ์ ์ธ๋ถ์ฌํญ { #lru-cache-technical-details } |
|||
|
|||
`@lru_cache`๋ ๋ฐ์ฝ๋ ์ด์
ํ ํจ์๊ฐ ๋งค๋ฒ ๋ค์ ๊ณ์ฐํ๋ ๋์ , ์ฒซ ๋ฒ์งธ์ ๋ฐํ๋ ๋์ผํ ๊ฐ์ ๋ฐํํ๋๋ก ํจ์๋ฅผ ์์ ํฉ๋๋ค(์ฆ, ๋งค๋ฒ ํจ์ ์ฝ๋๋ฅผ ์คํํ์ง ์์ต๋๋ค). |
|||
|
|||
|
|||
@ -1,3 +1,3 @@ |
|||
# ๋ฆฌ์์ค { #resources } |
|||
|
|||
์ถ๊ฐ ๋ฆฌ์์ค, ์ธ๋ถ ๋งํฌ ๋ฑ. โ๏ธ |
|||
์ถ๊ฐ ๋ฆฌ์์ค, ์ธ๋ถ ๋งํฌ, ๊ทธ๋ฆฌ๊ณ ๋ ๋ง์ ์๋ฃ. โ๏ธ |
|||
|
|||
@ -0,0 +1,11 @@ |
|||
/// details | ๐ AI์ ์ฌ๋์ด ํจ๊ปํ ๋ฒ์ญ |
|||
|
|||
์ด ๋ฒ์ญ์ ์ฌ๋์ ์๋ด๋ฅผ ๋ฐ์ AI๊ฐ ๋ง๋ค์์ต๋๋ค. ๐ค |
|||
|
|||
์๋ฌธ์ ์๋ฏธ๋ฅผ ์คํดํ๊ฑฐ๋ ๋ถ์์ฐ์ค๋ฌ์ ๋ณด์ด๋ ๋ฑ ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. ๐ค |
|||
|
|||
[AI LLM์ ๋ ์ ์๋ดํ๋ ๋ฐ ๋์์ ์ฃผ์ธ์](https://fastapi.tiangolo.com/ko/contributing/#translations). |
|||
|
|||
[์๋ฌธ ๋ฒ์ ](ENGLISH_VERSION_URL) |
|||
|
|||
/// |
|||
Loadingโฆ
Reference in new issue