]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Korean translation for Tutorial - First Steps (#2323)
authorSpike <rurouni24@gmail.com>
Sat, 27 Mar 2021 17:29:45 +0000 (02:29 +0900)
committerGitHub <noreply@github.com>
Sat, 27 Mar 2021 17:29:45 +0000 (18:29 +0100)
Co-authored-by: Dahun Jeong <gnsgnsek@gmail.com>
Co-authored-by: SebastiΓ‘n RamΓ­rez <tiangolo@gmail.com>
docs/ko/docs/tutorial/first-steps.md [new file with mode: 0644]
docs/ko/mkdocs.yml

diff --git a/docs/ko/docs/tutorial/first-steps.md b/docs/ko/docs/tutorial/first-steps.md
new file mode 100644 (file)
index 0000000..a669cb2
--- /dev/null
@@ -0,0 +1,333 @@
+# μ²«κ±ΈμŒ
+
+κ°€μž₯ λ‹¨μˆœν•œ FastAPI νŒŒμΌμ€ λ‹€μŒκ³Ό κ°™μ΄ λ³΄μΌ κ²λ‹ˆλ‹€:
+
+```Python
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+μœ„λ₯Ό `main.py`에 λ³΅μ‚¬ν•©λ‹ˆλ‹€.
+
+라이브 μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+<span style="color: green;">INFO</span>:     Started reloader process [28720]
+<span style="color: green;">INFO</span>:     Started server process [28722]
+<span style="color: green;">INFO</span>:     Waiting for application startup.
+<span style="color: green;">INFO</span>:     Application startup complete.
+```
+
+</div>
+
+!!! note "μ°Έκ³ "
+    `uvicorn main:app` λͺ…령은 λ‹€μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€:
+
+    * `main`: νŒŒμΌ `main.py` (파이썬 "λͺ¨λ“ˆ").
+    * `app`: `main.py` λ‚΄λΆ€μ˜ `app = FastAPI()` μ€„μ—μ„œ μƒμ„±ν•œ μ˜€λΈŒμ νŠΈ.
+    * `--reload`: μ½”λ“œ λ³€κ²½ ν›„ μ„œλ²„ μž¬μ‹œμž‘. κ°œλ°œμ—λ§Œ μ‚¬μš©.
+
+좜λ ₯에 μ•„λž˜μ™€ κ°™μ€ μ€„이 μžˆμŠ΅λ‹ˆλ‹€:
+
+```hl_lines="4"
+INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+ν•΄λ‹Ή μ€„은 λ‘œμ»¬μ—μ„œ μ•±μ΄ μ„œλΉ„μŠ€λ˜λŠ” URL을 λ³΄μ—¬μ€λ‹ˆλ‹€.
+
+### ν™•μΈν•˜κΈ°
+
+λΈŒλΌμš°μ €λ‘œ <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>λ₯Ό μ—¬μ„Έμš”.
+
+μ•„λž˜μ™€ κ°™μ€ JSON μ‘닡을 λ³Ό μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```JSON
+{"message": "Hello World"}
+```
+
+### λŒ€ν™”ν˜• API λ¬Έμ„œ
+
+이제 <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>둜 κ°€λ΄…λ‹ˆλ‹€.
+
+μžλ™ λŒ€ν™”ν˜• API λ¬Έμ„œλ₯Ό λ³Ό μˆ˜ μžˆμŠ΅λ‹ˆλ‹€ (<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> μ œκ³΅):
+
+![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
+
+### λŒ€μ•ˆ API λ¬Έμ„œ
+
+그리고 μ΄μ œ, <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>둜 κ°€λ΄…λ‹ˆλ‹€.
+
+λŒ€μ•ˆ μžλ™ λ¬Έμ„œλ₯Ό λ³Ό μˆ˜ μžˆμŠ΅λ‹ˆλ‹€ (<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> μ œκ³΅):
+
+![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
+
+### OpenAPI
+
+**FastAPI**λŠ” APIλ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ **OpenAPI** ν‘œμ€€μ„ μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬λΆ„μ˜ λͺ¨λ“  APIλ₯Ό μ΄μš©ν•΄ "μŠ€ν‚€λ§ˆ"λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
+
+#### "μŠ€ν‚€λ§ˆ"
+
+"μŠ€ν‚€λ§ˆ"λŠ” λ¬΄μ–Έκ°€μ˜ μ •μ˜ λ˜λŠ” μ„€λͺ…μž…λ‹ˆλ‹€. μ΄λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ½”λ“œκ°€ μ•„λ‹ˆλΌ μΆ”상적인 μ„€λͺ…일 λΏμž…λ‹ˆλ‹€.
+
+#### API "μŠ€ν‚€λ§ˆ"
+
+이 κ²½μš°, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a>λŠ” API의 μŠ€ν‚€λ§ˆλ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν•˜λŠ”μ§€ μ§€μ‹œν•˜λŠ” κ·œκ²©μž…λ‹ˆλ‹€.
+
+이 μŠ€ν‚€λ§ˆ μ •μ˜λŠ” API κ²½λ‘œ, κ°€λŠ₯ν•œ λ§€κ°œλ³€μˆ˜ λ“±μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
+
+#### λ°μ΄ν„° "μŠ€ν‚€λ§ˆ"
+
+"μŠ€ν‚€λ§ˆ"λΌλŠ” μš©μ–΄λŠ” JSON처럼 μ–΄λ–€ λ°μ΄ν„°μ˜ ν˜•νƒœλ₯Ό λ‚˜νƒ€λ‚Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
+
+μ΄λŸ¬ν•œ κ²½μš° JSON μ†μ„±, κ°€μ§€κ³  μžˆλŠ” λ°μ΄ν„° νƒ€μž… λ“±μ„ λœ»ν•©λ‹ˆλ‹€.
+
+#### OpenAPI와 JSON μŠ€ν‚€λ§ˆ
+
+OpenAPIλŠ” API에 λŒ€ν•œ API μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. λ˜ν•œ μ΄ μŠ€ν‚€λ§ˆμ—λŠ” JSON λ°μ΄ν„° μŠ€ν‚€λ§ˆμ˜ ν‘œμ€€μΈ **JSON μŠ€ν‚€λ§ˆ**λ₯Ό μ‚¬μš©ν•˜μ—¬ APIμ—μ„œ λ³΄λ‚΄κ³  λ°›μ€ λ°μ΄ν„°μ˜ μ •μ˜(λ˜λŠ” "μŠ€ν‚€λ§ˆ")λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
+
+#### `openapi.json` ν™•인
+
+κ°€κ³΅λ˜μ§€ μ•Šμ€ OpenAPI μŠ€ν‚€λ§ˆκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ κΆκΈˆν•˜λ‹€λ©΄, FastAPIλŠ” μžλ™μœΌλ‘œ API의 μ„€λͺ…κ³Ό ν•¨κ»˜ JSON (μŠ€ν‚€λ§ˆ)λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
+
+μ—¬κΈ°μ—μ„œ μ§μ ‘ λ³Ό μˆ˜ μžˆμŠ΅λ‹ˆλ‹€: <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.
+
+λ‹€μŒκ³Ό κ°™μ΄ μ‹œμž‘ν•˜λŠ” JSON을 ν™•인할 μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```JSON
+{
+    "openapi": "3.0.2",
+    "info": {
+        "title": "FastAPI",
+        "version": "0.1.0"
+    },
+    "paths": {
+        "/items/": {
+            "get": {
+                "responses": {
+                    "200": {
+                        "description": "Successful Response",
+                        "content": {
+                            "application/json": {
+
+
+
+...
+```
+
+#### OpenAPI의 μš©λ„
+
+OpenAPI μŠ€ν‚€λ§ˆλŠ” ν¬ν•¨λœ λ‘ κ°œμ˜ λŒ€ν™”ν˜• λ¬Έμ„œ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€.
+
+그리고 OpenAPI의 λͺ¨λ“  κ²ƒμ„ κΈ°λ°˜μœΌλ‘œ ν•˜λŠ” μˆ˜μ‹­ κ°€μ§€ λŒ€μ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€. **FastAPI**둜 λΉŒλ“œν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ΄λŸ¬ν•œ λŒ€μ•ˆμ„ μ‰½κ²Œ μΆ”κ°€ ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+API와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•΄ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” λ°λ„ μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆλ‘œ ν”„λ‘ νŠΈμ—”λ“œ, λͺ¨λ°”일, IoT μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.
+
+## λ‹¨κ³„별 μš”μ•½
+
+### 1 λ‹¨κ³„: `FastAPI` μž„ν¬νŠΈ
+
+```Python hl_lines="1"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+`FastAPI`λŠ” API에 λŒ€ν•œ λͺ¨λ“  κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” νŒŒμ΄μ¬ ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
+
+!!! note "기술 μ„ΈλΆ€μ‚¬ν•­"
+    `FastAPI`λŠ” `Starlette`λ₯Ό μ§μ ‘ μƒμ†ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
+
+    `FastAPI`둜 <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a>의 λͺ¨λ“  κΈ°λŠ₯을 μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+### 2 λ‹¨κ³„: `FastAPI` "μΈμŠ€ν„΄μŠ€" μƒμ„±
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+μ—¬κΈ° μžˆλŠ” `app` λ³€μˆ˜λŠ” `FastAPI` ν΄λž˜μŠ€μ˜ "μΈμŠ€ν„΄μŠ€"κ°€ λ©λ‹ˆλ‹€.
+
+이것은 λͺ¨λ“  APIλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μƒν˜Έμž‘μš©μ˜ μ£Όμš” μ§€μ μ΄ λ  κ²ƒμž…λ‹ˆλ‹€.
+
+이 `app`은 λ‹€μŒ λͺ…λ Ήμ—μ„œ `uvicorn`이 μ°Έμ‘°ν•˜κ³  κ²ƒκ³Ό λ™μΌν•©λ‹ˆλ‹€:
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+μ•„λž˜μ²˜λŸΌ μ•±μ„ λ§Œλ“ λ‹€λ©΄:
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial002.py!}
+```
+
+이λ₯Ό `main.py` νŒŒμΌμ— λ„£κ³ , `uvicorn`을 μ•„λž˜μ²˜λŸΌ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€:
+
+<div class="termy">
+
+```console
+$ uvicorn main:my_awesome_api --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+### 3 λ‹¨κ³„: *경둜 λ™μž‘* μƒμ„±
+
+#### κ²½λ‘œ
+
+μ—¬κΈ°μ„œ "경둜"λŠ” μ²« λ²ˆμ§Έ `/`μ—μ„œ μ‹œμž‘ν•˜λŠ” URL의 λ§ˆμ§€λ§‰ λΆ€λΆ„을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
+
+κ·ΈλŸ¬λ―€λ‘œ μ•„λž˜μ™€ κ°™μ€ URLμ—μ„œ:
+
+```
+https://example.com/items/foo
+```
+
+...κ²½λ‘œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
+
+```
+/items/foo
+```
+
+!!! info "정보"
+    "경둜"λŠ” μΌλ°˜μ μœΌλ‘œ "μ•€λ“œν¬μΈνŠΈ" λ˜λŠ” "라우트"라고도 λΆˆλ¦½λ‹ˆλ‹€.
+
+APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ "경둜"λŠ” "관심사"와 "λ¦¬μ†ŒμŠ€"λ₯Ό λΆ„λ¦¬ν•˜λŠ” μ£Όμš” λ°©λ²•μž…λ‹ˆλ‹€.
+
+#### λ™μž‘
+
+μ—¬κΈ°μ„œ "λ™μž‘(Operation)"은 HTTP "λ©”μ†Œλ“œ" μ€‘ ν•˜λ‚˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
+
+λ‹€μŒ μ€‘ ν•˜λ‚˜μ΄λ©°:
+
+* `POST`
+* `GET`
+* `PUT`
+* `DELETE`
+
+...이ꡭ적인 κ²ƒλ“€λ„ μžˆμŠ΅λ‹ˆλ‹€:
+
+* `OPTIONS`
+* `HEAD`
+* `PATCH`
+* `TRACE`
+
+HTTP ν”„λ‘œν† μ½œμ—μ„œλŠ” μ΄λŸ¬ν•œ "λ©”μ†Œλ“œ"λ₯Ό ν•˜λ‚˜(λ˜λŠ” μ΄μƒ) μ‚¬μš©ν•˜μ—¬ κ° κ²½λ‘œμ™€ ν†΅μ‹ ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+---
+
+APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ μΌλ°˜μ μœΌλ‘œ νŠΉμ • ν–‰λ™μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ νŠΉμ • HTTP λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
+
+일반적으둜 λ‹€μŒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€:
+
+* `POST`: λ°μ΄ν„°λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄.
+* `GET`: λ°μ΄ν„°λ₯Ό μ½κΈ° μœ„ν•΄.
+* `PUT`: λ°μ΄ν„°λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄.
+* `DELETE`: λ°μ΄ν„°λ₯Ό μ‚­μ œν•˜κΈ° μœ„ν•΄.
+
+κ·Έλž˜μ„œ OpenAPIμ—μ„œλŠ” κ° HTTP λ©”μ†Œλ“œλ“€μ„ "λ™μž‘"이라 λΆ€λ¦…λ‹ˆλ‹€.
+
+μ΄μ œλΆ€ν„° μš°λ¦¬λŠ” λ©”μ†Œλ“œλ₯Ό "**λ™μž‘**"이라고도 λΆ€λ₯Όκ²λ‹ˆλ‹€.
+
+#### *경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°* μ •μ˜
+
+```Python hl_lines="6"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+`@app.get("/")`은 **FastAPI**μ—κ²Œ λ°”λ‘œ μ•„λž˜μ— μžˆλŠ” ν•¨μˆ˜κ°€ λ‹€μŒμœΌλ‘œ μ΄λ™ν•˜λŠ” μš”청을 μ²˜λ¦¬ν•œλ‹€λŠ” κ²ƒμ„ μ•Œλ €μ€λ‹ˆλ‹€.
+
+* κ²½λ‘œ `/`
+* <abbr title="HTTP GET λ©”μ†Œλ“œ"><code>get</code> λ™μž‘</abbr> μ‚¬μš©
+
+!!! info "`@decorator` μ •보"
+    μ΄ `@something` λ¬Έλ²•은 νŒŒμ΄μ¬μ—μ„œ "λ°μ½”λ ˆμ΄ν„°"라 λΆ€λ¦…λ‹ˆλ‹€.
+
+    ν•¨μˆ˜ λ§¨ μœ„에 λ†“μŠ΅λ‹ˆλ‹€. λ§ˆμΉ˜ μ˜ˆμœ μž₯μ‹μš©(Decorative) λͺ¨μžμ²˜λŸΌ(개인적으둜 μ΄ μš©μ–΄κ°€ μ—¬κΈ°μ„œ μœ λž˜ν•œκ±° κ°™μŠ΅λ‹ˆλ‹€).
+
+    "λ°μ½”λ ˆμ΄ν„°" μ•„λž˜ μžˆλŠ” ν•¨μˆ˜λ₯Ό λ°›κ³  κ·Έκ±Έ μ΄μš©ν•΄ λ¬΄μ–Έκ°€ ν•©λ‹ˆλ‹€.
+
+    μš°λ¦¬μ˜ κ²½μš°, μ΄ λ°μ½”λ ˆμ΄ν„°λŠ” **FastAPI**μ—κ²Œ μ•„λž˜ ν•¨μˆ˜κ°€ **경둜** `/`에 ν•΄λ‹Ήν•˜λŠ” `get` **λ™μž‘**ν•˜λΌκ³  μ•Œλ €μ€λ‹ˆλ‹€.
+
+    μ΄κ²ƒμ΄ "**경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°**"μž…λ‹ˆλ‹€.
+
+λ‹€λ₯Έ λ™μž‘도 μ“Έ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+
+이ꡭ적인 κ²ƒλ“€λ„ μžˆμŠ΅λ‹ˆλ‹€:
+
+* `@app.options()`
+* `@app.head()`
+* `@app.patch()`
+* `@app.trace()`
+
+!!! tip "팁"
+    κ° λ™μž‘(HTTP λ©”μ†Œλ“œ)을 μ›ν•˜λŠ” λŒ€λ‘œ μ‚¬μš©ν•΄λ„ λ©λ‹ˆλ‹€.
+
+    **FastAPI**λŠ” νŠΉμ • μ˜λ―Έλ₯Ό κ°•μ œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
+
+    μ—¬κΈ°μ„œ μ •λ³΄λŠ” μ§€μΉ¨μ„œμΌλΏ μš”ꡬ사항이 μ•„λ‹™λ‹ˆλ‹€.
+
+    μ˜ˆλ₯Ό λ“€μ–΄ GraphQL을 μ‚¬μš©ν• λ•Œ μΌλ°˜μ μœΌλ‘œ `POST` λ™μž‘λ§Œ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  ν–‰λ™μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
+
+### 4 λ‹¨κ³„: **경둜 λ™μž‘ ν•¨μˆ˜** μ •μ˜
+
+λ‹€μŒμ€ μš°λ¦¬μ˜ "**경둜 λ™μž‘ ν•¨μˆ˜**"μž…λ‹ˆλ‹€:
+
+* **경둜**: λŠ” `/`μž…λ‹ˆλ‹€.
+* **λ™μž‘**: μ€ `get`μž…λ‹ˆλ‹€.
+* **ν•¨μˆ˜**: λŠ” "λ°μ½”λ ˆμ΄ν„°" μ•„λž˜μ— μžˆλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€ (`@app.get("/")` μ•„λž˜).
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+이것은 νŒŒμ΄μ¬ ν•¨μˆ˜μž…λ‹ˆλ‹€.
+
+`GET` λ™μž‘을 μ‚¬μš©ν•˜μ—¬ URL "`/`"에 λŒ€ν•œ μš”청을 λ°›μ„ λ•Œλ§ˆλ‹€ **FastAPI**에 μ˜ν•΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.
+
+μœ„μ˜ κ²½μš° `async` ν•¨μˆ˜μž…λ‹ˆλ‹€.
+
+---
+
+`async def` λŒ€μ‹  μΌλ°˜ ν•¨μˆ˜λ‘œ μ •μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial003.py!}
+```
+
+!!! note μ°Έκ³ 
+    μ°¨μ΄μ μ„ λͺ¨λ₯΄κ² λ‹€λ©΄ [Async: *"In a hurry?"*](../async.md#in-a-hurry){.internal-link target=_blank}을 ν™•μΈν•˜μ„Έμš”.
+
+### 5 λ‹¨κ³„: μ½˜ν…μΈ  λ°˜ν™˜
+
+```Python hl_lines="8"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+`dict`, `list`, λ‹¨μΌκ°’을 κ°€μ§„ `str`, `int` λ“±μ„ λ°˜ν™˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+Pydantic λͺ¨λΈμ„ λ°˜ν™˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€(λ‚˜μ€‘μ— λ” μžμ„Ένžˆ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€).
+
+JSON으둜 μžλ™ λ³€ν™˜λ˜λŠ” κ°μ²΄λ“€κ³Ό λͺ¨λΈλ“€μ΄ λ§Žμ΄ μžˆμŠ΅λ‹ˆλ‹€(ORM λ“±μ„ ν¬ν•¨ν•΄μ„œμš”). κ°€μž₯ λ§ˆμŒμ— λ“œλŠ” κ²ƒμ„ μ‚¬μš©ν•˜μ„Έμš”, μ΄λ―Έ μ§€μ›λ˜κ³  μžˆμ„ κ²λ‹ˆλ‹€.
+
+## μš”μ•½
+
+* `FastAPI` μž„ν¬νŠΈ.
+* `app` μΈμŠ€ν„΄μŠ€ μƒμ„±.
+* (`@app.get("/")`처럼) **경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°** μž‘μ„±.
+* (μœ„μ— μžˆλŠ” `def root(): ...`처럼) **경둜 λ™μž‘ ν•¨μˆ˜** μž‘μ„±.
+* (`uvicorn main:app --reload`처럼) κ°œλ°œ μ„œλ²„ μ‹€ν–‰.
index 47c383db8f503f788fda6690c8a62fca1ee277d1..8c0731051330754cdaa34b512bcc262827e9a158 100644 (file)
@@ -52,6 +52,7 @@ nav:
   - zh: /zh/
 - μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ:
   - tutorial/index.md
+  - tutorial/first-steps.md
 markdown_extensions:
 - toc:
     permalink: true