Browse Source

๐ŸŒ Update translations for ko (update-outdated) (#14835)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pull/14837/head
Sebastiรกn Ramรญrez 4 months ago
committed by GitHub
parent
commit
136d5f0a56
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      docs/ko/docs/advanced/advanced-dependencies.md
  2. 36
      docs/ko/docs/advanced/wsgi.md
  3. 12
      docs/ko/docs/deployment/docker.md
  4. 28
      docs/ko/docs/index.md
  5. 7
      docs/ko/docs/tutorial/body-multiple-params.md
  6. 8
      docs/ko/docs/tutorial/path-operation-configuration.md

8
docs/ko/docs/advanced/advanced-dependencies.md

@ -79,13 +79,13 @@ checker(q="somequery")
### `yield`์™€ `scope`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ { #dependencies-with-yield-and-scope }
0.121.0 ๋ฒ„์ „์—์„œ FastAPI๋Š” `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์— ๋Œ€ํ•ด `Depends(scope="function")` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
0.121.0 ๋ฒ„์ „์—์„œ FastAPI๋Š” `Depends(scope="function")` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
`Depends(scope="function")`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, `yield` ์ดํ›„์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*๊ฐ€ ๋๋‚œ ์งํ›„(ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋˜๊ธฐ ์ „)์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  `Depends(scope="request")`(๊ธฐ๋ณธ๊ฐ’)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, `yield` ์ดํ›„์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ์‘๋‹ต์ด ์ „์†ก๋œ ํ›„์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ [Dependencies with `yield` - Early exit and `scope`](../tutorial/dependencies/dependencies-with-yield.md#early-exit-and-scope) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
์ž์„ธํ•œ ๋‚ด์šฉ์€ [`yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ - ์กฐ๊ธฐ ์ข…๋ฃŒ์™€ `scope`](../tutorial/dependencies/dependencies-with-yield.md#early-exit-and-scope) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
### `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ๊ณผ `StreamingResponse`, ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ { #dependencies-with-yield-and-streamingresponse-technical-details }
@ -133,7 +133,7 @@ SQLModel(๋˜๋Š” SQLAlchemy)์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด๋Ÿฐ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€
๊ทธ๋Ÿฌ๋ฉด ์„ธ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜์—ฌ, ๋‹ค๋ฅธ ์š”์ฒญ๋“ค์ด ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
`yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์—์„œ ์กฐ๊ธฐ ์ข…๋ฃŒ๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์กฐ๊ธฐ ์ข…๋ฃŒ๊ฐ€ ์–ด๋–ค ์ ์—์„œ ์ด๋“์ด ๋˜๋Š”์ง€๋ฅผ ํฌํ•จํ•ด <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">GitHub Discussion Question</a>์„ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.
`yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์—์„œ ์กฐ๊ธฐ ์ข…๋ฃŒ๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์— ๋Œ€ํ•œ ์กฐ๊ธฐ ์ข…๋ฃŒ๊ฐ€ ์–ด๋–ค ์ ์—์„œ ์ด๋“์ด ๋˜๋Š”์ง€๋ฅผ ํฌํ•จํ•ด <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">GitHub Discussions ์งˆ๋ฌธ</a>์„ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.
`yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์—์„œ ์กฐ๊ธฐ ์ข…๋ฃŒ์— ๋Œ€ํ•œ ์„ค๋“๋ ฅ ์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋ฉด, ์กฐ๊ธฐ ์ข…๋ฃŒ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
@ -145,7 +145,7 @@ FastAPI 0.110.0 ์ด์ „์—๋Š” `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๊ทธ
### ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํƒœ์Šคํฌ์™€ `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ, ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ { #background-tasks-and-dependencies-with-yield-technical-details }
FastAPI 0.106.0 ์ด์ „์—๋Š” `yield` ์ดํ›„์— ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ์‘๋‹ต์ด ์ „์†ก๋œ *ํ›„์—* ์‹คํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, [Exception Handlers](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}๊ฐ€ ์ด๋ฏธ ์‹คํ–‰๋œ ๋’ค์˜€์Šต๋‹ˆ๋‹ค.
FastAPI 0.106.0 ์ด์ „์—๋Š” `yield` ์ดํ›„์— ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ์‘๋‹ต์ด ์ „์†ก๋œ *ํ›„์—* ์‹คํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, [์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}๊ฐ€ ์ด๋ฏธ ์‹คํ–‰๋œ ๋’ค์˜€์Šต๋‹ˆ๋‹ค.
์ด๋Š” ์ฃผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํƒœ์Šคํฌ ์•ˆ์—์„œ ์˜์กด์„ฑ์ด "yield"ํ•œ ๋™์ผํ•œ ๊ฐ์ฒด๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„์˜€์Šต๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํƒœ์Šคํฌ๊ฐ€ ๋๋‚œ ๋’ค์— ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

36
docs/ko/docs/advanced/wsgi.md

@ -1,32 +1,48 @@
# WSGI ํฌํ•จํ•˜๊ธฐ - Flask, Django ๊ทธ ์™ธ { #including-wsgi-flask-django-others }
# WSGI ํฌํ•จํ•˜๊ธฐ - Flask, Django ๋“ฑ { #including-wsgi-flask-django-others }
[์„œ๋ธŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ - ๋งˆ์šดํŠธ](sub-applications.md){.internal-link target=_blank}, [ํ”„๋ก์‹œ ๋’คํŽธ์—์„œ](behind-a-proxy.md){.internal-link target=_blank}์—์„œ ๋ณด์•˜๋“ฏ์ด WSGI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งˆ์šดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
[์„œ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - ๋งˆ์šดํŠธ](sub-applications.md){.internal-link target=_blank}, [ํ”„๋ก์‹œ ๋’ค์—์„œ](behind-a-proxy.md){.internal-link target=_blank}์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ WSGI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด `WSGIMiddleware`๋ฅผ ์‚ฌ์šฉํ•ด WSGI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: Flask, Django ๋“ฑ)์„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด `WSGIMiddleware`๋ฅผ ์‚ฌ์šฉํ•ด WSGI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: Flask, Django ๋“ฑ)์„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
## `WSGIMiddleware` ์‚ฌ์šฉํ•˜๊ธฐ { #using-wsgimiddleware }
`WSGIMiddleware`๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
๊ทธ๋Ÿฐ ๋‹ค์Œ, WSGI(์˜ˆ: Flask) ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฏธ๋“ค์›จ์–ด๋กœ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `a2wsgi`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: `pip install a2wsgi`
๊ทธ ํ›„, ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.
///
{* ../../docs_src/wsgi/tutorial001_py39.py hl[2:3,3] *}
`a2wsgi`์—์„œ `WSGIMiddleware`๋ฅผ import ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ, WSGI(์˜ˆ: Flask) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฏธ๋“ค์›จ์–ด๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.
{* ../../docs_src/wsgi/tutorial001_py39.py hl[1,3,23] *}
/// note | ์ฐธ๊ณ 
์ด์ „์— `fastapi.middleware.wsgi`์˜ `WSGIMiddleware` ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  `a2wsgi` ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
๋‹จ, `a2wsgi` ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ณ  `a2wsgi`์—์„œ `WSGIMiddleware`๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ import ํ•˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜์„ธ์š”.
///
## ํ™•์ธํ•˜๊ธฐ { #check-it }
์ด์ œ `/v1/` ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์ฒญ์€ Flask ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
์ด์ œ `/v1/` ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์ฒญ์€ Flask ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๋Š” **FastAPI**์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
์‹คํ–‰ํ•˜๋ฉด <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a>์œผ๋กœ ์ด๋™ํ•ด์„œ Flask์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
์‹คํ–‰ํ•˜๊ณ  <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a>๋กœ ์ด๋™ํ•˜๋ฉด Flask์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```txt
Hello, World from Flask!
```
๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•˜๋ฉด <a href="http://localhost:8000/v2" class="external-link" target="_blank">http://localhost:8000/v2</a> **FastAPI**์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
๊ทธ๋ฆฌ๊ณ  <a href="http://localhost:8000/v2" class="external-link" target="_blank">http://localhost:8000/v2</a>๋กœ ์ด๋™ํ•˜๋ฉด **FastAPI**์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```JSON
{

12
docs/ko/docs/deployment/docker.md

@ -145,8 +145,6 @@ Successfully installed fastapi pydantic
* ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ `main.py` ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค:
```Python
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@ -158,7 +156,7 @@ def read_root():
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
```
@ -245,14 +243,14 @@ Docker ์ง€์‹œ์–ด <a href="https://docs.docker.com/reference/dockerfile/#cmd" cla
โœ… **Exec** form:
```Dockerfile
# โœ… Do this
# โœ… ์ด๋ ‡๊ฒŒ ํ•˜์„ธ์š”
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
```
โ›”๏ธ **Shell** form:
```Dockerfile
# โ›”๏ธ Don't do this
# โ›”๏ธ ์ด๋ ‡๊ฒŒ ํ•˜์ง€ ๋งˆ์„ธ์š”
CMD fastapi run app/main.py --port 80
```
@ -456,7 +454,7 @@ Traefik์€ Docker, Kubernetes ๋“ฑ๊ณผ ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด, ์ด๋ฅผ ์‚ฌ์šฉํ•ด ์ปจ
## ๋ณต์ œ - ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜ { #replication-number-of-processes }
**Kubernetes**, Docker Swarm Mode, Nomad ๋“ฑ์˜ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์œผ๋กœ ์—ฌ๋Ÿฌ ๋จธ์‹ ์— ๋ถ„์‚ฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” <abbr title="A group of machines that are configured to be connected and work together in some way.">cluster</abbr>๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๊ฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ(**์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Uvicorn** ๊ฐ™์€) **ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €**๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ , **ํด๋Ÿฌ์Šคํ„ฐ ๋ ˆ๋ฒจ**์—์„œ **๋ณต์ œ๋ฅผ ์ฒ˜๋ฆฌ**ํ•˜๊ณ  ์‹ถ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
**Kubernetes**, Docker Swarm Mode, Nomad ๋“ฑ์˜ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์œผ๋กœ ์—ฌ๋Ÿฌ ๋จธ์‹ ์— ๋ถ„์‚ฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” <abbr title="์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๋จธ์‹ ์˜ ๊ทธ๋ฃน">ํด๋Ÿฌ์Šคํ„ฐ</abbr>๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๊ฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ(**์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Uvicorn** ๊ฐ™์€) **ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €**๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ , **ํด๋Ÿฌ์Šคํ„ฐ ๋ ˆ๋ฒจ**์—์„œ **๋ณต์ œ๋ฅผ ์ฒ˜๋ฆฌ**ํ•˜๊ณ  ์‹ถ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
Kubernetes ๊ฐ™์€ ๋ถ„์‚ฐ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋ณดํ†ต ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ **๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ**์„ ์ง€์›ํ•˜๋ฉด์„œ๋„, **์ปจํ…Œ์ด๋„ˆ ๋ณต์ œ**๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ†ตํ•ฉ๋œ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ **ํด๋Ÿฌ์Šคํ„ฐ ๋ ˆ๋ฒจ**์—์„œ์š”.
@ -580,7 +578,7 @@ Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์•„๋งˆ๋„ <a href="https://kubernetes.io/d
๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์›Œ์ปค๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, `--workers` ์ปค๋งจ๋“œ ๋ผ์ธ ์˜ต์…˜์„ ๊ฐ„๋‹จํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
/// note Technical Details | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
/// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
์ด Docker ์ด๋ฏธ์ง€๋Š” Uvicorn์ด ์ฃฝ์€ ์›Œ์ปค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋˜ ์‹œ๊ธฐ์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Gunicorn๊ณผ Uvicorn์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๊ณ , Gunicorn์ด Uvicorn ์›Œ์ปค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํ•œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

28
docs/ko/docs/index.md

@ -40,7 +40,7 @@ FastAPI๋Š” ํ˜„๋Œ€์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์„ฑ๋Šฅ), ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ํžŒํŠธ
* **๋น ๋ฆ„**: (Starlette๊ณผ Pydantic ๋•๋ถ„์—) **NodeJS** ๋ฐ **Go**์™€ ๋Œ€๋“ฑํ•  ์ •๋„๋กœ ๋งค์šฐ ๋†’์€ ์„ฑ๋Šฅ. [์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ ํŒŒ์ด์ฌ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜](#performance).
* **๋น ๋ฅธ ์ฝ”๋“œ ์ž‘์„ฑ**: ์•ฝ 200%์—์„œ 300%๊นŒ์ง€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์†๋„ ์ฆ๊ฐ€. *
* **์ ์€ ๋ฒ„๊ทธ**: ์‚ฌ๋žŒ(๊ฐœ๋ฐœ์ž)์— ์˜ํ•œ ์—๋Ÿฌ ์•ฝ 40% ๊ฐ์†Œ. *
* **์ง๊ด€์ **: ํ›Œ๋ฅญํ•œ ํŽธ์ง‘๊ธฐ ์ง€์›. ๋ชจ๋“  ๊ณณ์—์„œ <abbr title="also known as auto-complete, autocompletion, IntelliSense">์ž๋™์™„์„ฑ</abbr>. ์ ์€ ๋””๋ฒ„๊น… ์‹œ๊ฐ„.
* **์ง๊ด€์ **: ํ›Œ๋ฅญํ•œ ํŽธ์ง‘๊ธฐ ์ง€์›. ๋ชจ๋“  ๊ณณ์—์„œ <abbr title="๋‹ค๋ฅธ ๋ง๋กœ๋Š”: auto-complete, autocompletion, IntelliSense">์ž๋™์™„์„ฑ</abbr>. ์ ์€ ๋””๋ฒ„๊น… ์‹œ๊ฐ„.
* **์‰ฌ์›€**: ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐ์šฐ๋„๋ก ์„ค๊ณ„. ์ ์€ ๋ฌธ์„œ ์ฝ๊ธฐ ์‹œ๊ฐ„.
* **์งง์Œ**: ์ฝ”๋“œ ์ค‘๋ณต ์ตœ์†Œํ™”. ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ. ์ ์€ ๋ฒ„๊ทธ.
* **๊ฒฌ๊ณ ํ•จ**: ์ค€๋น„๋œ ํ”„๋กœ๋•์…˜ ์šฉ ์ฝ”๋“œ๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค. ์ž๋™ ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ์™€ ํ•จ๊ป˜.
@ -127,7 +127,7 @@ FastAPI๋Š” ํ˜„๋Œ€์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์„ฑ๋Šฅ), ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ํžŒํŠธ
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
์›น API ๋Œ€์‹  ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉํ•  <abbr title="Command Line Interface">CLI</abbr> ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด, <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>๋ฅผ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค.
์›น API ๋Œ€์‹  ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉํ•  <abbr title="Command Line Interface - ์ปค๋งจ๋“œ ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค">CLI</abbr> ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด, <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>๋ฅผ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค.
**Typer**๋Š” FastAPI์˜ ๋™์ƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  **CLI๋ฅผ ์œ„ํ•œ FastAPI**๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. โŒจ๏ธ ๐Ÿš€
@ -161,8 +161,6 @@ $ pip install "fastapi[standard]"
๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ `main.py` ํŒŒ์ผ์„ ๋งŒ๋“œ์‹ญ์‹œ์˜ค:
```Python
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@ -174,7 +172,7 @@ def read_root():
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
```
@ -183,9 +181,7 @@ def read_item(item_id: int, q: Union[str, None] = None):
์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ `async` / `await`์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, `async def`๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค:
```Python hl_lines="9 14"
from typing import Union
```Python hl_lines="7 12"
from fastapi import FastAPI
app = FastAPI()
@ -197,7 +193,7 @@ async def read_root():
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
```
@ -288,9 +284,7 @@ INFO: Application startup complete.
Pydantic ๋•๋ถ„์— ํ‘œ์ค€ Python ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ๋ณธ๋ฌธ์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
```Python hl_lines="4 9-12 25-27"
from typing import Union
```Python hl_lines="2 7-10 23-25"
from fastapi import FastAPI
from pydantic import BaseModel
@ -300,7 +294,7 @@ app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
is_offer: bool | None = None
@app.get("/")
@ -309,7 +303,7 @@ def read_root():
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@ -374,7 +368,7 @@ item: Item
* ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ:
* ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์„ ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ช…ํ™•ํ•œ ์—๋Ÿฌ.
* ๊นŠ์ด ์ค‘์ฒฉ๋œ JSON ๊ฐ์ฒด์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ.
* ์ž…๋ ฅ ๋ฐ์ดํ„ฐ <abbr title="also known as: serialization, parsing, marshalling">๋ณ€ํ™˜</abbr>: ๋„คํŠธ์›Œํฌ์—์„œ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๋ฐ ํƒ€์ž…์œผ๋กœ ์ „์†ก. ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค:
* ์ž…๋ ฅ ๋ฐ์ดํ„ฐ <abbr title="๋‹ค๋ฅธ ๋ง๋กœ๋Š”: serialization, parsing, marshalling">๋ณ€ํ™˜</abbr>: ๋„คํŠธ์›Œํฌ์—์„œ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๋ฐ ํƒ€์ž…์œผ๋กœ ์ „์†ก. ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค:
* JSON.
* ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜.
* ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜.
@ -382,7 +376,7 @@ item: Item
* ํ—ค๋”.
* ํผ(Forms).
* ํŒŒ์ผ.
* ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ <abbr title="also known as: serialization, parsing, marshalling">๋ณ€ํ™˜</abbr>: ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๋ฐ ํƒ€์ž…์„ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ๋กœ ์ „ํ™˜(JSON ํ˜•์‹์œผ๋กœ):
* ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ <abbr title="๋‹ค๋ฅธ ๋ง๋กœ๋Š”: serialization, parsing, marshalling">๋ณ€ํ™˜</abbr>: ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๋ฐ ํƒ€์ž…์„ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ๋กœ ์ „ํ™˜(JSON ํ˜•์‹์œผ๋กœ):
* ํŒŒ์ด์ฌ ํƒ€์ž… ๋ณ€ํ™˜ (`str`, `int`, `float`, `bool`, `list`, ๋“ฑ).
* `datetime` ๊ฐ์ฒด.
* `UUID` ๊ฐ์ฒด.
@ -445,7 +439,7 @@ item: Item
* ์„œ๋กœ ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ **๋งค๊ฐœ๋ณ€์ˆ˜** ์„ ์–ธ: **ํ—ค๋”**, **์ฟ ํ‚ค**, **ํผ ํ•„๋“œ** ๊ทธ๋ฆฌ๊ณ  **ํŒŒ์ผ**.
* `maximum_length` ๋˜๋Š” `regex`์ฒ˜๋Ÿผ **์œ ํšจ์„ฑ ์ œ์•ฝ**ํ•˜๋Š” ๋ฐฉ๋ฒ•.
* ๊ฐ•๋ ฅํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด **<abbr title="also known as components, resources, providers, services, injectables">์˜์กด์„ฑ ์ฃผ์ž…</abbr>** ์‹œ์Šคํ…œ.
* ๊ฐ•๋ ฅํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด **<abbr title="๋‹ค๋ฅธ ๋ง๋กœ๋Š”: components, resources, providers, services, injectables">์˜์กด์„ฑ ์ฃผ์ž…</abbr>** ์‹œ์Šคํ…œ.
* **OAuth2** ์ง€์›์„ ํฌํ•จํ•œ **JWT tokens** ๋ฐ **HTTP Basic**์„ ๊ฐ–๋Š” ๋ณด์•ˆ๊ณผ ์ธ์ฆ.
* (Pydantic ๋•๋ถ„์—) **๊นŠ์€ ์ค‘์ฒฉ JSON ๋ชจ๋ธ**์„ ์„ ์–ธํ•˜๋Š”๋ฐ ๋” ์ง„๋ณดํ•œ (ํ•˜์ง€๋งŒ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‰ฌ์šด) ๊ธฐ์ˆ .
* <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> ๋ฐ ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ **GraphQL** ํ†ตํ•ฉ.

7
docs/ko/docs/tutorial/body-multiple-params.md

@ -103,15 +103,16 @@
๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ๊ฐ’์€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„๋˜๋ฏ€๋กœ, ๋ช…์‹œ์ ์œผ๋กœ `Query`๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š” ์—†์ด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:
```Python
q: Union[str, None] = None
q: str | None = None
```
๋˜๋Š” Python 3.10 ์ด์ƒ์—์„œ๋Š”:
๋˜๋Š” Python 3.9์—์„œ๋Š”:
```Python
q: str | None = None
q: Union[str, None] = None
```
์˜ˆ๋ฅผ ๋“ค์–ด:
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}

8
docs/ko/docs/tutorial/path-operation-configuration.md

@ -52,11 +52,11 @@
`summary`์™€ `description`์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
{* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[18:19] *}
{* ../../docs_src/path_operation_configuration/tutorial003_py310.py hl[17:18] *}
## ๋…์ŠคํŠธ๋ง์œผ๋กœ ๋งŒ๋“  ์„ค๋ช… { #description-from-docstring }
์„ค๋ช…์€ ๋ณดํ†ต ๊ธธ์–ด์ง€๊ณ  ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ์„ค๋ช…์„ ํ•จ์ˆ˜ <abbr title="a multi-line string as the first expression inside a function (not assigned to any variable) used for documentation โ€“ ๋ฌธ์„œํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ฒซ ํ‘œํ˜„์‹์˜ ์—ฌ๋Ÿฌ ์ค„ ๋ฌธ์ž์—ด(์–ด๋–ค ๋ณ€์ˆ˜์—๋„ ํ• ๋‹น๋˜์ง€ ์•Š์Œ)">docstring</abbr>์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, **FastAPI**๋Š” ๊ทธ๊ณณ์—์„œ ์ด๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
์„ค๋ช…์€ ๋ณดํ†ต ๊ธธ์–ด์ง€๊ณ  ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ์„ค๋ช…์„ ํ•จ์ˆ˜ <abbr title="๋ฌธ์„œํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ฒซ ํ‘œํ˜„์‹์˜ ์—ฌ๋Ÿฌ ์ค„ ๋ฌธ์ž์—ด(์–ด๋–ค ๋ณ€์ˆ˜์—๋„ ํ• ๋‹น๋˜์ง€ ์•Š์Œ)">docstring</abbr>์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, **FastAPI**๋Š” ๊ทธ๊ณณ์—์„œ ์ด๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
๋…์ŠคํŠธ๋ง์—๋Š” <a href="https://en.wikipedia.org/wiki/Markdown" class="external-link" target="_blank">Markdown</a>์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, (๋…์ŠคํŠธ๋ง์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ) ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„๋˜๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
@ -70,7 +70,7 @@
`response_description` ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‘๋‹ต์— ๊ด€ํ•œ ์„ค๋ช…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[19] *}
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
/// info | ์ •๋ณด
@ -90,7 +90,7 @@ OpenAPI๋Š” ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์‘๋‹ต์— ๊ด€ํ•œ ์„ค๋ช…์„ ์š”๊ตฌํ•  ๊ฒƒ์„
## *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ์ง€์›์ค‘๋‹จํ•˜๊ธฐ { #deprecate-a-path-operation }
*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  <abbr title="obsolete, recommended not to use it โ€“ ๊ตฌ์‹์ด๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋จ">deprecated</abbr>๋กœ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค๋ฉด, `deprecated` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:
*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  <abbr title="๊ตฌ์‹์ด๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋จ">deprecated</abbr>๋กœ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค๋ฉด, `deprecated` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:
{* ../../docs_src/path_operation_configuration/tutorial006_py39.py hl[16] *}

Loadingโ€ฆ
Cancel
Save