Browse Source

๐ŸŒ Add Korean translation for Tutorial - Path Parameters (#2355)

pull/3173/head
Spike 4 years ago
committed by GitHub
parent
commit
462014e296
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 244
      docs/ko/docs/tutorial/path-params.md
  2. 1
      docs/ko/mkdocs.yml

244
docs/ko/docs/tutorial/path-params.md

@ -0,0 +1,244 @@
# ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜
ํŒŒ์ด์ฌ ํฌ๋งท ๋ฌธ์ž์—ด์ด ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ๋ฌธ๋ฒ•์œผ๋กœ "๋งค๊ฐœ๋ณ€์ˆ˜" ๋˜๋Š” "๋ณ€์ˆ˜"๋ฅผ ๊ฒฝ๋กœ์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python hl_lines="6-7"
{!../../../docs_src/path_params/tutorial001.py!}
```
๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ `item_id`์˜ ๊ฐ’์€ ํ•จ์ˆ˜์˜ `item_id` ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>๋กœ ์ด๋™ํ•˜๋ฉด, ๋‹ค์Œ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```JSON
{"item_id":"foo"}
```
## ํƒ€์ž…์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜
ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์— ์žˆ๋Š” ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python hl_lines="7"
{!../../../docs_src/path_params/tutorial002.py!}
```
์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ, `item_id`๋Š” `int`๋กœ ์„ ์–ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
!!! check "ํ™•์ธ"
์ด ๊ธฐ๋Šฅ์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ, ์ž๋™์™„์„ฑ ๋“ฑ์„ ํŽธ์ง‘๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
## ๋ฐ์ดํ„ฐ <abbr title="๋‹ค์Œ์œผ๋กœ๋„ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค: ์ง๋ ฌํ™”, ํŒŒ์‹ฑ, ๋งˆ์ƒฌ๋ง">๋ณ€ํ™˜</abbr>
์ด ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a>์„ ์—ด๋ฉด, ๋‹ค์Œ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```JSON
{"item_id":3}
```
!!! check "ํ™•์ธ"
ํ•จ์ˆ˜๊ฐ€ ๋ฐ›์€(๋ฐ˜ํ™˜๋„ ํ•˜๋Š”) ๊ฐ’์€ ๋ฌธ์ž์—ด `"3"`์ด ์•„๋‹ˆ๋ผ ํŒŒ์ด์ฌ `int` ํ˜•์ธ `3`์ž…๋‹ˆ๋‹ค.
์ฆ‰, ํƒ€์ž… ์„ ์–ธ์„ ํ•˜๋ฉด **FastAPI**๋Š” ์ž๋™์œผ๋กœ ์š”์ฒญ์„ <abbr title="HTTP ์š”์ฒญ์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋ฌธ์ž์—ด์„ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜">"ํŒŒ์‹ฑ"</abbr>ํ•ฉ๋‹ˆ๋‹ค.
## ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>๋กœ ์ด๋™ํ•˜๋ฉด, ๋ฉ‹์ง„ HTTP ์˜ค๋ฅ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```JSON
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
```
๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ `item_id`๋Š” `int`๊ฐ€ ์•„๋‹Œ `"foo"` ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
`int` ๋Œ€์‹  `float`์„ ์ „๋‹ฌํ•˜๋ฉด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค: <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a>
!!! check "ํ™•์ธ"
์ฆ‰, ํŒŒ์ด์ฌ ํƒ€์ž… ์„ ์–ธ์„ ํ•˜๋ฉด **FastAPI**๋Š” ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜๋Š” ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ์ง€์ ๋„ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
## ๋ฌธ์„œํ™”
๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>๋ฅผ ์—ด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž๋™ ๋Œ€ํ™”์‹ API ๋ฌธ์„œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
<img src="/img/tutorial/path-params/image01.png">
!!! check "ํ™•์ธ"
๋‹ค์‹œ ํ•œ๋ฒˆ, ๊ทธ์ € ํŒŒ์ด์ฌ ํƒ€์ž… ์„ ์–ธ์„ ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด **FastAPI**๋Š” ์ž๋™ ๋Œ€ํ™”์‹ API ๋ฌธ์„œ(Swagger UI ํ†ตํ•ฉ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ •์ˆ˜ํ˜•์œผ๋กœ ์„ ์–ธ๋์Œ์„ ์ฃผ๋ชฉํ•˜์„ธ์š”.
## ํ‘œ์ค€ ๊ธฐ๋ฐ˜์˜ ์ด์ , ๋Œ€์ฒด ๋ฌธ์„œํ™”
๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ๋œ ์Šคํ‚ค๋งˆ๋Š” <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md" class="external-link" target="_blank">OpenAPI</a> ํ‘œ์ค€์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธํ™˜๋˜๋Š” ๋„๊ตฌ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋•๋ถ„์— **FastAPI**๋Š” <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” (ReDoc์„ ์‚ฌ์šฉํ•˜๋Š”) ๋Œ€์ฒด API ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:
<img src="/img/tutorial/path-params/image02.png">
์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜ธํ™˜๋˜๋Š” ๋„๊ตฌ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์–ธ์–ด์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
## Pydantic
๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์€ <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a>์— ์˜ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์ด๋กœ ์ธํ•œ ๋ชจ๋“  ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๊ด€๋ฆฌ๋ฅผ ์ž˜ ๋ฐ›๊ณ  ์žˆ์Œ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
`str`, `float`, `bool`๊ณผ ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ์–ธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ค‘ ๋ช‡ ๊ฐ€์ง€๋Š” ์ž์Šต์„œ์˜ ๋‹ค์Œ ์žฅ์—์„œ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.
## ์ˆœ์„œ ๋ฌธ์ œ
*๊ฒฝ๋กœ ๋™์ž‘*์„ ๋งŒ๋“ค๋•Œ ๊ณ ์ • ๊ฒฝ๋กœ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์ƒํ™ฉ๋“ค์„ ๋งž๋‹ฆ๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
`/users/me`์ฒ˜๋Ÿผ, ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.
์‚ฌ์šฉ์ž ID๋ฅผ ์ด์šฉํ•ด ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ๋กœ `/users/{user_id}`๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
*๊ฒฝ๋กœ ๋™์ž‘*์€ ์ˆœ์ฐจ์ ์œผ๋กœ ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— `/users/{user_id}` ์ด์ „์— `/users/me`๋ฅผ ๋จผ์ € ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:
```Python hl_lines="6 11"
{!../../../docs_src/path_params/tutorial003.py!}
```
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด `/users/{user_id}`๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ `user_id`์˜ ๊ฐ’์„ `"me"`๋ผ๊ณ  "์ƒ๊ฐํ•˜์—ฌ" `/users/me`๋„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
## ์‚ฌ์ „์ •์˜ ๊ฐ’
๋งŒ์•ฝ *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*๋ฅผ ๋ฐ›๋Š” *๊ฒฝ๋กœ ๋™์ž‘*์ด ์žˆ์ง€๋งŒ, ์œ ํšจํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜* ๊ฐ’์„ ์›ํ•œ๋‹ค๋ฉด ํŒŒ์ด์ฌ ํ‘œ์ค€ <abbr title="์—ด๊ฑฐํ˜•(Enumeration)">`Enum`</abbr>์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
### `Enum` ํด๋ž˜์Šค ์ƒ์„ฑ
`Enum`์„ ์ž„ํฌํŠธํ•˜๊ณ  `str`๊ณผ `Enum`์„ ์ƒ์†ํ•˜๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
`str`์„ ์ƒ์†ํ•จ์œผ๋กœ์จ API ๋ฌธ์„œ๋Š” ๊ฐ’์ด `string` ํ˜•์ด์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๊ณ  ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ณ ์ •๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ ํด๋ž˜์Šค ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค:
```Python hl_lines="1 6-9"
{!../../../docs_src/path_params/tutorial005.py!}
```
!!! info "์ •๋ณด"
<a href="https://docs.python.org/3/library/enum.html" class="external-link" target="_blank">์—ด๊ฑฐํ˜•(๋˜๋Š” enums)</a>์€ ํŒŒ์ด์ฌ ๋ฒ„์ „ 3.4 ์ดํ›„๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
!!! tip "ํŒ"
ํ˜น์‹œ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด, "AlexNet", "ResNet", ๊ทธ๋ฆฌ๊ณ  "LeNet"์€ ๊ทธ์ € ๊ธฐ๊ณ„ ํ•™์Šต <abbr title="๊ธฐ์ˆ ์ ์œผ๋กœ ์ •ํ™•ํžˆ๋Š” ๋”ฅ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๊ตฌ์กฐ">๋ชจ๋ธ</abbr>๋“ค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
### *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜* ์„ ์–ธ
์ƒ์„ฑํ•œ ์—ด๊ฑฐํ˜• ํด๋ž˜์Šค(`ModelName`)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค:
```Python hl_lines="16"
{!../../../docs_src/path_params/tutorial005.py!}
```
### ๋ฌธ์„œ ํ™•์ธ
*๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ์—์„œ ๋ฉ‹์ง€๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:
<img src="/img/tutorial/path-params/image03.png">
### ํŒŒ์ด์ฌ *์—ด๊ฑฐํ˜•*์œผ๋กœ ์ž‘์—…ํ•˜๊ธฐ
*๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*์˜ ๊ฐ’์€ *์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„*๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
#### *์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„* ๋น„๊ต
์—ด๊ฑฐ์ฒด `ModelName`์˜ *์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„*๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python hl_lines="17"
{!../../../docs_src/path_params/tutorial005.py!}
```
#### *์—ด๊ฑฐํ˜• ๊ฐ’* ๊ฐ€์ ธ์˜ค๊ธฐ
`model_name.value` ๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ `your_enum_member.value`๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ๊ฐ’(์ง€๊ธˆ์˜ ๊ฒฝ์šฐ `str`)์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python hl_lines="20"
{!../../../docs_src/path_params/tutorial005.py!}
```
!!! tip "ํŒ"
`ModelName.lenet.value`๋กœ๋„ ๊ฐ’ `"lenet"`์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
#### *์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„* ๋ฐ˜ํ™˜
*๊ฒฝ๋กœ ๋™์ž‘*์—์„œ ์ค‘์ฒฉ JSON ๋ณธ๋ฌธ(์˜ˆ: `dict`) ์—ญ์‹œ *์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„*๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๊ฐ’(์ด ๊ฒฝ์šฐ ๋ฌธ์ž์—ด)์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค:
```Python hl_lines="18 21 23"
{!../../../docs_src/path_params/tutorial005.py!}
```
ํด๋ผ์ด์–ธํŠธ๋Š” ์•„๋ž˜์˜ JSON ์‘๋‹ต์„ ์–ป์Šต๋‹ˆ๋‹ค:
```JSON
{
"model_name": "alexnet",
"message": "Deep Learning FTW!"
}
```
## ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜
`/files/{file_path}`๊ฐ€ ์žˆ๋Š” *๊ฒฝ๋กœ ๋™์ž‘*์ด ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์—ฌ๋Ÿฌ๋ถ„์€ `home/johndoe/myfile.txt`์ฒ˜๋Ÿผ *path*์— ๋“ค์–ด์žˆ๋Š” `file_path` ์ž์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ•ด๋‹น ํŒŒ์ผ์˜ URL์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฉ๋‹ˆ๋‹ค: `/files/home/johndoe/myfile.txt`.
### OpenAPI ์ง€์›
ํ…Œ์ŠคํŠธ์™€ ์ •์˜๊ฐ€ ์–ด๋ ค์šด ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ OpenAPI๋Š” *๊ฒฝ๋กœ*๋ฅผ ํฌํ•จํ•˜๋Š” *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*๋ฅผ ๋‚ด๋ถ€์— ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ์—๋„ Starlette์˜ ๋‚ด๋ถ€ ๋„๊ตฌ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ **FastAPI**์—์„œ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์„œ๋Š” ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
### ๊ฒฝ๋กœ ๋ณ€ํ™˜๊ธฐ
Starlette์—์„œ ์ง์ ‘ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ URL์„ ์‚ฌ์šฉํ•˜์—ฌ *path*๋ฅผ ํฌํ•จํ•˜๋Š” *๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜*๋ฅผ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```
/files/{file_path:path}
```
์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ `file_path`์ด๊ณ  ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„ `:path`๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ *๊ฒฝ๋กœ*์™€ ์ผ์น˜ํ•ด์•ผํ•จ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python hl_lines="6"
{!../../../docs_src/path_params/tutorial004.py!}
```
!!! tip "ํŒ"
๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ `/home/johndoe/myfile.txt`๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ์Šฌ๋ž˜์‹œ๋กœ ์‹œ์ž‘(`/`)ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ URL์€: `/files//home/johndoe/myfile.txt`์ด๋ฉฐ `files`๊ณผ `home` ์‚ฌ์ด์— ์ด์ค‘ ์Šฌ๋ž˜์‹œ(`//`)๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
## ์š”์•ฝ
**FastAPI**๊ณผ ํ•จ๊ป˜๋ผ๋ฉด ์งง๊ณ  ์ง๊ด€์ ์ธ ํ‘œ์ค€ ํŒŒ์ด์ฌ ํƒ€์ž… ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
* ํŽธ์ง‘๊ธฐ ์ง€์›: ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ, ์ž๋™์™„์„ฑ ๋“ฑ
* ๋ฐ์ดํ„ฐ "<abbr title="HTTP ์š”์ฒญ์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋ฌธ์ž์—ด์„ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜">ํŒŒ์‹ฑ</abbr>"
* ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
* API ์ฃผ์„(Annotation)๊ณผ ์ž๋™ ๋ฌธ์„œ
์œ„ ์‚ฌํ•ญ๋“ค์„ ๊ทธ์ € ํ•œ๋ฒˆ์— ์„ ์–ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด๋Š” (์›๋ž˜ ์„ฑ๋Šฅ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ) ๋Œ€์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ **FastAPI**์˜ ์ฃผ์š” ๊ฐ€์‹œ์  ์žฅ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1
docs/ko/mkdocs.yml

@ -53,6 +53,7 @@ nav:
- ์ž์Šต์„œ - ์‚ฌ์šฉ์ž ์•ˆ๋‚ด์„œ:
- tutorial/index.md
- tutorial/first-steps.md
- tutorial/path-params.md
- tutorial/header-params.md
markdown_extensions:
- toc:

Loadingโ€ฆ
Cancel
Save