--- /dev/null
+
+# λ©νλ°μ΄ν° λ° λ¬Έμν 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!}
+```