diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index e46786a53..387063f12 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -64,7 +64,7 @@ jobs:
BRANCH: ${{ ( github.event.workflow_run.head_repository.full_name == github.repository && github.event.workflow_run.head_branch == 'master' && 'main' ) || ( github.event.workflow_run.head_sha ) }}
# TODO: Use v3 when it's fixed, probably in v3.11
# https://github.com/cloudflare/wrangler-action/issues/307
- uses: cloudflare/wrangler-action@v3.11
+ uses: cloudflare/wrangler-action@v3.12
# uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 694d68c69..fc61c3fca 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -35,7 +35,7 @@ jobs:
TIANGOLO_BUILD_PACKAGE: ${{ matrix.package }}
run: python -m build
- name: Publish
- uses: pypa/gh-action-pypi-publish@v1.11.0
+ uses: pypa/gh-action-pypi-publish@v1.12.2
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 84bec0421..d90e7281e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -14,7 +14,7 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.7.1
+ rev: v0.7.2
hooks:
- id: ruff
args:
diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md
index d072c618d..3764e2f96 100644
--- a/docs/en/docs/release-notes.md
+++ b/docs/en/docs/release-notes.md
@@ -27,6 +27,14 @@ hide:
### Translations
+* ๐ Add Korean translation for `/docs/ko/docs/environment-variables.md`. PR [#12526](https://github.com/fastapi/fastapi/pull/12526) by [@Tolerblanc](https://github.com/Tolerblanc).
+* ๐ Add Korean translation for `docs/ko/docs/history-design-future.md`. PR [#12646](https://github.com/fastapi/fastapi/pull/12646) by [@saeye](https://github.com/saeye).
+* ๐ Add Korean translation for `docs/ko/docs/advanced/advanced-dependencies.md`. PR [#12675](https://github.com/fastapi/fastapi/pull/12675) by [@kim-sangah](https://github.com/kim-sangah).
+* ๐ Add Korean translation for `docs/ko/docs/how-to/conditional-openapi.md`. PR [#12731](https://github.com/fastapi/fastapi/pull/12731) by [@sptcnl](https://github.com/sptcnl).
+* ๐ Add Korean translation for `docs/ko/docs/advanced/using_request_directly.md`. PR [#12738](https://github.com/fastapi/fastapi/pull/12738) by [@kwang1215](https://github.com/kwang1215).
+* ๐ Add Korean translation for `docs/ko/docs/advanced/testing-events.md`. PR [#12741](https://github.com/fastapi/fastapi/pull/12741) by [@9zimin9](https://github.com/9zimin9).
+* ๐ Add Korean translation for `docs/ko/docs/security/index.md`. PR [#12743](https://github.com/fastapi/fastapi/pull/12743) by [@kim-sangah](https://github.com/kim-sangah).
+* ๐ Add Portuguese translation for `docs/pt/docs/advanced/path-operation-advanced-configuration.md`. PR [#12762](https://github.com/fastapi/fastapi/pull/12762) by [@Joao-Pedro-P-Holanda](https://github.com/Joao-Pedro-P-Holanda).
* ๐ Add Korean translation for `docs/ko/docs/advanced/wsgi.md`. PR [#12659](https://github.com/fastapi/fastapi/pull/12659) by [@Limsunoh](https://github.com/Limsunoh).
* ๐ Add Portuguese translation for `docs/pt/docs/advanced/websockets.md`. PR [#12703](https://github.com/fastapi/fastapi/pull/12703) by [@devfernandoa](https://github.com/devfernandoa).
* ๐ Add Portuguese translation for `docs/pt/docs/tutorial/security/simple-oauth2.md`. PR [#12520](https://github.com/fastapi/fastapi/pull/12520) by [@LidiaDomingos](https://github.com/LidiaDomingos).
@@ -43,6 +51,10 @@ hide:
### Internal
+* โฌ Bump pypa/gh-action-pypi-publish from 1.12.0 to 1.12.2. PR [#12788](https://github.com/fastapi/fastapi/pull/12788) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* โฌ Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.0. PR [#12781](https://github.com/fastapi/fastapi/pull/12781) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* โฌ Bump cloudflare/wrangler-action from 3.11 to 3.12. PR [#12777](https://github.com/fastapi/fastapi/pull/12777) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* โฌ [pre-commit.ci] pre-commit autoupdate. PR [#12766](https://github.com/fastapi/fastapi/pull/12766) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
* โฌ Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0. PR [#12721](https://github.com/fastapi/fastapi/pull/12721) by [@dependabot[bot]](https://github.com/apps/dependabot).
* โฌ Update pre-commit requirement from <4.0.0,>=2.17.0 to >=2.17.0,<5.0.0. PR [#12749](https://github.com/fastapi/fastapi/pull/12749) by [@dependabot[bot]](https://github.com/apps/dependabot).
* โฌ Bump typer from 0.12.3 to 0.12.5. PR [#12748](https://github.com/fastapi/fastapi/pull/12748) by [@dependabot[bot]](https://github.com/apps/dependabot).
diff --git a/docs/ko/docs/advanced/advanced-dependencies.md b/docs/ko/docs/advanced/advanced-dependencies.md
new file mode 100644
index 000000000..aa5a332f8
--- /dev/null
+++ b/docs/ko/docs/advanced/advanced-dependencies.md
@@ -0,0 +1,179 @@
+# ๊ณ ๊ธ ์์กด์ฑ
+
+## ๋งค๊ฐ๋ณ์ํ๋ ์์กด์ฑ
+
+์ง๊ธ๊น์ง ๋ณธ ๋ชจ๋ ์์กด์ฑ์ ๊ณ ์ ๋ ํจ์ ๋๋ ํด๋์ค์
๋๋ค.
+
+ํ์ง๋ง ์ฌ๋ฌ ๊ฐ์ ํจ์๋ ํด๋์ค๋ฅผ ์ ์ธํ์ง ์๊ณ ๋ ์์กด์ฑ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
+
+์๋ฅผ ๋ค์ด, `q` ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๊ฐ ํน์ ๊ณ ์ ๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์๋์ง ํ์ธํ๋ ์์กด์ฑ์ ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค.
+
+์ด๋ ํด๋น ๊ณ ์ ๋ ๋ด์ฉ์ ๋งค๊ฐ๋ณ์ํํ ์ ์๊ธธ ๋ฐ๋๋๋ค.
+
+## "ํธ์ถ ๊ฐ๋ฅํ" ์ธ์คํด์ค
+
+Python์๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ "ํธ์ถ ๊ฐ๋ฅ"ํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
+
+ํด๋์ค ์์ฒด(์ด๋ฏธ ํธ์ถ ๊ฐ๋ฅํจ)๊ฐ ์๋๋ผ ํด๋น ํด๋์ค์ ์ธ์คํด์ค์ ๋ํด ํธ์ถ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์
๋๋ค.
+
+์ด๋ฅผ ์ํด `__call__` ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="12"
+{!> ../../docs_src/dependencies/tutorial011_an_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="11"
+{!> ../../docs_src/dependencies/tutorial011_an.py!}
+```
+
+////
+
+//// tab | Python 3.8+ non-Annotated
+
+/// tip | ์ฐธ๊ณ
+
+๊ฐ๋ฅํ๋ค๋ฉด `Annotated` ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+///
+
+```Python hl_lines="10"
+{!> ../../docs_src/dependencies/tutorial011.py!}
+```
+
+////
+
+์ด ๊ฒฝ์ฐ, **FastAPI**๋ ์ถ๊ฐ ๋งค๊ฐ๋ณ์์ ํ์ ์์กด์ฑ์ ํ์ธํ๊ธฐ ์ํด `__call__`์ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ,
+๋์ค์ *๊ฒฝ๋ก ์ฐ์ฐ ํจ์*์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ ๋ฌํ ๋ ์ด๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค.
+
+## ์ธ์คํด์ค ๋งค๊ฐ๋ณ์ํํ๊ธฐ
+
+์ด์ `__init__`์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ "๋งค๊ฐ๋ณ์ํ"ํ ์ ์๋ ์ธ์คํด์ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="9"
+{!> ../../docs_src/dependencies/tutorial011_an_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="8"
+{!> ../../docs_src/dependencies/tutorial011_an.py!}
+```
+
+////
+
+//// tab | Python 3.8+ non-Annotated
+
+/// tip | ์ฐธ๊ณ
+
+๊ฐ๋ฅํ๋ค๋ฉด `Annotated` ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+///
+
+```Python hl_lines="7"
+{!> ../../docs_src/dependencies/tutorial011.py!}
+```
+
+////
+
+์ด ๊ฒฝ์ฐ, **FastAPI**๋ `__init__`์ ์ ํ ๊ด์ฌํ์ง ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ์ด ๋ฉ์๋๋ฅผ ์ฝ๋์์ ์ง์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
+
+## ์ธ์คํด์ค ์์ฑํ๊ธฐ
+
+๋ค์๊ณผ ๊ฐ์ด ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="18"
+{!> ../../docs_src/dependencies/tutorial011_an_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="17"
+{!> ../../docs_src/dependencies/tutorial011_an.py!}
+```
+
+////
+
+//// tab | Python 3.8+ non-Annotated
+
+/// tip | ์ฐธ๊ณ
+
+๊ฐ๋ฅํ๋ค๋ฉด `Annotated` ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+///
+
+```Python hl_lines="16"
+{!> ../../docs_src/dependencies/tutorial011.py!}
+```
+
+////
+
+์ด๋ ๊ฒ ํ๋ฉด `checker.fixed_content` ์์ฑ์ `"bar"`๋ผ๋ ๊ฐ์ ๋ด์ ์์กด์ฑ์ "๋งค๊ฐ๋ณ์ํ"ํ ์ ์์ต๋๋ค.
+
+## ์ธ์คํด์ค๋ฅผ ์์กด์ฑ์ผ๋ก ์ฌ์ฉํ๊ธฐ
+
+๊ทธ๋ฐ ๋ค์, `Depends(FixedContentQueryChecker)` ๋์ `Depends(checker)`์์ ์ด `checker` ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ,
+ํด๋์ค ์์ฒด๊ฐ ์๋ ์ธ์คํด์ค `checker`๊ฐ ์์กด์ฑ์ด ๋ฉ๋๋ค.
+
+์์กด์ฑ์ ํด๊ฒฐํ ๋ **FastAPI**๋ ์ด `checker`๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํฉ๋๋ค:
+
+```Python
+checker(q="somequery")
+```
+
+...๊ทธ๋ฆฌ๊ณ ์ด๋ ๋ฐํ๋๋ ๊ฐ์ *๊ฒฝ๋ก ์ฐ์ฐ ํจ์*์ `fixed_content_included` ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="22"
+{!> ../../docs_src/dependencies/tutorial011_an_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="21"
+{!> ../../docs_src/dependencies/tutorial011_an.py!}
+```
+
+////
+
+//// tab | Python 3.8+ non-Annotated
+
+/// tip | ์ฐธ๊ณ
+
+๊ฐ๋ฅํ๋ค๋ฉด `Annotated` ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+///
+
+```Python hl_lines="20"
+{!> ../../docs_src/dependencies/tutorial011.py!}
+```
+
+////
+
+/// tip | ์ฐธ๊ณ
+
+์ด ๋ชจ๋ ๊ณผ์ ์ด ๋ณต์กํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ์ด ๋ฐฉ๋ฒ์ด ์ผ๋ง๋ ์ ์ฉํ์ง ๋ช
ํํ์ง ์์ ์๋ ์์ต๋๋ค.
+
+์ด ์์๋ ์๋์ ์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ง๋ค์์ง๋ง, ์ ์ฒด ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค๋๋ค.
+
+๋ณด์ ๊ด๋ จ ์ฅ์์๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ํธ์ ํจ์๋ค์ด ์์ต๋๋ค.
+
+์ด ๋ชจ๋ ๊ณผ์ ์ ์ดํดํ๋ค๋ฉด, ์ด๋ฌํ ๋ณด์ ๋๊ตฌ๋ค์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ด๋ฏธ ํ์
ํ ๊ฒ์
๋๋ค.
+
+///
diff --git a/docs/ko/docs/advanced/testing-events.md b/docs/ko/docs/advanced/testing-events.md
new file mode 100644
index 000000000..dc082412a
--- /dev/null
+++ b/docs/ko/docs/advanced/testing-events.md
@@ -0,0 +1,7 @@
+# ์ด๋ฒคํธ ํ
์คํธ: ์์ - ์ข
๋ฃ
+
+ํ
์คํธ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ(`startup` ๋ฐ `shutdown`)๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ, `with` ๋ฌธ๊ณผ ํจ๊ป `TestClient`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+```Python hl_lines="9-12 20-24"
+{!../../docs_src/app_testing/tutorial003.py!}
+```
diff --git a/docs/ko/docs/advanced/using-request-directly.md b/docs/ko/docs/advanced/using-request-directly.md
new file mode 100644
index 000000000..027ea9fad
--- /dev/null
+++ b/docs/ko/docs/advanced/using-request-directly.md
@@ -0,0 +1,58 @@
+# `Request` ์ง์ ์ฌ์ฉํ๊ธฐ
+
+์ง๊ธ๊น์ง ์์ฒญ์์ ํ์ํ ๋ถ๋ถ์ ๊ฐ ํ์
์ผ๋ก ์ ์ธํ์ฌ ์ฌ์ฉํด ์์ต๋๋ค.
+
+๋ค์๊ณผ ๊ฐ์ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค:
+
+* ๊ฒฝ๋ก์ ํ๋ผ๋ฏธํฐ๋ก๋ถํฐ.
+* ํค๋.
+* ์ฟ ํค.
+* ๊ธฐํ ๋ฑ๋ฑ.
+
+์ด๋ ๊ฒ ํจ์ผ๋ก์จ, **FastAPI**๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ๋ณํํ๋ฉฐ, API์ ๋ํ ๋ฌธ์๋ฅผ ์๋ํ๋ก ์์ฑํฉ๋๋ค.
+
+ํ์ง๋ง `Request` ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค.
+
+## `Request` ๊ฐ์ฒด์ ๋ํ ์ธ๋ถ ์ฌํญ
+
+**FastAPI**๋ ์ค์ ๋ก ๋ด๋ถ์ **Starlette**์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ ์์ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ๋ง๋ถ์ธ ๊ตฌ์กฐ์
๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ๋ถ์ด ํ์ํ ๋ Starlette์ `Request` ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+`Request` ๊ฐ์ฒด์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ(์: ๋ณธ๋ฌธ์ ์ฝ๊ธฐ)์๋ FastAPI๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ฑฐ๋ ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฌธ์ํ(OpenAPI๋ฅผ ํตํ ๋ฌธ์ ์๋ํ(๋ก ์์ฑ๋) API ์ฌ์ฉ์ ์ธํฐํ์ด์ค)๋ ๋์ง ์์ต๋๋ค.
+
+๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์(์: Pydantic ๋ชจ๋ธ์ ์ฌ์ฉํ ๋ณธ๋ฌธ)๋ ์ฌ์ ํ ๊ฒ์ฆ, ๋ณํ, ์ฃผ์ ์ถ๊ฐ ๋ฑ์ด ์ด๋ฃจ์ด์ง๋๋ค.
+
+ํ์ง๋ง ํน์ ํ ๊ฒฝ์ฐ์๋ `Request` ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
+
+## `Request` ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ
+
+์ฌ๋ฌ๋ถ์ด ํด๋ผ์ด์ธํธ์ IP ์ฃผ์/ํธ์คํธ ์ ๋ณด๋ฅผ *๊ฒฝ๋ก ์๋ ํจ์* ๋ด๋ถ์์ ๊ฐ์ ธ์์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
+
+์ด๋ฅผ ์ํด์๋ ์์ฒญ์ ์ง์ ์ ๊ทผํด์ผ ํฉ๋๋ค.
+
+```Python hl_lines="1 7-8"
+{!../../docs_src/using_request_directly/tutorial001.py!}
+```
+
+*๊ฒฝ๋ก ์๋ ํจ์* ๋งค๊ฐ๋ณ์๋ฅผ `Request` ํ์
์ผ๋ก ์ ์ธํ๋ฉด **FastAPI**๊ฐ ํด๋น ๋งค๊ฐ๋ณ์์ `Request` ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค.
+
+/// tip | ํ
+
+์ด ๊ฒฝ์ฐ, ์์ฒญ ๋งค๊ฐ๋ณ์์ ํจ๊ป ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
+
+๋ฐ๋ผ์, ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์๋ ์ถ์ถ๋๊ณ ๊ฒ์ฆ๋๋ฉฐ ์ง์ ๋ ํ์
์ผ๋ก ๋ณํ๋๊ณ OpenAPI๋ก ์ฃผ์์ด ์ถ๊ฐ๋ฉ๋๋ค.
+
+์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก, ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ค์ ํ์์ฒ๋ผ ์ ์ธํ๋ฉด์, ๋ถ๊ฐ์ ์ผ๋ก `Request`๋ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
+
+///
+
+## `Request` ์ค๋ช
์
+
+์ฌ๋ฌ๋ถ์ `Request` ๊ฐ์ฒด์ ๋ํ ๋ ์์ธํ ๋ด์ฉ์ ๊ณต์ Starlette ์ค๋ช
์ ์ฌ์ดํธ์์ ์ฝ์ด๋ณผ ์ ์์ต๋๋ค.
+
+/// note | ๊ธฐ์ ์ธ๋ถ์ฌํญ
+
+`from starlette.requests import Request`๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
+
+**FastAPI**๋ ์ฌ๋ฌ๋ถ(๊ฐ๋ฐ์)๋ฅผ ์ํ ํธ์๋ฅผ ์ํด ์ด๋ฅผ ์ง์ ์ ๊ณตํ์ง๋ง, ์ค์ ๋ก๋ Starlette์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค.
+
+///
diff --git a/docs/ko/docs/environment-variables.md b/docs/ko/docs/environment-variables.md
new file mode 100644
index 000000000..09c2fd6d3
--- /dev/null
+++ b/docs/ko/docs/environment-variables.md
@@ -0,0 +1,298 @@
+# ํ๊ฒฝ ๋ณ์
+
+/// tip | "ํ"
+
+๋ง์ฝ "ํ๊ฒฝ ๋ณ์"๊ฐ ๋ฌด์์ด๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๊ณ ๊ณ์๋ค๋ฉด, ์ด ์ฑํฐ๋ฅผ ์คํตํ์
๋ ์ข์ต๋๋ค.
+
+///
+
+ํ๊ฒฝ ๋ณ์๋ ํ์ด์ฌ ์ฝ๋์ **๋ฐ๊นฅ**์ธ, **์ด์ ์ฒด์ **์ ์กด์ฌํ๋ ๋ณ์์
๋๋ค. ํ์ด์ฌ ์ฝ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ์ฝ์ ์ ์์ต๋๋ค.
+
+ํ๊ฒฝ ๋ณ์๋ ์ ํ๋ฆฌ์ผ์ด์
**์ค์ **์ ์ฒ๋ฆฌํ๊ฑฐ๋, ํ์ด์ฌ์ **์ค์น** ๊ณผ์ ์ ์ผ๋ถ๋ก ์ ์ฉํฉ๋๋ค.
+
+## ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ
+
+ํ์ด์ฌ ์์ด๋, **์
ธ (ํฐ๋ฏธ๋)** ์์ ํ๊ฒฝ ๋ณ์๋ฅผ **์์ฑ** ํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+// You could create an env var MY_NAME with
+$ export MY_NAME="Wade Wilson"
+
+// Then you could use it with other programs, like
+$ echo "Hello $MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+// Create an env var MY_NAME
+$ $Env:MY_NAME = "Wade Wilson"
+
+// Use it with other programs, like
+$ echo "Hello $Env:MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+## ํ์ด์ฌ์์ ํ๊ฒฝ ๋ณ์ ์ฝ๊ธฐ
+
+ํ์ด์ฌ **๋ฐ๊นฅ**์ธ ํฐ๋ฏธ๋์์(๋ค๋ฅธ ๋๊ตฌ๋ก๋ ๊ฐ๋ฅ) ํ๊ฒฝ ๋ณ์๋ฅผ ์์ฑ๋ ํ ์๋ ์๊ณ , ์ด๋ฅผ **ํ์ด์ฌ์์ ์ฝ์ ์ ์์ต๋๋ค.**
+
+์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ `main.py` ํ์ผ์ด ์๋ค๊ณ ํฉ์๋ค:
+
+```Python hl_lines="3"
+import os
+
+name = os.getenv("MY_NAME", "World")
+print(f"Hello {name} from Python")
+```
+
+/// tip | "ํ"
+
+`os.getenv()` ์ ๋ ๋ฒ์งธ ์ธ์๋ ๋ฐํํ ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
+
+์ฌ๊ธฐ์๋ `"World"`๋ฅผ ๋ฃ์๊ธฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก์จ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฃ์ง ์์ผ๋ฉด `None` ์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
+
+///
+
+๊ทธ๋ฌ๋ฉด ํด๋น ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ ์ ์์ต๋๋ค:
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+// Here we don't set the env var yet
+$ python main.py
+
+// As we didn't set the env var, we get the default value
+
+Hello World from Python
+
+// But if we create an environment variable first
+$ export MY_NAME="Wade Wilson"
+
+// And then call the program again
+$ python main.py
+
+// Now it can read the environment variable
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+// Here we don't set the env var yet
+$ python main.py
+
+// As we didn't set the env var, we get the default value
+
+Hello World from Python
+
+// But if we create an environment variable first
+$ $Env:MY_NAME = "Wade Wilson"
+
+// And then call the program again
+$ python main.py
+
+// Now it can read the environment variable
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+ํ๊ฒฝ๋ณ์๋ ์ฝ๋ ๋ฐ๊นฅ์์ ์ค์ ๋ ์ ์์ง๋ง, ์ฝ๋์์ ์ฝ์ ์ ์๊ณ , ๋๋จธ์ง ํ์ผ๊ณผ ํจ๊ป ์ ์ฅ(`git`์ ์ปค๋ฐ)ํ ํ์๊ฐ ์์ผ๋ฏ๋ก, ๊ตฌ์ฑ์ด๋ **์ค์ ** ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค.
+
+**ํน์ ํ๋ก๊ทธ๋จ ํธ์ถ**์ ๋ํด์๋ง ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ํด๋น ํ๋ก๊ทธ๋จ์์๋ง ์ฌ์ฉํ ์ ์๊ณ , ํด๋น ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ํ๋ก๊ทธ๋จ ๋ฐ๋ก ์, ๊ฐ์ ์ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค:
+
+
+
+```console
+// Create an env var MY_NAME in line for this program call
+$ MY_NAME="Wade Wilson" python main.py
+
+// Now it can read the environment variable
+
+Hello Wade Wilson from Python
+
+// The env var no longer exists afterwards
+$ python main.py
+
+Hello World from Python
+```
+
+
+
+/// tip | "ํ"
+
+The Twelve-Factor App: Config ์์ ์ข ๋ ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
+
+///
+
+## ํ์
๊ณผ ๊ฒ์ฆ
+
+์ด ํ๊ฒฝ๋ณ์๋ค์ ์ค์ง **ํ
์คํธ ๋ฌธ์์ด**๋ก๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ
์คํธ ๋ฌธ์์ด์ ํ์ด์ฌ ์ธ๋ถ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ๋ฐ ๋๋จธ์ง ์์คํ
(Linux, Windows, macOS ๋ฑ ๋ค๋ฅธ ์ด์ ์ฒด์ )๊ณผ ํธํ๋์ด์ผ ํฉ๋๋ค.
+
+์ฆ, ํ์ด์ฌ์์ ํ๊ฒฝ ๋ณ์๋ก๋ถํฐ ์ฝ์ **๋ชจ๋ ๊ฐ**์ **`str`**์ด ๋๊ณ , ๋ค๋ฅธ ํ์
์ผ๋ก์ ๋ณํ์ด๋ ๊ฒ์ฆ์ ์ฝ๋์์ ์ํํด์ผ ํฉ๋๋ค.
+
+**์ ํ๋ฆฌ์ผ์ด์
์ค์ **์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ [๊ณ ๊ธ ์ฌ์ฉ์ ๊ฐ์ด๋ - ์ค์ ๋ฐ ํ๊ฒฝ ๋ณ์](./advanced/settings.md){.internal-link target=\_blank} ์์ ํ์ธํ ์ ์์ต๋๋ค.
+
+## `PATH` ํ๊ฒฝ ๋ณ์
+
+**`PATH`**๋ผ๊ณ ๋ถ๋ฆฌ๋, **ํน๋ณํ** ํ๊ฒฝ๋ณ์๊ฐ ์์ต๋๋ค. ์ด์์ฒด์ (Linux, Windows, macOS ๋ฑ)์์ ์คํํ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ธฐ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
+
+๋ณ์ `PATH`์ ๊ฐ์ Linux์ macOS์์๋ ์ฝ๋ก `:`, Windows์์๋ ์ธ๋ฏธ์ฝ๋ก `;`์ผ๋ก ๊ตฌ๋ถ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๊ธด ๋ฌธ์์ด์
๋๋ค.
+
+์๋ฅผ ๋ค์ด, `PATH` ํ๊ฒฝ ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+์ด๋ ์์คํ
์ด ๋ค์ ๋๋ ํ ๋ฆฌ์์ ํ๋ก๊ทธ๋จ์ ์ฐพ์์ผ ํจ์ ์๋ฏธํฉ๋๋ค:
+
+- `/usr/local/bin`
+- `/usr/bin`
+- `/bin`
+- `/usr/sbin`
+- `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
+```
+
+์ด๋ ์์คํ
์ด ๋ค์ ๋๋ ํ ๋ฆฌ์์ ํ๋ก๊ทธ๋จ์ ์ฐพ์์ผ ํจ์ ์๋ฏธํฉ๋๋ค:
+
+- `C:\Program Files\Python312\Scripts`
+- `C:\Program Files\Python312`
+- `C:\Windows\System32`
+
+////
+
+ํฐ๋ฏธ๋์ **๋ช
๋ น์ด**๋ฅผ ์
๋ ฅํ๋ฉด ์ด์ ์ฒด์ ๋ `PATH` ํ๊ฒฝ ๋ณ์์ ๋์ด๋ **๊ฐ ๋๋ ํ ๋ฆฌ**์์ ํ๋ก๊ทธ๋จ์ **์ฐพ์ต๋๋ค.**
+
+์๋ฅผ ๋ค์ด ํฐ๋ฏธ๋์ `python`์ ์
๋ ฅํ๋ฉด ์ด์ ์ฒด์ ๋ ํด๋น ๋ชฉ๋ก์ **์ฒซ ๋ฒ์งธ ๋๋ ํ ๋ฆฌ**์์ `python`์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฐพ์ต๋๋ค.
+
+์ฐพ์ผ๋ฉด **์ฌ์ฉํฉ๋๋ค**. ๊ทธ๋ ์ง ์์ผ๋ฉด **๋ค๋ฅธ ๋๋ ํ ๋ฆฌ**์์ ๊ณ์ ์ฐพ์ต๋๋ค.
+
+### ํ์ด์ฌ ์ค์น์ `PATH` ์
๋ฐ์ดํธ
+
+ํ์ด์ฌ์ ์ค์นํ ๋, ์๋ง `PATH` ํ๊ฒฝ ๋ณ์๋ฅผ ์
๋ฐ์ดํธ ํ ๊ฒ์ด๋๊ณ ๋ฌผ์ด๋ดค์ ๊ฒ๋๋ค.
+
+//// tab | Linux, macOS
+
+ํ์ด์ฌ์ ์ค์นํ๊ณ ๊ทธ๊ฒ์ด `/opt/custompython/bin` ๋๋ ํ ๋ฆฌ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
+
+`PATH` ํ๊ฒฝ ๋ณ์๋ฅผ ์
๋ฐ์ดํธํ๋๋ก "์"๋ผ๊ณ ํ๋ฉด ์ค์น ๊ด๋ฆฌ์๊ฐ `/opt/custompython/bin`์ `PATH` ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐํฉ๋๋ค.
+
+๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค:
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
+```
+
+์ด๋ ๊ฒ ํ๋ฉด ํฐ๋ฏธ๋์ `python`์ ์
๋ ฅํ ๋, ์์คํ
์ด `/opt/custompython/bin`(๋ง์ง๋ง ๋๋ ํ ๋ฆฌ)์์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ์ฐพ์ ์ฌ์ฉํฉ๋๋ค.
+
+////
+
+//// tab | Windows
+
+ํ์ด์ฌ์ ์ค์นํ๊ณ ๊ทธ๊ฒ์ด `C:\opt\custompython\bin` ๋๋ ํ ๋ฆฌ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
+
+`PATH` ํ๊ฒฝ ๋ณ์๋ฅผ ์
๋ฐ์ดํธํ๋๋ก "์"๋ผ๊ณ ํ๋ฉด ์ค์น ๊ด๋ฆฌ์๊ฐ `C:\opt\custompython\bin`์ `PATH` ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐํฉ๋๋ค.
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
+```
+
+์ด๋ ๊ฒ ํ๋ฉด ํฐ๋ฏธ๋์ `python`์ ์
๋ ฅํ ๋, ์์คํ
์ด `C:\opt\custompython\bin`(๋ง์ง๋ง ๋๋ ํ ๋ฆฌ)์์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ์ฐพ์ ์ฌ์ฉํฉ๋๋ค.
+
+////
+
+๊ทธ๋์, ๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅํ๋ค๋ฉด:
+
+
+
+```console
+$ python
+```
+
+
+
+//// tab | Linux, macOS
+
+์์คํ
์ `/opt/custompython/bin`์์ `python` ํ๋ก๊ทธ๋จ์ **์ฐพ์** ์คํํฉ๋๋ค.
+
+๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ต๋๋ค:
+
+
+
+```console
+$ /opt/custompython/bin/python
+```
+
+
+
+////
+
+//// tab | Windows
+
+์์คํ
์ `C:\opt\custompython\bin\python`์์ `python` ํ๋ก๊ทธ๋จ์ **์ฐพ์** ์คํํฉ๋๋ค.
+
+๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ต๋๋ค:
+
+
+
+```console
+$ C:\opt\custompython\bin\python
+```
+
+
+
+////
+
+์ด ์ ๋ณด๋ [๊ฐ์ ํ๊ฒฝ](virtual-environments.md){.internal-link target=\_blank} ์ ๋ํด ์์๋ณผ ๋ ์ ์ฉํ ๊ฒ์
๋๋ค.
+
+## ๊ฒฐ๋ก
+
+์ด ๋ฌธ์๋ฅผ ์ฝ๊ณ **ํ๊ฒฝ ๋ณ์**๊ฐ ๋ฌด์์ด๊ณ ํ์ด์ฌ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ดํดํ์
จ์ ๊ฒ๋๋ค.
+
+๋ํ ํ๊ฒฝ ๋ณ์์ ๋ํ ์ํคํผ๋์(ํ๊ตญ์ด)์์ ์ด์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
+
+๋ง์ ๊ฒฝ์ฐ์์, ํ๊ฒฝ ๋ณ์๊ฐ ์ด๋ป๊ฒ ์ ์ฉํ๊ณ ์ ์ฉ ๊ฐ๋ฅํ์ง ๋ฐ๋ก ๋ช
ํํ๊ฒ ์ ์๋ ์์ต๋๋ค. ํ์ง๋ง ๊ฐ๋ฐํ ๋ ๋ค์ํ ์๋๋ฆฌ์ค์์ ๊ณ์ ๋ํ๋๋ฏ๋ก ์ด์ ๋ํด ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+์๋ฅผ ๋ค์ด, ๋ค์ ์น์
์ธ [๊ฐ์ ํ๊ฒฝ](virtual-environments.md)์์ ์ด ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค.
diff --git a/docs/ko/docs/history-design-future.md b/docs/ko/docs/history-design-future.md
new file mode 100644
index 000000000..6680a46e7
--- /dev/null
+++ b/docs/ko/docs/history-design-future.md
@@ -0,0 +1,81 @@
+# ์ญ์ฌ, ๋์์ธ ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋
+
+์ด๋ ๋ , [ํ FastAPI ์ฌ์ฉ์](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920)๊ฐ ์ด๋ ๊ฒ ๋ฌผ์์ต๋๋ค:
+
+> ์ด ํ๋ก์ ํธ์ ์ญ์ฌ๋ฅผ ์๋ ค ์ฃผ์ค ์ ์๋์? ๋ช ์ฃผ ๋ง์ ๋ฉ์ง ๊ฒฐ๊ณผ๋ฅผ ๋ธ ๊ฒ ๊ฐ์์. [...]
+
+์ฌ๊ธฐ์ ๊ทธ ์ญ์ฌ์ ๋ํด ๊ฐ๋จํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
+
+---
+
+## ๋์
+
+์ ๋ ์ฌ๋ฌ ํด ๋์ ๋จธ์ ๋ฌ๋, ๋ถ์ฐ ์์คํ
, ๋น๋๊ธฐ ์์
, NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋ณต์กํ ์๊ตฌ์ฌํญ์ ๊ฐ์ง API๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ์ฌ๋ฌ ํ์ ์ด๋์ด ์์ต๋๋ค.
+
+์ด ๊ณผ์ ์์ ๋ง์ ๋์์ ์กฐ์ฌํ๊ณ , ํ
์คํธํ๋ฉฐ, ์ฌ์ฉํด์ผ ํ์ต๋๋ค. **FastAPI**์ ์ญ์ฌ๋ ๊ทธ ์ด์ ์ ๋์๋ ์ฌ๋ฌ ๋๊ตฌ์ ์ญ์ฌ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์์ต๋๋ค.
+
+[๋์](alternatives.md){.internal-link target=_blank} ์น์
์์ ์ธ๊ธ๋ ๊ฒ์ฒ๋ผ:
+
+> **FastAPI**๋ ์ด์ ์ ๋์๋ ๋ง์ ๋๊ตฌ๋ค์ ๋
ธ๋ ฅ ์์ด๋ ์กด์ฌํ์ง ์์์ ๊ฒ์
๋๋ค.
+>
+> ์ด์ ์ ๊ฐ๋ฐ๋ ์ฌ๋ฌ ๋๊ตฌ๋ค์ด ์ด ํ๋ก์ ํธ์ ์๊ฐ์ ์ฃผ์์ต๋๋ค.
+>
+> ์ ๋ ์ค๋ซ๋์ ์๋ก์ด ํ๋ ์์ํฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ํผํ๊ณ ์ ํ์ต๋๋ค. ์ฒ์์๋ **FastAPI**๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๋ค์ํ ํ๋ ์์ํฌ์ ํ๋ฌ๊ทธ์ธ, ๋๊ตฌ๋ค์ ์กฐํฉํด ํด๊ฒฐํ๋ ค ํ์ต๋๋ค.
+>
+> ํ์ง๋ง ๊ฒฐ๊ตญ์๋ ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ํตํฉํ๋ ๋๊ตฌ๊ฐ ํ์ํด์ก์ต๋๋ค. ์ด์ ๋๊ตฌ๋ค๋ก๋ถํฐ ์ต๊ณ ์ ์์ด๋์ด๋ค์ ๋ชจ์ผ๊ณ , ์ด๋ฅผ ์ต์ ์ ๋ฐฉ์์ผ๋ก ์กฐํฉํด์ผ๋ง ํ์ต๋๋ค. ์ด๋ :term:Python 3.6+ ํ์
ํํธ ์ ๊ฐ์, ์ด์ ์๋ ์ฌ์ฉํ ์ ์์๋ ์ธ์ด ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
๋๋ค.
+
+---
+
+## ์กฐ์ฌ
+
+์ฌ๋ฌ ๋์์ ์ฌ์ฉํด ๋ณด๋ฉฐ ๋ค์ํ ๋๊ตฌ์์ ๋ฐฐ์ด ์ ๋ค์ ๋ชจ์ ์ ์ ๊ฐ๋ฐํ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ์์ ์ฐพ์์ต๋๋ค.
+
+์๋ฅผ ๋ค์ด, ํ์ค :term:Python ํ์
ํํธ ์ ๊ธฐ๋ฐํ๋ ๊ฒ์ด ์ด์์ ์ด๋ผ๋ ์ ์ด ๋ช
ํํ์ต๋๋ค.
+
+๋ํ, ์ด๋ฏธ ์กด์ฌํ๋ ํ์ค์ ํ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ์ ๊ทผ๋ฒ์ด๋ผ ํ๋จํ์ต๋๋ค.
+
+๊ทธ๋์ **FastAPI**์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๋ช ๋ฌ ๋์ OpenAPI, JSON Schema, OAuth2 ๋ช
์ธ๋ฅผ ์ฐ๊ตฌํ๋ฉฐ ์ด๋ค์ ๊ด๊ณ์ ๊ฒน์น๋ ๋ถ๋ถ, ์ฐจ์ด์ ์ ์ดํดํ์ต๋๋ค.
+
+---
+
+## ๋์์ธ
+
+๊ทธ ํ, **FastAPI** ์ฌ์ฉ์๊ฐ ๋ ๊ฐ๋ฐ์๋ก์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฐ๋ฐ์ "API"๋ฅผ ๋์์ธํ์ต๋๋ค.
+
+[Python Developer Survey](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)์ ๋ฐ๋ฅด๋ฉด ์ฝ 80%์ Python ๊ฐ๋ฐ์๊ฐ PyCharm, VS Code, Jedi ๊ธฐ๋ฐ ํธ์ง๊ธฐ ๋ฑ์์ ๊ฐ๋ฐํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ฌ๋ฌ ์์ด๋์ด๋ฅผ ํ
์คํธํ์ต๋๋ค.
+
+๋๋ถ๋ถ์ ๋ค๋ฅธ ํธ์ง๊ธฐ๋ ์ ์ฌํ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์, **FastAPI**์ ์ด์ ์ ๊ฑฐ์ ๋ชจ๋ ํธ์ง๊ธฐ์์ ๋๋ฆด ์ ์์ต๋๋ค.
+
+์ด ๊ณผ์ ์ ํตํด ์ฝ๋ ์ค๋ณต์ ์ต์ํํ๊ณ , ๋ชจ๋ ๊ณณ์์ ์๋ ์์ฑ, ํ์
๊ฒ์ฌ, ์๋ฌ ํ์ธ ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ ์ต์ ์ ๋ฐฉ์์ ์ฐพ์๋์ต๋๋ค.
+
+์ด ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ต๊ณ ์ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
+
+---
+
+## ํ์์กฐ๊ฑด
+
+์ฌ๋ฌ ๋์์ ํ
์คํธํ ํ, [Pydantic](https://docs.pydantic.dev/)์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
+
+์ดํ ์ ๋ **Pydantic**์ด JSON Schema์ ์๋ฒฝํ ํธํ๋๋๋ก ๊ฐ์ ํ๊ณ , ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด ์ ์ธ์ ์ง์ํ๋ฉฐ, ์ฌ๋ฌ ํธ์ง๊ธฐ์์์ ์๋ ์์ฑ๊ณผ ํ์
๊ฒ์ฌ ๊ธฐ๋ฅ์ ํฅ์ํ๊ธฐ ์ํด ๊ธฐ์ฌํ์ต๋๋ค.
+
+๋ํ, ๋ ๋ค๋ฅธ ์ฃผ์ ํ์์กฐ๊ฑด์ด์๋ [Starlette](https://www.starlette.io/)์๋ ๊ธฐ์ฌํ์ต๋๋ค.
+
+---
+
+## ๊ฐ๋ฐ
+
+**FastAPI**๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์์ํ ์ฆ์์๋ ๋๋ถ๋ถ์ ์ค๋น๊ฐ ์ด๋ฏธ ์๋ฃ๋ ์ํ์์ต๋๋ค. ์ค๊ณ๊ฐ ์ ์๋์๊ณ , ํ์์กฐ๊ฑด๊ณผ ๋๊ตฌ๊ฐ ์ค๋น๋์์ผ๋ฉฐ, ํ์ค๊ณผ ๋ช
์ธ์ ๋ํ ์ง์๋ ์ถฉ๋ถํ์ต๋๋ค.
+
+---
+
+## ๋ฏธ๋
+
+ํ์์ ์์ **FastAPI**๊ฐ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ ์ฉํ๋ค๋ ๊ฒ์ด ๋ช
๋ฐฑํด์ก์ต๋๋ค.
+
+์ฌ๋ฌ ์ฉ๋์ ๋ ์ ํฉํ ๋๊ตฌ๋ก์ ๊ธฐ์กด ๋์๋ณด๋ค ์ ํธ๋๊ณ ์์ต๋๋ค.
+์ด๋ฏธ ๋ง์ ๊ฐ๋ฐ์์ ํ๋ค์ด **FastAPI**์ ์์กดํด ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์
๋๋ค (์ ์ ์ ํ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค).
+
+ํ์ง๋ง ์ฌ์ ํ ๊ฐ์ ํด์ผ ํ ์ ๊ณผ ์ถ๊ฐํ ๊ธฐ๋ฅ๋ค์ด ๋ง์ด ๋จ์ ์์ต๋๋ค.
+
+**FastAPI**๋ ๋ฐ์ ๋ฏธ๋๋ก ๋์๊ฐ๊ณ ์์ต๋๋ค.
+๊ทธ๋ฆฌ๊ณ [์ฌ๋ฌ๋ถ์ ๋์](help-fastapi.md){.internal-link target=_blank}์ ํฐ ํ์ด ๋ฉ๋๋ค.
diff --git a/docs/ko/docs/how-to/conditional-openapi.md b/docs/ko/docs/how-to/conditional-openapi.md
new file mode 100644
index 000000000..79c7f0dd2
--- /dev/null
+++ b/docs/ko/docs/how-to/conditional-openapi.md
@@ -0,0 +1,61 @@
+# ์กฐ๊ฑด๋ถ์ ์ธ OpenAPI
+
+ํ์ํ ๊ฒฝ์ฐ, ์ค์ ๋ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก OpenAPI๋ฅผ ๊ตฌ์ฑํ๊ณ ์์ ํ ๋นํ์ฑํํ ์๋ ์์ต๋๋ค.
+
+## ๋ณด์, API ๋ฐ docs์ ๋ํด์
+
+ํ๋ก๋์
์์, ๋ฌธ์ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ์จ๊ธฐ๋ ๊ฒ์ด API๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ด *๋์ด์๋ ์ ๋ฉ๋๋ค*.
+
+์ด๋ API์ ์ถ๊ฐ์ ์ธ ๋ณด์์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, *๊ฒฝ๋ก ์์
*์ ์ฌ์ ํ ๋์ผํ ์์น์์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
+
+์ฝ๋์ ๋ณด์ ๊ฒฐํจ์ด ์๋ค๋ฉด, ๊ทธ ๊ฒฐํจ์ ์ฌ์ ํ ์กด์ฌํ ๊ฒ์
๋๋ค.
+
+๋ฌธ์๋ฅผ ์จ๊ธฐ๋ ๊ฒ์ API์ ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๋ฉฐ, ํ๋ก๋์
์์ ๋๋ฒ๊น
์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๋จ์ํ '๋ชจํธ์ฑ์ ์ํ ๋ณด์'์ ํ ํํ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
+
+API๋ฅผ ๋ณดํธํ๊ณ ์ถ๋ค๋ฉด, ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ ๋์ ๋ฐฉ๋ฒ๋ค์ด ์์ต๋๋ค:
+
+* ์์ฒญ ๋ณธ๋ฌธ๊ณผ ์๋ต์ ๋ํด ์ ์ ์๋ Pydantic ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋ก ํ์ธ์.
+
+* ์ข
์์ฑ์ ์ฌ์ฉํ์ฌ ํ์ํ ๊ถํ๊ณผ ์ญํ ์ ๊ตฌ์ฑํ์ธ์.
+
+* ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ์ ์ฅํ์ง ๋ง๊ณ , ์ค์ง ์ํธํ๋ ๋น๋ฐ๋ฒํธ๋ง ์ ์ฅํ์ธ์.
+
+* Passlib๊ณผ JWT ํ ํฐ๊ณผ ๊ฐ์ ์ ์๋ ค์ง ์ํธํ ๋๊ตฌ๋ค์ ๊ตฌํํ๊ณ ์ฌ์ฉํ์ธ์.
+
+* ํ์ํ ๊ณณ์ OAuth2 ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ธ๋ถํ๋ ๊ถํ ์ ์ด๋ฅผ ์ถ๊ฐํ์ธ์.
+
+* ๋ฑ๋ฑ....
+
+๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ํน์ ํ๊ฒฝ(์: ํ๋ก๋์
)์์ ๋๋ ํ๊ฒฝ ๋ณ์์ ์ค์ ์ ๋ฐ๋ผ API ๋ฌธ์๋ฅผ ๋นํ์ฑํํด์ผ ํ๋ ๋งค์ฐ ํน์ ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ ์ ์์ต๋๋ค.
+
+## ์ค์ ๋ฐ ํ๊ฒฝ๋ณ์์ ์กฐ๊ฑด๋ถ OpenAPI
+
+๋์ผํ Pydantic ์ค์ ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ OpenAPI ๋ฐ ๋ฌธ์ UI๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
+
+์๋ฅผ ๋ค์ด:
+
+{* ../../docs_src/conditional_openapi/tutorial001.py hl[6,11] *}
+
+์ฌ๊ธฐ์ `openapi_url` ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ธ `"/openapi.json"`์ผ๋ก ์ ์ธํฉ๋๋ค.
+
+๊ทธ๋ฐ ๋ค, ์ฐ๋ฆฌ๋ `FastAPI` ์ฑ์ ๋ง๋ค ๋ ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
+
+ํ๊ฒฝ ๋ณ์ `OPENAPI_URL`์ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ์ฌ OpenAPI(๋ฌธ์ UI ํฌํจ)๋ฅผ ๋นํ์ฑํํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
+
+
+
+```console
+$ OPENAPI_URL= uvicorn main:app
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+๊ทธ๋ฆฌ๊ณ `/openapi.json`, `/docs` ๋๋ `/redoc`์ URL๋ก ์ด๋ํ๋ฉด `404 Not Found`๋ผ๋ ์ค๋ฅ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค:
+
+```JSON
+{
+ "detail": "Not Found"
+}
+```
diff --git a/docs/ko/docs/security/index.md b/docs/ko/docs/security/index.md
new file mode 100644
index 000000000..5a6c733f0
--- /dev/null
+++ b/docs/ko/docs/security/index.md
@@ -0,0 +1,19 @@
+# ๊ณ ๊ธ ๋ณด์
+
+## ์ถ๊ฐ ๊ธฐ๋ฅ
+
+[์์ต์ - ์ฌ์ฉ์ ๊ฐ์ด๋: ๋ณด์](../../tutorial/security/index.md){.internal-link target=_blank} ๋ฌธ์์์ ๋ค๋ฃฌ ๋ด์ฉ ์ธ์๋ ๋ณด์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
+
+/// tip
+
+๋ค์ ์น์
์ **๋ฐ๋์ "๊ณ ๊ธ"** ๊ธฐ๋ฅ์ ์๋๋๋ค.
+
+๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ, ์ ํฉํ ํด๊ฒฐ์ฑ
์ด ๊ทธ ์ค ํ๋์ ์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
+
+///
+
+## ๋จผ์ ์์ต์ ์ฝ๊ธฐ
+
+๋ค์ ์น์
์ ์ด๋ฏธ [์์ต์ - ์ฌ์ฉ์ ๊ฐ์ด๋: ๋ณด์](../../tutorial/security/index.md){.internal-link target=_blank} ๋ฌธ์๋ฅผ ์ฝ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
+
+์ด ์น์
๋ค์ ๋ชจ๋ ๋์ผํ ๊ฐ๋
์ ๋ฐํ์ผ๋ก ํ๋ฉฐ, ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
diff --git a/docs/pt/docs/advanced/path-operation-advanced-configuration.md b/docs/pt/docs/advanced/path-operation-advanced-configuration.md
new file mode 100644
index 000000000..04f5cc9a3
--- /dev/null
+++ b/docs/pt/docs/advanced/path-operation-advanced-configuration.md
@@ -0,0 +1,212 @@
+# Configuraรงรฃo Avanรงada da Operaรงรฃo de Rota
+
+## operationId do OpenAPI
+
+/// warning | Aviso
+
+Se vocรช nรฃo รฉ um "especialista" no OpenAPI, vocรช provavelmente nรฃo precisa disso.
+
+///
+
+Vocรช pode definir o `operationId` do OpenAPI que serรก utilizado na sua *operaรงรฃo de rota* com o parรขmetro `operation_id`.
+
+Vocรช precisa ter certeza que ele รฉ รบnico para cada operaรงรฃo.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial001.py hl[6] *}
+
+### Utilizando o nome da *funรงรฃo de operaรงรฃo de rota* como o operationId
+
+Se vocรช quiser utilizar o nome das funรงรตes da sua API como `operationId`s, vocรช pode iterar sobre todos esses nomes e sobrescrever o `operationId` em cada *operaรงรฃo de rota* utilizando o `APIRoute.name` dela.
+
+Vocรช deve fazer isso depois de adicionar todas as suas *operaรงรตes de rota*.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002.py hl[2,12:21,24] *}
+
+/// tip | Dica
+
+Se vocรช chamar `app.openapi()` manualmente, os `operationId`s devem ser atualizados antes dessa chamada.
+
+///
+
+/// warning | Aviso
+
+Se vocรช fizer isso, vocรช tem que ter certeza de que cada uma das suas *funรงรตes de operaรงรฃo de rota* tem um nome รบnico.
+
+Mesmo que elas estejam em mรณdulos (arquivos Python) diferentes.
+
+///
+
+## Excluir do OpenAPI
+
+Para excluir uma *operaรงรฃo de rota* do esquema OpenAPI gerado (e por consequรชncia, dos sistemas de documentaรงรฃo automรกticos), utilize o parรขmetro `include_in_schema` e defina ele como `False`:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial003.py hl[6] *}
+
+## Descriรงรฃo avanรงada a partir de docstring
+
+Vocรช pode limitar as linhas utilizadas a partir de uma docstring de uma *funรงรฃo de operaรงรฃo de rota* para o OpenAPI.
+
+Adicionar um `\f` (um caractere de escape para alimentaรงรฃo de formulรกrio) faz com que o **FastAPI** restrinja a saรญda utilizada pelo OpenAPI atรฉ esse ponto.
+
+Ele nรฃo serรก mostrado na documentaรงรฃo, mas outras ferramentas (como o Sphinx) serรฃo capazes de utilizar o resto do texto.
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial004.py hl[19:29] *}
+
+## Respostas Adicionais
+
+Vocรช provavelmente jรก viu como declarar o `response_model` e `status_code` para uma *operaรงรฃo de rota*.
+
+Isso define os metadados sobre a resposta principal da *operaรงรฃo de rota*.
+
+Vocรช tambรฉm pode declarar respostas adicionais, com seus modelos, cรณdigos de status, etc.
+
+Existe um capรญtulo inteiro da nossa documentaรงรฃo sobre isso, vocรช pode ler em [Retornos Adicionais no OpenAPI](additional-responses.md){.internal-link target=_blank}.
+
+## Extras do OpenAPI
+
+Quando vocรช declara uma *operaรงรฃo de rota* na sua aplicaรงรฃo, o **FastAPI** irรก gerar os metadados relevantes da *operaรงรฃo de rota* automaticamente para serem incluรญdos no esquema do OpenAPI.
+
+/// note | Nota
+
+Na especificaรงรฃo do OpenAPI, isso รฉ chamado de um Objeto de Operaรงรฃo.
+
+///
+
+Ele possui toda a informaรงรฃo sobre a *operaรงรฃo de rota* e รฉ usado para gerar a documentaรงรฃo automaticamente.
+
+Ele inclui os atributos `tags`, `parameters`, `requestBody`, `responses`, etc.
+
+Esse esquema especรญfico para uma *operaรงรฃo de rota* normalmente รฉ gerado automaticamente pelo **FastAPI**, mas vocรช tambรฉm pode estender ele.
+
+/// tip | Dica
+
+Esse รฉ um ponto de extensรฃo de baixo nรญvel.
+
+Caso vocรช sรณ precise declarar respostas adicionais, uma forma conveniente de fazer isso รฉ com [Retornos Adicionais no OpenAPI](additional-responses.md){.internal-link target=_blank}.
+
+///
+
+Vocรช pode estender o esquema do OpenAPI para uma *operaรงรฃo de rota* utilizando o parรขmetro `openapi_extra`.
+
+### Extensรตes do OpenAPI
+
+Esse parรขmetro `openapi_extra` pode ser รบtil, por exemplo, para declarar [Extensรตes do OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions):
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial005.py hl[6] *}
+
+Se vocรช abrir os documentos criados automaticamente para a API, sua extensรฃo aparecerรก no final da *operaรงรฃo de rota* especรญfica.
+
+
+
+E se vocรช olhar o esquema OpenAPI resultante (na rota `/openapi.json` da sua API), vocรช verรก que a sua extensรฃo tambรฉm faz parte da *operaรงรฃo de rota* especรญfica:
+
+```JSON hl_lines="22"
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "FastAPI",
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/items/": {
+ "get": {
+ "summary": "Read Items",
+ "operationId": "read_items_items__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ },
+ "x-aperture-labs-portal": "blue"
+ }
+ }
+ }
+}
+```
+
+### Esquema de *operaรงรฃo de rota* do OpenAPI personalizado
+
+O dicionรกrio em `openapi_extra` vai ter todos os seus nรญveis mesclados dentro do esquema OpenAPI gerado automaticamente para a *operaรงรฃo de rota*.
+
+Entรฃo, vocรช pode adicionar dados extras para o esquema gerado automaticamente.
+
+Por exemplo, vocรช poderia optar por ler e validar a requisiรงรฃo com seu prรณprio cรณdigo, sem utilizar funcionalidades automatizadas do FastAPI com o Pydantic, mas vocรช ainda pode quere definir a requisiรงรฃo no esquema OpenAPI.
+
+Vocรช pode fazer isso com `openapi_extra`:
+
+{* ../../docs_src/path_operation_advanced_configuration/tutorial006.py hl[19:36,39:40] *}
+
+Nesse exemplo, nรณs nรฃo declaramos nenhum modelo do Pydantic. Na verdade, o corpo da requisiรงรฃo nรฃo estรก nem mesmo analisado como JSON, ele รฉ lido diretamente como `bytes` e a funรงรฃo `magic_data_reader()` seria a responsรกvel por analisar ele de alguma forma.
+
+De toda forma, nรณs podemos declarar o esquema esperado para o corpo da requisiรงรฃo.
+
+### Tipo de conteรบdo do OpenAPI personalizado
+
+Utilizando esse mesmo truque, vocรช pode utilizar um modelo Pydantic para definir o esquema JSON que รฉ entรฃo incluรญdo na seรงรฃo do esquema personalizado do OpenAPI na *operaรงรฃo de rota*.
+
+E vocรช pode fazer isso atรฉ mesmo quando os dados da requisiรงรฃo nรฃo seguem o formato JSON.
+
+Por exemplo, nesta aplicaรงรฃo nรณs nรฃo usamos a funcionalidade integrada ao FastAPI de extrair o esquema JSON dos modelos Pydantic nem a validaรงรฃo automรกtica do JSON. Na verdade, estamos declarando o tipo do conteรบdo da requisiรงรฃo como YAML, em vez de JSON:
+
+//// tab | Pydantic v2
+
+```Python hl_lines="17-22 24"
+{!> ../../docs_src/path_operation_advanced_configuration/tutorial007.py!}
+```
+
+////
+
+//// tab | Pydantic v1
+
+```Python hl_lines="17-22 24"
+{!> ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py!}
+```
+
+////
+
+/// info | Informaรงรฃo
+
+Na versรฃo 1 do Pydantic, o mรฉtodo para obter o esquema JSON de um modelo รฉ `Item.schema()`, na versรฃo 2 do Pydantic, o mรฉtodo รฉ `Item.model_json_schema()`
+
+///
+
+Entretanto, mesmo que nรฃo utilizemos a funcionalidade integrada por padrรฃo, ainda estamos usando um modelo Pydantic para gerar um esquema JSON manualmente para os dados que queremos receber no formato YAML.
+
+Entรฃo utilizamos a requisiรงรฃo diretamente, e extraรญmos o corpo como `bytes`. Isso significa que o FastAPI nรฃo vai sequer tentar analisar o corpo da requisiรงรฃo como JSON.
+
+E entรฃo no nosso cรณdigo, nรณs analisamos o conteรบdo YAML diretamente, e estamos utilizando o mesmo modelo Pydantic para validar o conteรบdo YAML:
+
+//// tab | Pydantic v2
+
+```Python hl_lines="26-33"
+{!> ../../docs_src/path_operation_advanced_configuration/tutorial007.py!}
+```
+
+////
+
+//// tab | Pydantic v1
+
+```Python hl_lines="26-33"
+{!> ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py!}
+```
+
+////
+
+/// info | Informaรงรฃo
+
+Na versรฃo 1 do Pydantic, o mรฉtodo para analisar e validar um objeto era `Item.parse_obj()`, na versรฃo 2 do Pydantic, o mรฉtodo รฉ chamado de `Item.model_validate()`.
+
+///
+
+///tip | Dica
+
+Aqui reutilizamos o mesmo modelo do Pydantic.
+
+Mas da mesma forma, nรณs poderรญamos ter validado de alguma outra forma.
+
+///