Browse Source

๐ŸŒ Add Korean translation for `docs/ko/docs/tutorial/extra-models.md`

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- unwrap -> ์–ธ๋žฉ(unwrap) #13061 ์˜ accept ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฒˆ์—ญ ๋ณ€๊ฒฝ ์˜ˆ์ •
- unwraping -> ์–ธ๋ž˜ํ•‘(unwrapping) #13061 ์˜ accept ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฒˆ์—ญ ๋ณ€๊ฒฝ ์˜ˆ์ •
- type annotation -> ํƒ€์ž…์ฃผ์„(type annotation)
- argument value -> ์ธ์ž ๊ฐ’(argument value)
pull/13063/head
jts8257 4 months ago
parent
commit
11e0ed944b
  1. 223
      docs/ko/docs/tutorial/extra-models.md

223
docs/ko/docs/tutorial/extra-models.md

@ -0,0 +1,223 @@
# ์ถ”๊ฐ€ ๋ชจ๋ธ
์ง€๋‚œ ์˜ˆ์ œ์— ์ด์–ด์„œ, ์—ฐ๊ด€๋œ ๋ชจ๋ธ์„ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ–๋Š” ๊ฒƒ์€ ํ”ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ ์œ ์ € ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ์— ๊ทธ๋Ÿฌํ•œ๋ฐ, ์™œ๋ƒํ•˜๋ฉด:
* **์ž…๋ ฅ ๋ชจ๋ธ** ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
* **์ถœ๋ ฅ ๋ชจ๋ธ** ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
* **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ** ์€ ํ•ด์‹œ์ฒ˜๋ฆฌ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
/// danger | ์œ„ํ—˜
์ ˆ๋Œ€ ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์ €์žฅํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•ญ์ƒ ์ดํ›„์— ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ "์•ˆ์ „ํ•œ ํ•ด์‹œ(secure hash)"๋กœ ์ €์žฅํ•˜์„ธ์š”.
๋งŒ์•ฝ ์ด๊ฒŒ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, [security chapters](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}.์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
///
## ๋‹ค์ค‘ ๋ชจ๋ธ
์•„๋ž˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ์™€ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์œ„์น˜๋ฅผ ํฌํ•จํ•˜์—ฌ, ๊ฐ ๋ชจ๋ธ๋“ค์ด ์–ด๋–ค ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์ „๋ฐ˜์ ์ธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:
{* ../../docs_src/extra_models/tutorial001_py310.py hl[7,9,14,20,22,27:28,31:33,38:39] *}
/// info | ์ •๋ณด
Pydantic v1์—์„œ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ `.dict()`๋กœ ๋ถˆ๋ ธ์œผ๋ฉฐ, Pydantic v2์—์„œ๋Š” `.model_dump()`๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. `.dict()`๋Š” ์—ฌ์ „ํžˆ ์ง€์›๋˜์ง€๋งŒ ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋Š” Pydantic v1๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด `.dict()`๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Pydantic v2๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด `.model_dump()`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
///
### `**user_in.dict()` ์— ๋Œ€ํ•˜์—ฌ
#### Pydantic์˜ `.dict()`
`user_in`์€ Pydantic ๋ชจ๋ธ ํด๋ž˜์Šค์ธ `UserIn`์ž…๋‹ˆ๋‹ค.
Pydantic ๋ชจ๋ธ์€ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ `dict`๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” `.dict()` ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด Pydantic ๊ฐ์ฒด `user_in`์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python
user_in = UserIn(username="john", password="secret", email="[email protected]")
```
๊ทธ ๋‹ค์Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค:
```Python
user_dict = user_in.dict()
```
์ด์ œ ๋ณ€์ˆ˜ `user_dict`์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ `dict`๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(์ด๋Š” Pydantic ๋ชจ๋ธ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ `dict`์ž…๋‹ˆ๋‹ค).
๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•˜๋ฉด:
```Python
print(user_dict)
```
Python์˜ `dict`๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค:
```Python
{
'username': 'john',
'password': 'secret',
'email': '[email protected]',
'full_name': None,
}
```
#### `dict` ์–ธ๋ž˜ํ•‘(Unwrapping)
`user_dict`์™€ ๊ฐ™์€ `dict`๋ฅผ ํ•จ์ˆ˜(๋˜๋Š” ํด๋ž˜์Šค)์— `**user_dict`๋กœ ์ „๋‹ฌํ•˜๋ฉด, Python์€ ์ด๋ฅผ "์–ธ๋žฉ(unwrap)"ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ `user_dict`์˜ ํ‚ค์™€ ๊ฐ’์„ ๊ฐ๊ฐ ํ‚ค-๊ฐ’ ์ธ์ž๋กœ ์ง์ ‘ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ์œ„์—์„œ ์ƒ์„ฑํ•œ `user_dict`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด:
```Python
UserInDB(**user_dict)
```
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:
```Python
UserInDB(
username="john",
password="secret",
email="[email protected]",
full_name=None,
)
```
ํ˜น์€ ๋” ์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด, `user_dict`๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฏธ๋ž˜์— ์–ด๋–ค ๋‚ด์šฉ์ด ํฌํ•จ๋˜๋”๋ผ๋„:
```Python
UserInDB(
username = user_dict["username"],
password = user_dict["password"],
email = user_dict["email"],
full_name = user_dict["full_name"],
)
```
#### ๋‹ค๋ฅธ Pydantic ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ Pydantic ๋ชจ๋ธ ์ƒ์„ฑ
์œ„์˜ ์˜ˆ์ œ์—์„œ `user_in.dict()`๋กœ๋ถ€ํ„ฐ `user_dict`๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์•„๋ž˜ ์ฝ”๋“œ๋Š”:
```Python
user_dict = user_in.dict()
UserInDB(**user_dict)
```
๋‹ค์Œ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค:
```Python
UserInDB(**user_in.dict())
```
...์™œ๋ƒํ•˜๋ฉด `user_in.dict()`๋Š” `dict`์ด๋ฉฐ, ์ด๋ฅผ `**`๋กœ Python์ด "์–ธ๋žฉ(unwrap)"ํ•˜๋„๋ก ํ•˜์—ฌ `UserInDB`์— ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ๋‹ค๋ฅธ Pydantic ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด Pydantic ๋ชจ๋ธ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
#### `dict` ์–ธ๋ž˜ํ•‘(Unwrapping)๊ณผ ์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ
๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ ์ธ์ž `hashed_password=hashed_password`๋ฅผ ํฌํ•จํ•˜๋ฉด:
```Python
UserInDB(**user_in.dict(), hashed_password=hashed_password)
```
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:
```Python
UserInDB(
username = user_dict["username"],
password = user_dict["password"],
email = user_dict["email"],
full_name = user_dict["full_name"],
hashed_password = hashed_password,
)
```
/// warning | ๊ฒฝ๊ณ 
์ถ”๊ฐ€์ ์œผ๋กœ ์ œ๊ณต๋œ ํ•จ์ˆ˜ `fake_password_hasher`์™€ `fake_save_user`๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‹œ์—ฐํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ์ผ ๋ฟ์ด๋ฉฐ, ์‹ค์ œ ๋ณด์•ˆ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
///
## ์ค‘๋ณต ์ค„์ด๊ธฐ
์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ์€ **FastAPI**์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
์ฝ”๋“œ ์ค‘๋ณต์€ ๋ฒ„๊ทธ, ๋ณด์•ˆ ๋ฌธ์ œ, ์ฝ”๋“œ ๋น„๋™๊ธฐํ™” ๋ฌธ์ œ(ํ•œ ๊ณณ์€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ณณ์€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ) ๋“ฑ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋ธ๋“ค์€ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ ์†์„ฑ ์ด๋ฆ„๊ณผ ํƒ€์ž…์„ ์ค‘๋ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
`UserBase` ๋ชจ๋ธ์„ ์„ ์–ธํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋ธ๋“ค์˜ ๊ธฐ๋ณธ(base)์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ชจ๋ธ์„ ์ƒ์†๋ฐ›์•„ ์†์„ฑ๊ณผ ํƒ€์ž… ์„ ์–ธ(์œ ํ˜• ์„ ์–ธ, ๊ฒ€์ฆ ๋“ฑ)์„ ์ƒ์†ํ•˜๋Š” ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜, ๊ฒ€์ฆ, ๋ฌธ์„œํ™” ๋“ฑ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ๋ชจ๋ธ ๊ฐ„์˜ ์ฐจ์ด์ ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ‰๋ฌธ `password`๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, `hashed_password`๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ, ํ˜น์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ):
{* ../../docs_src/extra_models/tutorial002_py310.py hl[7,13:14,17:18,21:22] *}
## `Union` ๋˜๋Š” `anyOf`
๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ํƒ€์ž…์„ ํฌํ•จํ•˜๋Š” `Union`์œผ๋กœ ์‘๋‹ต์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‘๋‹ต์ด ๊ทธ ์ค‘ ํ•˜๋‚˜์˜ ํƒ€์ž…์ผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
OpenAPI์—์„œ๋Š” ์ด๋ฅผ `anyOf`๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ํ‘œ์ค€ Python ํƒ€์ž… ํžŒํŠธ์ธ <a href="https://docs.python.org/3/library/typing.html#typing.Union" class="external-link" target="_blank">`typing.Union`</a>์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
/// note | ์ฐธ๊ณ 
<a href="https://docs.pydantic.dev/latest/concepts/types/#unions" class="external-link" target="_blank">`Union`</a>์„ ์ •์˜ํ• ๋•Œ๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ๋จผ์ € ํฌํ•จํ•˜๊ณ , ๋œ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ๊ทธ ๋’ค์— ๋‚˜์—ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” `Union[PlaneItem, CarItem]` ๋ฅผ ๋ณด๋ฉด, ๋” ๊ตฌ์ฒด์ ์ธ `PlaneItem`์ด `CarItem`๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
///
{* ../../docs_src/extra_models/tutorial003_py310.py hl[1,14:15,18:20,33] *}
### Python 3.10์—์„œ `Union`
์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” `response_model` ์ธ์ž ๊ฐ’์œผ๋กœ `Union[PlaneItem, CarItem]`์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ, ์ด๋ฅผ **ํƒ€์ž… ์ฃผ์„(type annotation)** ์ด ์•„๋‹Œ **์ธ์ž ๊ฐ’(argument value)** ์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Python 3.10์—์„œ๋„ `Union`์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ํƒ€์ž… ์ฃผ์„์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ง ๋ง‰๋Œ€(|)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python
some_variable: PlaneItem | CarItem
```
ํ•˜์ง€๋งŒ ์ด๋ฅผ `response_model=PlaneItem | CarItem`๊ณผ ๊ฐ™์ด ํ• ๋‹นํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Python์ด ์ด๋ฅผ ํƒ€์ž… ์ฃผ์„์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š๊ณ , `PlaneItem`๊ณผ `CarItem` ์‚ฌ์ด์˜ **์ž˜๋ชป๋œ ์—ฐ์‚ฐ(invalid operation)**์„ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค
## ๋ชจ๋ธ ๋ฆฌ์ŠคํŠธ
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๊ฐ์ฒด ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ์‘๋‹ต์„ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ํ‘œ์ค€ Python์˜ `typing.List`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”(๋˜๋Š” Python 3.9 ์ด์ƒ์—์„œ๋Š” ๋‹จ์ˆœํžˆ `list`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค):
{* ../../docs_src/extra_models/tutorial004_py39.py hl[18] *}
## ์ž„์˜์˜ `dict` ์‘๋‹ต
Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ‚ค์™€ ๊ฐ’์˜ ํƒ€์ž…๋งŒ ์„ ์–ธํ•˜์—ฌ ํ‰๋ฒ”ํ•œ ์ž„์˜์˜ `dict`๋กœ ์‘๋‹ต์„ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” Pydantic ๋ชจ๋ธ์— ํ•„์š”ํ•œ ์œ ํšจํ•œ ํ•„๋“œ/์†์„ฑ ์ด๋ฆ„์„ ์‚ฌ์ „์— ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ, `typing.Dict`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” Python 3.9 ์ด์ƒ์—์„œ๋Š” ๋‹จ์ˆœํžˆ `dict`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค):
{* ../../docs_src/extra_models/tutorial005_py39.py hl[6] *}
## ์š”์•ฝ
์—ฌ๋Ÿฌ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ ๊ฒฝ์šฐ์— ๋งž๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ์ƒ์†ํ•˜์„ธ์š”.
์—”ํ„ฐํ‹ฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ "์ƒํƒœ"๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์—”ํ„ฐํ‹ฐ๋‹น ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ ์ € "์—”ํ„ฐํ‹ฐ"๊ฐ€ `password`, `password_hash`, ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ง์ž…๋‹ˆ๋‹ค.
Loadingโ€ฆ
Cancel
Save