]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Korean translation for `docs/ko/docs/tutorial/metadata.md` (#12541)
authorLKY <74170199+kwang1215@users.noreply.github.com>
Tue, 29 Oct 2024 10:36:06 +0000 (19:36 +0900)
committerGitHub <noreply@github.com>
Tue, 29 Oct 2024 10:36:06 +0000 (10:36 +0000)
docs/ko/docs/tutorial/metadata.md [new file with mode: 0644]

diff --git a/docs/ko/docs/tutorial/metadata.md b/docs/ko/docs/tutorial/metadata.md
new file mode 100644 (file)
index 0000000..8753115
--- /dev/null
@@ -0,0 +1,131 @@
+
+# λ©”타데이터 λ° λ¬Έμ„œν™” URL
+
+**FastAPI** μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ λ‹€μ–‘ν•œ λ©”타데이터 κ΅¬μ„±μ„ μ‚¬μš©μž λ§žμΆ€ μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+## API에 λŒ€ν•œ λ©”타데이터
+
+OpenAPI λͺ…μ„Έ λ° μžλ™ν™”λœ API λ¬Έμ„œ UI에 μ‚¬μš©λ˜λŠ” λ‹€μŒ ν•„λ“œλ₯Ό μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+| λ§€κ°œλ³€μˆ˜ | νƒ€μž… | μ„€λͺ… |
+|----------|------|-------|
+| `title` | `str` | API의 μ œλͺ©μž…λ‹ˆλ‹€. |
+| `summary` | `str` | API에 λŒ€ν•œ μ§§μ€ μš”μ•½μž…λ‹ˆλ‹€. <small>OpenAPI 3.1.0, FastAPI 0.99.0λΆ€ν„° μ‚¬μš© κ°€λŠ₯</small> |
+| `description` | `str` | API에 λŒ€ν•œ μ§§μ€ μ„€λͺ…μž…λ‹ˆλ‹€. λ§ˆν¬λ‹€μš΄μ„ μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. |
+| `version` | `string` | API의 λ²„μ „μž…λ‹ˆλ‹€. OpenAPI의 λ²„전이 μ•„λ‹Œ, μ—¬λŸ¬λΆ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ²„전을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ˜ˆ: `2.5.0` |
+| `terms_of_service` | `str` | API μ΄μš© μ•½κ΄€μ˜ URLμž…λ‹ˆλ‹€. μ œκ³΅ν•˜λŠ” κ²½μš° URL ν˜•식이어야 ν•©λ‹ˆλ‹€. |
+| `contact` | `dict` | λ…ΈμΆœλœ API에 λŒ€ν•œ μ—°λ½μ²˜ μ •λ³΄μž…λ‹ˆλ‹€. μ—¬λŸ¬ ν•„λ“œλ₯Ό ν¬ν•¨ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. <details><summary><code>contact</code> ν•„λ“œ</summary><table><thead><tr><th>λ§€κ°œλ³€μˆ˜</th><th>νƒ€μž…</th><th>μ„€λͺ…</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>μ—°λ½μ²˜ μΈλ¬Ό/쑰직의 μ‹λ³„λͺ…μž…λ‹ˆλ‹€.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>μ—°λ½μ²˜ μ •보가 λ‹΄κΈ΄ URLμž…λ‹ˆλ‹€. URL ν˜•식이어야 ν•©λ‹ˆλ‹€.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>μ—°λ½μ²˜ μΈλ¬Ό/쑰직의 μ΄λ©”일 μ£Όμ†Œμž…λ‹ˆλ‹€. μ΄λ©”일 μ£Όμ†Œ ν˜•식이어야 ν•©λ‹ˆλ‹€.</td></tr></tbody></table></details> |
+| `license_info` | `dict` | λ…ΈμΆœλœ API의 λΌμ΄μ„ μŠ€ μ •λ³΄μž…λ‹ˆλ‹€. μ—¬λŸ¬ ν•„λ“œλ₯Ό ν¬ν•¨ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. <details><summary><code>license_info</code> ν•„λ“œ</summary><table><thead><tr><th>λ§€κ°œλ³€μˆ˜</th><th>νƒ€μž…</th><th>μ„€λͺ…</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>ν•„μˆ˜</strong> (<code>license_info</code>κ°€ μ„€μ •λœ κ²½μš°). API에 μ‚¬μš©λœ λΌμ΄μ„ μŠ€ μ΄λ¦„μž…λ‹ˆλ‹€.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>API에 λŒ€ν•œ <a href="https://spdx.org/licenses/" class="external-link" target="_blank">SPDX</a> λΌμ΄μ„ μŠ€ ν‘œν˜„μž…λ‹ˆλ‹€. <code>identifier</code> ν•„λ“œλŠ” <code>url</code> ν•„λ“œμ™€ μƒν˜Έ λ°°νƒ€μ μž…λ‹ˆλ‹€. <small>OpenAPI 3.1.0, FastAPI 0.99.0λΆ€ν„° μ‚¬μš© κ°€λŠ₯</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>API에 μ‚¬μš©λœ λΌμ΄μ„ μŠ€μ˜ URLμž…λ‹ˆλ‹€. URL ν˜•식이어야 ν•©λ‹ˆλ‹€.</td></tr></tbody></table></details> |
+
+λ‹€μŒκ³Ό κ°™μ΄ μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```Python hl_lines="3-16  19-32"
+{!../../docs_src/metadata/tutorial001.py!}
+```
+
+/// tip
+
+`description` ν•„λ“œμ— λ§ˆν¬λ‹€μš΄μ„ μ‚¬μš©ν•  μˆ˜ μžˆμœΌλ©°, μΆœλ ₯μ—μ„œ λ Œλ”λ§λ©λ‹ˆλ‹€.
+
+///
+
+이 κ΅¬μ„±μ„ μ‚¬μš©ν•˜λ©΄ λ¬Έμ„œ μžλ™ν™”(둜 μƒμ„±λœ) API λ¬Έμ„œλŠ” λ‹€μŒκ³Ό κ°™μ΄ λ³΄μž…λ‹ˆλ‹€:
+
+<img src="/img/tutorial/metadata/image01.png">
+
+## λΌμ΄μ„ μŠ€ μ‹λ³„μž
+
+OpenAPI 3.1.0 λ° FastAPI 0.99.0λΆ€ν„° `license_info`에 `identifier`λ₯Ό URL λŒ€μ‹  μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+예:
+
+```Python hl_lines="31"
+{!../../docs_src/metadata/tutorial001_1.py!}
+```
+
+## νƒœκ·Έμ— λŒ€ν•œ λ©”타데이터
+
+`openapi_tags` λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ²½λ‘œ μž‘동을 κ·Έλ£Ήν™”ν•˜λŠ” λ° μ‚¬μš©λ˜λŠ” νƒœκ·Έμ— μΆ”κ°€ λ©”타데이터λ₯Ό μΆ”κ°€ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+λ¦¬μŠ€νŠΈλŠ” κ° νƒœκ·Έμ— λŒ€ν•΄ ν•˜λ‚˜μ˜ λ”•μ…”λ„ˆλ¦¬λ₯Ό ν¬ν•¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.
+
+각 λ”•μ…”λ„ˆλ¦¬μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+* `name` (**ν•„μˆ˜**): `tags` λ§€κ°œλ³€μˆ˜μ—μ„œ *경둜 μž‘동*κ³Ό `APIRouter`에 μ‚¬μš©λœ νƒœκ·Έ μ΄λ¦„κ³Ό λ™μΌν•œ `str`μž…λ‹ˆλ‹€.
+* `description`: νƒœκ·Έμ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…을 λ‹΄μ€ `str`μž…λ‹ˆλ‹€. λ§ˆν¬λ‹€μš΄μ„ μ‚¬μš©ν•  μˆ˜ μžˆμœΌλ©° λ¬Έμ„œ UI에 ν‘œμ‹œλ©λ‹ˆλ‹€.
+* `externalDocs`: μ™ΈλΆ€ λ¬Έμ„œλ₯Ό μ„€λͺ…ν•˜λŠ” `dict`이며:
+    * `description`: μ™ΈλΆ€ λ¬Έμ„œμ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…을 λ‹΄μ€ `str`μž…λ‹ˆλ‹€.
+    * `url` (**ν•„μˆ˜**): μ™ΈλΆ€ λ¬Έμ„œμ˜ URL을 λ‹΄μ€ `str`μž…λ‹ˆλ‹€.
+
+### νƒœκ·Έμ— λŒ€ν•œ λ©”타데이터 μƒμ„±
+
+`users` λ° `items`에 λŒ€ν•œ νƒœκ·Έ μ˜ˆμ‹œμ™€ ν•¨κ»˜ λ©”타데이터λ₯Ό μƒμ„±ν•˜κ³  μ΄λ₯Ό `openapi_tags` λ§€κ°œλ³€μˆ˜λ‘œ μ „달해 λ³΄κ² μŠ΅λ‹ˆλ‹€:
+
+```Python hl_lines="3-16  18"
+{!../../docs_src/metadata/tutorial004.py!}
+```
+
+μ„€λͺ… μ•ˆμ— λ§ˆν¬λ‹€μš΄μ„ μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄ "login"은 κ΅΅κ²Œ(**login**) ν‘œμ‹œλ˜κ³ , "fancy"λŠ” κΈ°μšΈμž„κΌ΄(_fancy_)둜 ν‘œμ‹œλ©λ‹ˆλ‹€.
+
+/// tip
+
+μ‚¬μš© μ€‘인 λͺ¨λ“  νƒœκ·Έμ— λ©”타데이터λ₯Ό μΆ”κ°€ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.
+
+///
+
+### νƒœκ·Έ μ‚¬μš©
+
+`tags` λ§€κ°œλ³€μˆ˜λ₯Ό *경둜 μž‘동* λ° `APIRouter`와 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ νƒœκ·Έμ— ν• λ‹Ήν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```Python hl_lines="21  26"
+{!../../docs_src/metadata/tutorial004.py!}
+```
+
+/// info
+
+νƒœκ·Έμ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [경둜 μž‘동 κ΅¬μ„±](path-operation-configuration.md#tags){.internal-link target=_blank}μ—μ„œ μ½μ–΄λ³΄μ„Έμš”.
+
+///
+
+### λ¬Έμ„œ ν™•인
+
+이제 λ¬Έμ„œλ₯Ό ν™•μΈν•˜λ©΄ λͺ¨λ“  μΆ”κ°€ λ©”타데이터가 ν‘œμ‹œλ©λ‹ˆλ‹€:
+
+<img src="/img/tutorial/metadata/image02.png">
+
+### νƒœκ·Έ μˆœμ„œ
+
+각 νƒœκ·Έ λ©”타데이터 λ”•μ…”λ„ˆλ¦¬μ˜ μˆœμ„œλŠ” λ¬Έμ„œ UI에 ν‘œμ‹œλ˜λŠ” μˆœμ„œλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
+
+예λ₯Ό λ“€μ–΄, μ•ŒνŒŒλ²³ μˆœμ„œμƒ `users`λŠ” `items` λ’€μ— μ˜€μ§€λ§Œ, μš°λ¦¬λŠ” `users` λ©”타데이터λ₯Ό λ¦¬μŠ€νŠΈμ˜ μ²« λ²ˆμ§Έ λ”•μ…”λ„ˆλ¦¬λ‘œ μΆ”κ°€ν–ˆκΈ° λ•Œλ¬Έμ— λ¨Όμ € ν‘œμ‹œλ©λ‹ˆλ‹€.
+
+## OpenAPI URL
+
+OpenAPI κ΅¬μ‘°λŠ” κΈ°λ³Έμ μœΌλ‘œ  `/openapi.json`μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.
+
+`openapi_url` λ§€κ°œλ³€μˆ˜λ₯Ό ν†΅ν•΄ μ΄λ₯Ό μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+예λ₯Ό λ“€μ–΄, μ΄λ₯Ό `/api/v1/openapi.json`에 μ œκ³΅ν•˜λ„둝 μ„€μ •ν•˜λ €λ©΄:
+
+```Python hl_lines="3"
+{!../../docs_src/metadata/tutorial002.py!}
+```
+
+OpenAPI κ΅¬μ‘°λ₯Ό μ™„μ „νžˆ λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄ `openapi_url=None`으둜 μ„€μ •ν•  μˆ˜ μžˆμœΌλ©°, μ΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμ„œν™” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ„ λΉ„ν™œμ„±ν™”λ©λ‹ˆλ‹€.
+
+## λ¬Έμ„œν™” URL
+
+ν¬ν•¨λœ λ‘ κ°€μ§€ λ¬Έμ„œν™” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+* **Swagger UI**: `/docs`μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.
+    * `docs_url` λ§€κ°œλ³€μˆ˜λ‘œ URL을 μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+    * `docs_url=None`으둜 μ„€μ •ν•˜μ—¬ λΉ„ν™œμ„±ν™”ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+* **ReDoc**: `/redoc`μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€.
+    * `redoc_url` λ§€κ°œλ³€μˆ˜λ‘œ URL을 μ„€μ •ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+    * `redoc_url=None`으둜 μ„€μ •ν•˜μ—¬ λΉ„ν™œμ„±ν™”ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+예λ₯Ό λ“€μ–΄, Swagger UIλ₯Ό `/documentation`μ—μ„œ μ œκ³΅ν•˜κ³  ReDoc을 λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄:
+
+```Python hl_lines="3"
+{!../../docs_src/metadata/tutorial003.py!}
+```