@ -1,12 +1,12 @@
# ์ฒซ๊ฑธ์
๊ฐ์ฅ ๋จ์ํ FastAPI ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ ๋๋ค:
๊ฐ์ฅ ๋จ์ํ FastAPI ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์
๋๋ค:
```Python
{!../../../docs_src/first_steps/tutorial001.py!}
```
์๋ฅผ `main.py` ์ ๋ณต์ฌํฉ๋๋ค.
์ ์ฝ๋ ๋ฅผ `main.py` ์ ๋ณต์ฌํฉ๋๋ค.
๋ผ์ด๋ธ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค:
@ -29,9 +29,9 @@ $ uvicorn main:app --reload
* `main` : ํ์ผ `main.py` (ํ์ด์ฌ "๋ชจ๋").
* `app` : `main.py` ๋ด๋ถ์ `app = FastAPI()` ์ค์์ ์์ฑํ ์ค๋ธ์ ํธ.
* `--reload` : ์ฝ๋ ๋ณ๊ฒฝ ํ ์๋ฒ ์ฌ์์. ๊ฐ๋ฐ ์๋ง ์ฌ์ฉ.
* `--reload` : ์ฝ๋ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ์๋ฒ ์ฌ์์. ๊ฐ๋ฐ ์ ์๋ง ์ฌ์ฉ.
์ถ๋ ฅ์ ์๋์ ๊ฐ์ ์ค ์ด ์์ต๋๋ค:
์ถ๋ ฅ๋๋ ์ค๋ค ์ค์๋ ์๋์ ๊ฐ์ ๋ด์ฉ ์ด ์์ต๋๋ค:
```hl_lines="4"
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
@ -75,7 +75,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### API "์คํค๋ง"
์ด ๊ฒฝ์ฐ, < a href = "https://github.com/OAI/OpenAPI-Specification" class = "external-link" target = "_blank" > OpenAPI< / a > ๋ API์ ์คํค๋ง๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋์ง ์ง์ํ๋ ๊ท๊ฒฉ์
๋๋ค.
< a href = "https://github.com/OAI/OpenAPI-Specification" class = "external-link" target = "_blank" > OpenAPI< / a > ๋ API์ ์คํค๋ง๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋์ง ์ง์ํ๋ ๊ท๊ฒฉ์
๋๋ค.
์ด ์คํค๋ง ์ ์๋ API ๊ฒฝ๋ก, ๊ฐ๋ฅํ ๋งค๊ฐ๋ณ์ ๋ฑ์ ํฌํจํฉ๋๋ค.
@ -87,13 +87,13 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### OpenAPI์ JSON ์คํค๋ง
OpenAPI๋ API์ ๋ํ API ์คํค๋ง๋ฅผ ์ ์ํฉ๋๋ค. ๋ํ ์ด ์คํค๋ง์ ๋ JSON ๋ฐ์ดํฐ ์คํค๋ง์ ํ์ค์ธ **JSON ์คํค๋ง**๋ฅผ ์ฌ์ฉํ์ฌ API์์ ๋ณด๋ด๊ณ ๋ฐ์ ๋ฐ์ดํฐ์ ์ ์(๋๋ "์คํค๋ง")๋ฅผ ํฌํจํฉ๋๋ค.
OpenAPI๋ ๋น์ ์ API์ ๋ํ API ์คํค๋ง๋ฅผ ์ ์ํฉ๋๋ค. ๋ํ ์ด ์คํค๋ง๋ JSON ๋ฐ์ดํฐ ์คํค๋ง์ ํ์ค์ธ **JSON ์คํค๋ง**๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ ์ API๊ฐ ๋ณด๋ด๊ณ ๋ฐ๋ ๋ฐ์ดํฐ์ ์ ์(๋๋ "์คํค๋ง")๋ฅผ ํฌํจํฉ๋๋ค.
#### `openapi.json` ํ์ธ
๊ฐ๊ณต๋์ง ์์ OpenAPI ์คํค๋ง๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ถ๊ธํ๋ค๋ฉด, FastAPI๋ ์๋์ผ๋ก API์ ์ค๋ช
๊ณผ ํจ๊ป JSON (์คํค๋ง)๋ฅผ ์์ฑํฉ๋๋ค.
FastAPI๋ ์๋์ผ๋ก API์ ์ค๋ช
๊ณผ ํจ๊ป JSON (์คํค๋ง)๋ฅผ ์์ฑํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ง์ ๋ณผ ์ ์์ต๋๋ค: < a href = "http://127.0.0.1:8000/openapi.json" class = "external-link" target = "_blank" > http://127.0.0.1:8000/openapi.json< / a > .
๊ฐ๊ณต๋์ง ์์ OpenAPI ์คํค๋ง๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ถ๊ธํ๋ค๋ฉด, ์ฌ๊ธฐ์์ ์ง์ ๋ณผ ์ ์์ต๋๋ค: < a href = "http://127.0.0.1:8000/openapi.json" class = "external-link" target = "_blank" > http://127.0.0.1:8000/openapi.json< / a > .
๋ค์๊ณผ ๊ฐ์ด ์์ํ๋ JSON์ ํ์ธํ ์ ์์ต๋๋ค:
@ -124,7 +124,7 @@ OpenAPI ์คํค๋ง๋ ํฌํจ๋ ๋ ๊ฐ์ ๋ํํ ๋ฌธ์ ์์คํ
์ ์ ๊ณต
๊ทธ๋ฆฌ๊ณ OpenAPI์ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ญ ๊ฐ์ง ๋์์ด ์์ต๋๋ค. **FastAPI**๋ก ๋น๋ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฌํ ๋์์ ์ฝ๊ฒ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
API์ ํต์ ํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ํด ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ก ํ๋ก ํธ์๋, ๋ชจ๋ฐ์ผ, IoT ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ต๋๋ค.
API์ ํต์ ํ๋ ํด๋ผ์ด์ธํธ(ํ๋ก ํธ์๋, ๋ชจ๋ฐ์ผ, IoT ์ ํ๋ฆฌ์ผ์ด์
๋ฑ) ๋ฅผ ์ํด ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
## ๋จ๊ณ๋ณ ์์ฝ
@ -134,7 +134,7 @@ API์ ํต์ ํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ํด ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ
{!../../../docs_src/first_steps/tutorial001.py!}
```
`FastAPI` ๋ API์ ๋ ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ์ด์ฌ ํด๋์ค์
๋๋ค.
`FastAPI` ๋ ๋น์ ์ API๋ฅผ ์ ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ์ด์ฌ ํด๋์ค์
๋๋ค.
!!! note "๊ธฐ์ ์ธ๋ถ์ฌํญ"
`FastAPI` ๋ `Starlette` ๋ฅผ ์ง์ ์์ํ๋ ํด๋์ค์
๋๋ค.
@ -147,11 +147,11 @@ API์ ํต์ ํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ํด ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ
{!../../../docs_src/first_steps/tutorial001.py!}
```
์ฌ๊ธฐ ์๋ `app` ๋ณ์๋ `FastAPI` ํด๋์ค์ "์ธ์คํด์ค"๊ฐ ๋ฉ๋๋ค.
์ฌ๊ธฐ์์ `app` ๋ณ์๋ `FastAPI` ํด๋์ค์ "์ธ์คํด์ค"๊ฐ ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ API๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ํธ์์ฉ์ ์ฃผ์ ์ง์ ์ด ๋ ๊ฒ์
๋๋ค.
์ด๊ฒ์ ๋น์ ์ ๋ชจ๋ API๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ํธ์์ฉ์ ์ฃผ์ ์ง์ ์ด ๋ ๊ฒ์
๋๋ค.
์ด `app` ์ ๋ค์ ๋ช
๋ น์์ `uvicorn` ์ด ์ฐธ์กฐํ๊ณ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค:
์ด `app` ์ ๋ค์ ๋ช
๋ น์์ `uvicorn` ์ด ์ฐธ์กฐํ๊ณ ์๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค:
< div class = "termy" >
@ -181,11 +181,11 @@ $ uvicorn main:my_awesome_api --reload
< / div >
### 3 ๋จ๊ณ: *๊ฒฝ๋ก ๋ ์* ์์ฑ
### 3 ๋จ๊ณ: *๊ฒฝ๋ก ์๋ * ์์ฑ
#### ๊ฒฝ๋ก
์ฌ๊ธฐ์ "๊ฒฝ๋ก"๋ ์ฒซ ๋ฒ์งธ `/` ์์ ์์ํ๋ URL์ ๋ง์ง๋ง ๋ถ๋ถ์ ๋ํ๋
๋๋ค.
์ฌ๊ธฐ์ "๊ฒฝ๋ก"๋ ์ฒซ ๋ฒ์งธ `/` ๋ถํฐ ์์ํ๋ URL์ ๋ท๋ถ๋ถ์ ์๋ฏธํฉ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์๋์ ๊ฐ์ URL์์:
@ -200,13 +200,13 @@ https://example.com/items/foo
```
!!! info "์ ๋ณด"
"๊ฒฝ๋ก"๋ ์ผ๋ฐ์ ์ผ๋ก "์ค ๋ํฌ์ธํธ" ๋๋ "๋ผ์ฐํธ"๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
"๊ฒฝ๋ก"๋ ์ผ๋ฐ์ ์ผ๋ก "์ ๋ํฌ์ธํธ" ๋๋ "๋ผ์ฐํธ"๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
API๋ฅผ ๋น๋ํ๋ ๋์ "๊ฒฝ๋ก"๋ "๊ด์ฌ์ฌ"์ "๋ฆฌ์์ค"๋ฅผ ๋ถ๋ฆฌํ๋ ์ฃผ์ ๋ฐฉ๋ฒ์
๋๋ค.
API๋ฅผ ์ค๊ณํ ๋ "๊ฒฝ๋ก"๋ "๊ด์ฌ์ฌ"์ "๋ฆฌ์์ค"๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํ ์ฃผ์ํ ๋ฐฉ๋ฒ์
๋๋ค.
#### ๋ ์
#### ์๋
์ฌ๊ธฐ์ "๋ ์(Operation)"์ HTTP "๋ฉ์๋" ์ค ํ๋๋ฅผ ๋ํ๋
๋๋ค.
"์๋ (Operation)"์ HTTP "๋ฉ์๋" ์ค ํ๋๋ฅผ ๋ํ๋
๋๋ค.
๋ค์ ์ค ํ๋์ด๋ฉฐ:
@ -215,7 +215,7 @@ API๋ฅผ ๋น๋ํ๋ ๋์ "๊ฒฝ๋ก"๋ "๊ด์ฌ์ฌ"์ "๋ฆฌ์์ค"๋ฅผ ๋ถ๋ฆฌํ
* `PUT`
* `DELETE`
...์ด๊ตญ์ ์ธ ๊ฒ๋ค๋ ์์ต๋๋ค:
...ํํ ์ฌ์ฉ๋์ง ์๋ ๊ฒ๋ค๋ ์์ต๋๋ค:
* `OPTIONS`
* `HEAD`
@ -226,20 +226,20 @@ HTTP ํ๋กํ ์ฝ์์๋ ์ด๋ฌํ "๋ฉ์๋"๋ฅผ ํ๋(๋๋ ์ด์) ์ฌ์ฉ
---
API๋ฅผ ๋น๋ํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด ํน์ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
API๋ฅผ ์ค๊ณํ ๋ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด ํน์ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ์ฌ์ฉํฉ ๋๋ค:
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต ๋๋ค:
* `POST` : ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด.
* `GET` : ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํด.
* `PUT` : ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ ํ๊ธฐ ์ํด.
* `PUT` : ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ธฐ ์ํด.
* `DELETE` : ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ธฐ ์ํด.
๊ทธ๋์ OpenAPI์์๋ ๊ฐ HTTP ๋ฉ์๋๋ค์ "๋ ์"์ด๋ผ ๋ถ๋ฆ
๋๋ค.
๊ทธ๋์ OpenAPI์์๋ ๊ฐ HTTP ๋ฉ์๋๋ค์ "์๋ "์ด๋ผ ๋ถ๋ฆ
๋๋ค.
์ด์ ๋ถํฐ ์ฐ๋ฆฌ๋ ๋ฉ์๋๋ฅผ "**๋์**"์ด๋ผ๊ณ ๋ ๋ถ๋ฅผ๊ฒ ๋๋ค.
์ฐ๋ฆฌ ์ญ์ ์ด์ ๋ถํฐ ๋ฉ์๋๋ฅผ "**์๋**"์ด๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์
๋๋ค.
#### *๊ฒฝ๋ก ๋ ์ ๋ฐ์ฝ๋ ์ดํฐ* ์ ์
#### *๊ฒฝ๋ก ์๋ ๋ฐ์ฝ๋ ์ดํฐ* ์ ์
```Python hl_lines="6"
{!../../../docs_src/first_steps/tutorial001.py!}
@ -248,26 +248,26 @@ API๋ฅผ ๋น๋ํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด
`@app.get("/")` ์ **FastAPI**์๊ฒ ๋ฐ๋ก ์๋์ ์๋ ํจ์๊ฐ ๋ค์์ผ๋ก ์ด๋ํ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.
* ๊ฒฝ๋ก `/`
* < abbr title = "HTTP GET ๋ฉ์๋" > < code > get< / code > ๋ ์< / abbr > ์ฌ์ฉ
* < abbr title = "HTTP GET ๋ฉ์๋" > < code > get< / code > ์๋ < / abbr > ์ฌ์ฉ
!!! info "`@decorator` ์ ๋ณด"
์ด `@something` ๋ฌธ๋ฒ์ ํ์ด์ฌ์์ "๋ฐ์ฝ๋ ์ดํฐ"๋ผ ๋ถ๋ฆ
๋๋ค.
ํจ์ ๋งจ ์์ ๋์ต๋๋ค. ๋ง์น ์์ ์ฅ์์ฉ(Decorative) ๋ชจ์์ฒ๋ผ(๊ฐ์ธ์ ์ผ๋ก ์ด ์ฉ์ด๊ฐ ์ฌ๊ธฐ์ ์ ๋ํ๊ฑฐ ๊ฐ์ต๋๋ค) .
๋ง์น ์์ ์ฅ์์ฉ(Decorative) ๋ชจ์์ฒ๋ผ(๊ฐ์ธ์ ์ผ๋ก ์ด ์ฉ์ด๊ฐ ์ฌ๊ธฐ์ ์ ๋ํ ๊ฒ ๊ฐ์ต๋๋ค) ํจ์ ๋งจ ์์ ๋์ต๋๋ค .
"๋ฐ์ฝ๋ ์ดํฐ" ์๋ ์๋ ํจ์๋ฅผ ๋ฐ๊ณ ๊ทธ๊ฑธ ์ด์ฉํด ๋ฌด์ธ๊ฐ ํฉ๋๋ค.
"๋ฐ์ฝ๋ ์ดํฐ"๋ ์๋ ์๋ ํจ์๋ฅผ ๋ฐ์ ๊ทธ๊ฒ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ, ์ด ๋ฐ์ฝ๋ ์ดํฐ๋ **FastAPI**์๊ฒ ์๋ ํจ์๊ฐ **๊ฒฝ๋ก** `/` ์ ํด๋นํ๋ `get` **๋์**ํ๋ผ ๊ณ ์๋ ค์ค๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ, ์ด ๋ฐ์ฝ๋ ์ดํฐ๋ **FastAPI**์๊ฒ ์๋ ํจ์๊ฐ **๊ฒฝ๋ก** `/` ์ `get` **์๋**์ ํด๋นํ๋ค ๊ณ ์๋ ค์ค๋๋ค.
์ด๊ฒ์ด "**๊ฒฝ๋ก ๋ ์ ๋ฐ์ฝ๋ ์ดํฐ**"์
๋๋ค.
์ด๊ฒ์ด "**๊ฒฝ๋ก ์๋ ๋ฐ์ฝ๋ ์ดํฐ**"์
๋๋ค.
๋ค๋ฅธ ๋์๋ ์ธ ์ ์์ต๋๋ค:
๋ค๋ฅธ ์๋๋ ์ฌ์ฉํ ์ ์์ต๋๋ค:
* `@app.post()`
* `@app.put()`
* `@app.delete()`
์ด๊ตญ์ ์ธ ๊ฒ๋ค๋ ์์ต๋๋ค:
ํํ ์ฌ์ฉ๋์ง ์๋ ๊ฒ๋ค๋ ์์ต๋๋ค:
* `@app.options()`
* `@app.head()`
@ -275,20 +275,20 @@ API๋ฅผ ๋น๋ํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด
* `@app.trace()`
!!! tip "ํ"
๊ฐ ๋ ์(HTTP ๋ฉ์๋)์ ์ํ๋ ๋๋ก ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
๊ฐ ์๋ (HTTP ๋ฉ์๋)์ ์ํ๋ ๋๋ก ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
**FastAPI**๋ ํน์ ์๋ฏธ๋ฅผ ๊ฐ์ ํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๋ณด๋ ์ง์นจ์์ผ๋ฟ ์๊ตฌ ์ฌํญ์ด ์๋๋๋ค.
์ฌ๊ธฐ์ ์ ๋ณด๋ ์ง์นจ์์ผ๋ฟ ๊ฐ์ ์ฌํญ์ด ์๋๋๋ค.
์๋ฅผ ๋ค์ด GraphQL์ ์ฌ์ฉํ ๋ ์ผ๋ฐ์ ์ผ๋ก `POST` ๋์ ๋ง ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋์ ์ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด GraphQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก `POST` ์๋ ๋ง ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋์ ์ํํฉ๋๋ค.
### 4 ๋จ๊ณ: **๊ฒฝ๋ก ๋ ์ ํจ์** ์ ์
### 4 ๋จ๊ณ: **๊ฒฝ๋ก ์๋ ํจ์** ์ ์
๋ค์์ ์ฐ๋ฆฌ์ "**๊ฒฝ๋ก ๋ ์ ํจ์**"์
๋๋ค:
๋ค์์ ์ฐ๋ฆฌ์ "**๊ฒฝ๋ก ์๋ ํจ์**"์
๋๋ค:
* **๊ฒฝ๋ก** : ๋ `/` ์
๋๋ค.
* **๋ ์** : ์ `get` ์
๋๋ค.
* **์๋ ** : ์ `get` ์
๋๋ค.
* **ํจ์** : ๋ "๋ฐ์ฝ๋ ์ดํฐ" ์๋์ ์๋ ํจ์์
๋๋ค (`@app.get("/")` ์๋).
```Python hl_lines="7"
@ -297,13 +297,13 @@ API๋ฅผ ๋น๋ํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด
์ด๊ฒ์ ํ์ด์ฌ ํจ์์
๋๋ค.
`GET` ๋์์ ์ฌ์ฉํ์ฌ URL "`/`"์ ๋ํ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค **FastAPI**์ ์ํด ํธ์ถ๋ฉ๋๋ค.
URL "`/`"์ ๋ํ `GET` ์๋์ ์ฌ์ฉํ๋ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค **FastAPI**์ ์ํด ํธ์ถ๋ฉ๋๋ค.
์์ ๊ฒฝ์ฐ `async` ํจ์์
๋๋ค.
์์ ์์์์ ์ด ํจ์๋ `async` (๋น๋๊ธฐ) ํจ์์
๋๋ค.
---
`async def` ๋์ ์ผ๋ฐ ํจ์๋ก ์ ์ํ ์ ์์ต๋๋ค:
`async def` ์ ์ด์ฉํ๋ ๋์ ์ผ๋ฐ ํจ์๋ก ์ ์ํ ์ ์์ต๋๋ค:
```Python hl_lines="7"
{!../../../docs_src/first_steps/tutorial003.py!}
@ -322,12 +322,12 @@ API๋ฅผ ๋น๋ํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ๋์ ์ํํ๊ธฐ ์ํด
Pydantic ๋ชจ๋ธ์ ๋ฐํํ ์๋ ์์ต๋๋ค(๋์ค์ ๋ ์์ธํ ์ดํด๋ด
๋๋ค).
JSON์ผ๋ก ์๋ ๋ณํ๋๋ ๊ฐ์ฒด๋ค๊ณผ ๋ชจ๋ธ๋ค์ด ๋ง์ด ์์ต๋๋ค(ORM ๋ฑ์ ํฌํจํด์์). ๊ฐ์ฅ ๋ง์์ ๋๋ ๊ฒ์ ์ฌ์ฉํ์ธ์, ์ด๋ฏธ ์ง์๋๊ณ ์์ ๊ฒ ๋๋ค.
JSON์ผ๋ก ์๋ ๋ณํ๋๋ ๊ฐ์ฒด๋ค๊ณผ ๋ชจ๋ธ๋ค(ORM ๋ฑ์ ํฌํจํด์)์ด ๋ง์ด ์์ต๋๋ค. ๊ฐ์ฅ ๋ง์์ ๋๋ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค, ์ด๋ฏธ ์ง์๋๊ณ ์์ ๊ฒ์
๋๋ค.
## ์์ฝ
* `FastAPI` ์ํฌํธ.
* `app` ์ธ์คํด์ค ์์ฑ.
* (`@app.get("/")`์ฒ๋ผ) **๊ฒฝ๋ก ๋ ์ ๋ฐ์ฝ๋ ์ดํฐ** ์์ฑ.
* (์์ ์๋ `def root(): ...` ์ฒ๋ผ) **๊ฒฝ๋ก ๋ ์ ํจ์** ์์ฑ.
* (`@app.get("/")`์ฒ๋ผ) **๊ฒฝ๋ก ์๋ ๋ฐ์ฝ๋ ์ดํฐ** ์์ฑ.
* (์์ ์๋ `def root(): ...` ์ฒ๋ผ) **๊ฒฝ๋ก ์๋ ํจ์** ์์ฑ.
* (`uvicorn main:app --reload`์ฒ๋ผ) ๊ฐ๋ฐ ์๋ฒ ์คํ.