Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌐 Update Korean translation for docs/ko/docs/tutorial/first-steps.md, docs/ko/docs/tutorial/index.md, docs/ko/docs/tutorial/path-params.md, and docs/ko/docs/tutorial/query-params.md #4218

Merged
merged 9 commits into from
Feb 2, 2024
90 changes: 45 additions & 45 deletions docs/ko/docs/tutorial/first-steps.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# 첫걸음

κ°€μž₯ λ‹¨μˆœν•œ FastAPI νŒŒμΌμ€ λ‹€μŒκ³Ό 같이 보일 κ²λ‹ˆλ‹€:
κ°€μž₯ λ‹¨μˆœν•œ FastAPI νŒŒμΌμ€ λ‹€μŒκ³Ό 같이 보일 κ²ƒμž…λ‹ˆλ‹€:

```Python
{!../../../docs_src/first_steps/tutorial001.py!}
```

μœ„λ₯Ό `main.py`에 λ³΅μ‚¬ν•©λ‹ˆλ‹€.
μœ„ μ½”λ“œλ₯Ό `main.py`에 λ³΅μ‚¬ν•©λ‹ˆλ‹€.

라이브 μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:

Expand All @@ -29,9 +29,9 @@ $ uvicorn main:app --reload

* `main`: 파일 `main.py` (파이썬 "λͺ¨λ“ˆ").
* `app`: `main.py` λ‚΄λΆ€μ˜ `app = FastAPI()` μ€„μ—μ„œ μƒμ„±ν•œ 였브젝트.
* `--reload`: μ½”λ“œ λ³€κ²½ ν›„ μ„œλ²„ μž¬μ‹œμž‘. κ°œλ°œμ—λ§Œ μ‚¬μš©.
* `--reload`: μ½”λ“œ λ³€κ²½ μ‹œ μžλ™μœΌλ‘œ μ„œλ²„ μž¬μ‹œμž‘. 개발 μ‹œμ—λ§Œ μ‚¬μš©.

좜λ ₯에 μ•„λž˜μ™€ 같은 쀄이 μžˆμŠ΅λ‹ˆλ‹€:
좜λ ₯λ˜λŠ” 쀄듀 μ€‘μ—λŠ” μ•„λž˜μ™€ 같은 λ‚΄μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€:

```hl_lines="4"
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
Expand Down Expand Up @@ -75,7 +75,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

#### API "μŠ€ν‚€λ§ˆ"

이 경우, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a>λŠ” API의 μŠ€ν‚€λ§ˆλ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν•˜λŠ”μ§€ μ§€μ‹œν•˜λŠ” κ·œκ²©μž…λ‹ˆλ‹€.
<a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a>λŠ” API의 μŠ€ν‚€λ§ˆλ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν•˜λŠ”μ§€ μ§€μ‹œν•˜λŠ” κ·œκ²©μž…λ‹ˆλ‹€.

이 μŠ€ν‚€λ§ˆ μ •μ˜λŠ” API 경둜, κ°€λŠ₯ν•œ λ§€κ°œλ³€μˆ˜ 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.

Expand All @@ -87,13 +87,13 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

#### OpenAPI와 JSON μŠ€ν‚€λ§ˆ

OpenAPIλŠ” API에 λŒ€ν•œ API μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. λ˜ν•œ 이 μŠ€ν‚€λ§ˆμ—λŠ” JSON 데이터 μŠ€ν‚€λ§ˆμ˜ ν‘œμ€€μΈ **JSON μŠ€ν‚€λ§ˆ**λ₯Ό μ‚¬μš©ν•˜μ—¬ APIμ—μ„œ 보내고 받은 λ°μ΄ν„°μ˜ μ •μ˜(λ˜λŠ” "μŠ€ν‚€λ§ˆ")λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
OpenAPIλŠ” λ‹Ήμ‹ μ˜ API에 λŒ€ν•œ API μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. λ˜ν•œ 이 μŠ€ν‚€λ§ˆλŠ” JSON 데이터 μŠ€ν‚€λ§ˆμ˜ ν‘œμ€€μΈ **JSON μŠ€ν‚€λ§ˆ**λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹Ήμ‹ μ˜ APIκ°€ 보내고 λ°›λŠ” λ°μ΄ν„°μ˜ μ •μ˜(λ˜λŠ” "μŠ€ν‚€λ§ˆ")λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

#### `openapi.json` 확인

κ°€κ³΅λ˜μ§€ μ•Šμ€ OpenAPI μŠ€ν‚€λ§ˆκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ κΆκΈˆν•˜λ‹€λ©΄, FastAPIλŠ” μžλ™μœΌλ‘œ API의 μ„€λͺ…κ³Ό ν•¨κ»˜ JSON (μŠ€ν‚€λ§ˆ)λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
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>.
κ°€κ³΅λ˜μ§€ μ•Šμ€ OpenAPI μŠ€ν‚€λ§ˆκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ κΆκΈˆν•˜λ‹€λ©΄, μ—¬κΈ°μ—μ„œ 직접 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€: <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을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

Expand Down Expand Up @@ -124,7 +124,7 @@ OpenAPI μŠ€ν‚€λ§ˆλŠ” ν¬ν•¨λœ 두 개의 λŒ€ν™”ν˜• λ¬Έμ„œ μ‹œμŠ€ν…œμ„ 제곡

그리고 OpenAPI의 λͺ¨λ“  것을 기반으둜 ν•˜λŠ” μˆ˜μ‹­ 가지 λŒ€μ•ˆμ΄ μžˆμŠ΅λ‹ˆλ‹€. **FastAPI**둜 λΉŒλ“œν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ΄λŸ¬ν•œ λŒ€μ•ˆμ„ μ‰½κ²Œ μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

API와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•΄ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” 데도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예둜 ν”„λ‘ νŠΈμ—”λ“œ, λͺ¨λ°”일, IoT μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.
API와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ(ν”„λ‘ νŠΈμ—”λ“œ, λͺ¨λ°”일, IoT μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ“±)λ₯Ό μœ„ν•΄ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” 데도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

## 단계별 μš”μ•½

Expand All @@ -134,7 +134,7 @@ API와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•΄ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜
{!../../../docs_src/first_steps/tutorial001.py!}
```

`FastAPI`λŠ” API에 λŒ€ν•œ λͺ¨λ“  κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 파이썬 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
`FastAPI`λŠ” λ‹Ήμ‹ μ˜ APIλ₯Ό μœ„ν•œ λͺ¨λ“  κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 파이썬 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

!!! note "기술 세뢀사항"
`FastAPI`λŠ” `Starlette`λ₯Ό 직접 μƒμ†ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
Expand All @@ -147,11 +147,11 @@ API와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•΄ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜
{!../../../docs_src/first_steps/tutorial001.py!}
```

μ—¬κΈ° μžˆλŠ” `app` λ³€μˆ˜λŠ” `FastAPI` 클래슀의 "μΈμŠ€ν„΄μŠ€"κ°€ λ©λ‹ˆλ‹€.
μ—¬κΈ°μ—μ„œ `app` λ³€μˆ˜λŠ” `FastAPI` 클래슀의 "μΈμŠ€ν„΄μŠ€"κ°€ λ©λ‹ˆλ‹€.

이것은 λͺ¨λ“  APIλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μƒν˜Έμž‘μš©μ˜ μ£Όμš” 지점이 될 κ²ƒμž…λ‹ˆλ‹€.
이것은 λ‹Ήμ‹ μ˜ λͺ¨λ“  APIλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μƒν˜Έμž‘μš©μ˜ μ£Όμš” 지점이 될 κ²ƒμž…λ‹ˆλ‹€.

이 `app`은 λ‹€μŒ λͺ…λ Ήμ—μ„œ `uvicorn`이 μ°Έμ‘°ν•˜κ³  것과 λ™μΌν•©λ‹ˆλ‹€:
이 `app`은 λ‹€μŒ λͺ…λ Ήμ—μ„œ `uvicorn`이 μ°Έμ‘°ν•˜κ³  μžˆλŠ” 것과 λ™μΌν•©λ‹ˆλ‹€:

<div class="termy">

Expand Down Expand Up @@ -181,11 +181,11 @@ $ uvicorn main:my_awesome_api --reload

</div>

### 3 단계: *경둜 λ™μž‘* 생성
### 3 단계: *경둜 μž‘λ™* 생성

#### 경둜

μ—¬κΈ°μ„œ "경둜"λŠ” 첫 번째 `/`μ—μ„œ μ‹œμž‘ν•˜λŠ” URL의 λ§ˆμ§€λ§‰ 뢀뢄을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
μ—¬κΈ°μ„œ "경둜"λŠ” 첫 번째 `/`λΆ€ν„° μ‹œμž‘ν•˜λŠ” URL의 뒷뢀뢄을 μ˜λ―Έν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ μ•„λž˜μ™€ 같은 URLμ—μ„œ:

Expand All @@ -200,13 +200,13 @@ https://example.com/items/foo
```

!!! info "정보"
"경둜"λŠ” 일반적으둜 "μ•€λ“œν¬μΈνŠΈ" λ˜λŠ” "라우트"라고도 λΆˆλ¦½λ‹ˆλ‹€.
"경둜"λŠ” 일반적으둜 "μ—”λ“œν¬μΈνŠΈ" λ˜λŠ” "라우트"라고도 λΆˆλ¦½λ‹ˆλ‹€.

APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ "경둜"λŠ” "관심사"와 "λ¦¬μ†ŒμŠ€"λ₯Ό λΆ„λ¦¬ν•˜λŠ” μ£Όμš” λ°©λ²•μž…λ‹ˆλ‹€.
APIλ₯Ό 섀계할 λ•Œ "경둜"λŠ” "관심사"와 "λ¦¬μ†ŒμŠ€"λ₯Ό λΆ„λ¦¬ν•˜κΈ° μœ„ν•œ μ£Όμš”ν•œ λ°©λ²•μž…λ‹ˆλ‹€.

#### λ™μž‘
#### μž‘λ™

μ—¬κΈ°μ„œ "λ™μž‘(Operation)"은 HTTP "λ©”μ†Œλ“œ" 쀑 ν•˜λ‚˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
"μž‘λ™(Operation)"은 HTTP "λ©”μ†Œλ“œ" 쀑 ν•˜λ‚˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

λ‹€μŒ 쀑 ν•˜λ‚˜μ΄λ©°:

Expand All @@ -215,7 +215,7 @@ APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ "경둜"λŠ” "관심사"와 "λ¦¬μ†ŒμŠ€"λ₯Ό λΆ„λ¦¬ν•˜
* `PUT`
* `DELETE`

...이ꡭ적인 것듀도 μžˆμŠ΅λ‹ˆλ‹€:
...ν”νžˆ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 것듀도 μžˆμŠ΅λ‹ˆλ‹€:

* `OPTIONS`
* `HEAD`
Expand All @@ -226,20 +226,20 @@ HTTP ν”„λ‘œν† μ½œμ—μ„œλŠ” μ΄λŸ¬ν•œ "λ©”μ†Œλ“œ"λ₯Ό ν•˜λ‚˜(λ˜λŠ” 이상) μ‚¬μš©

---

APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ 일반적으둜 νŠΉμ • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ νŠΉμ • HTTP λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
APIλ₯Ό 섀계할 λ•Œ 일반적으둜 νŠΉμ • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ νŠΉμ • HTTP λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

일반적으둜 λ‹€μŒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€:
일반적으둜 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

* `POST`: 데이터λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄.
* `GET`: 데이터λ₯Ό 읽기 μœ„ν•΄.
* `PUT`: 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄.
* `PUT`: 데이터λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•΄.
* `DELETE`: 데이터λ₯Ό μ‚­μ œν•˜κΈ° μœ„ν•΄.

κ·Έλž˜μ„œ OpenAPIμ—μ„œλŠ” 각 HTTP λ©”μ†Œλ“œλ“€μ„ "λ™μž‘"이라 λΆ€λ¦…λ‹ˆλ‹€.
κ·Έλž˜μ„œ OpenAPIμ—μ„œλŠ” 각 HTTP λ©”μ†Œλ“œλ“€μ„ "μž‘λ™"이라 λΆ€λ¦…λ‹ˆλ‹€.

μ΄μ œλΆ€ν„° μš°λ¦¬λŠ” λ©”μ†Œλ“œλ₯Ό "**λ™μž‘**"이라고도 λΆ€λ₯Όκ²λ‹ˆλ‹€.
우리 μ—­μ‹œ μ΄μ œλΆ€ν„° λ©”μ†Œλ“œλ₯Ό "**μž‘λ™**"이라고 λΆ€λ₯Ό κ²ƒμž…λ‹ˆλ‹€.

#### *경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°* μ •μ˜
#### *경둜 μž‘λ™ λ°μ½”λ ˆμ΄ν„°* μ •μ˜

```Python hl_lines="6"
{!../../../docs_src/first_steps/tutorial001.py!}
Expand All @@ -248,47 +248,47 @@ APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ 일반적으둜 νŠΉμ • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄
`@app.get("/")`은 **FastAPI**μ—κ²Œ λ°”λ‘œ μ•„λž˜μ— μžˆλŠ” ν•¨μˆ˜κ°€ λ‹€μŒμœΌλ‘œ μ΄λ™ν•˜λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€λŠ” 것을 μ•Œλ €μ€λ‹ˆλ‹€.

* 경둜 `/`
* <abbr title="HTTP GET λ©”μ†Œλ“œ"><code>get</code> λ™μž‘</abbr> μ‚¬μš©
* <abbr title="HTTP GET λ©”μ†Œλ“œ"><code>get</code> μž‘λ™</abbr> μ‚¬μš©

!!! info "`@decorator` 정보"
이 `@something` 문법은 νŒŒμ΄μ¬μ—μ„œ "λ°μ½”λ ˆμ΄ν„°"라 λΆ€λ¦…λ‹ˆλ‹€.

ν•¨μˆ˜ 맨 μœ„μ— λ†“μŠ΅λ‹ˆλ‹€. 마치 예쁜 μž₯μ‹μš©(Decorative) λͺ¨μžμ²˜λŸΌ(개인적으둜 이 μš©μ–΄κ°€ μ—¬κΈ°μ„œ μœ λž˜ν•œκ±° κ°™μŠ΅λ‹ˆλ‹€).
마치 예쁜 μž₯μ‹μš©(Decorative) λͺ¨μžμ²˜λŸΌ(개인적으둜 이 μš©μ–΄κ°€ μ—¬κΈ°μ„œ μœ λž˜ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€) ν•¨μˆ˜ 맨 μœ„μ— λ†“μŠ΅λ‹ˆλ‹€.

"λ°μ½”λ ˆμ΄ν„°" μ•„λž˜ μžˆλŠ” ν•¨μˆ˜λ₯Ό λ°›κ³  κ·Έκ±Έ μ΄μš©ν•΄ 무언가 ν•©λ‹ˆλ‹€.
"λ°μ½”λ ˆμ΄ν„°"λŠ” μ•„λž˜ μžˆλŠ” ν•¨μˆ˜λ₯Ό λ°›μ•„ κ·Έκ²ƒμœΌλ‘œ 무언가λ₯Ό ν•©λ‹ˆλ‹€.

우리의 경우, 이 λ°μ½”λ ˆμ΄ν„°λŠ” **FastAPI**μ—κ²Œ μ•„λž˜ ν•¨μˆ˜κ°€ **경둜** `/`에 ν•΄λ‹Ήν•˜λŠ” `get` **λ™μž‘**ν•˜λΌκ³  μ•Œλ €μ€λ‹ˆλ‹€.
우리의 경우, 이 λ°μ½”λ ˆμ΄ν„°λŠ” **FastAPI**μ—κ²Œ μ•„λž˜ ν•¨μˆ˜κ°€ **경둜** `/`의 `get` **μž‘λ™**에 ν•΄λ‹Ήν•œλ‹€κ³  μ•Œλ €μ€λ‹ˆλ‹€.

이것이 "**경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°**"μž…λ‹ˆλ‹€.
이것이 "**경둜 μž‘λ™ λ°μ½”λ ˆμ΄ν„°**"μž…λ‹ˆλ‹€.

λ‹€λ₯Έ λ™μž‘λ„ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€:
λ‹€λ₯Έ μž‘λ™λ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

* `@app.post()`
* `@app.put()`
* `@app.delete()`

이ꡭ적인 것듀도 μžˆμŠ΅λ‹ˆλ‹€:
ν”νžˆ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 것듀도 μžˆμŠ΅λ‹ˆλ‹€:

* `@app.options()`
* `@app.head()`
* `@app.patch()`
* `@app.trace()`

!!! tip "팁"
각 λ™μž‘(HTTP λ©”μ†Œλ“œ)을 μ›ν•˜λŠ” λŒ€λ‘œ μ‚¬μš©ν•΄λ„ λ©λ‹ˆλ‹€.
각 μž‘λ™(HTTP λ©”μ†Œλ“œ)을 μ›ν•˜λŠ” λŒ€λ‘œ μ‚¬μš©ν•΄λ„ λ©λ‹ˆλ‹€.

**FastAPI**λŠ” νŠΉμ • 의미λ₯Ό κ°•μ œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μ •λ³΄λŠ” μ§€μΉ¨μ„œμΌλΏ μš”κ΅¬μ‚¬ν•­μ΄ μ•„λ‹™λ‹ˆλ‹€.
μ—¬κΈ°μ„œ μ •λ³΄λŠ” μ§€μΉ¨μ„œμΌλΏ κ°•μ œμ‚¬ν•­μ΄ μ•„λ‹™λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ GraphQL을 μ‚¬μš©ν• λ•Œ 일반적으둜 `POST` λ™μž‘λ§Œ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  행동을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ GraphQL을 μ‚¬μš©ν•˜λŠ” 경우, 일반적으둜 `POST` μž‘λ™λ§Œ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  행동을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

### 4 단계: **경둜 λ™μž‘ ν•¨μˆ˜** μ •μ˜
### 4 단계: **경둜 μž‘λ™ ν•¨μˆ˜** μ •μ˜

λ‹€μŒμ€ 우리의 "**경둜 λ™μž‘ ν•¨μˆ˜**"μž…λ‹ˆλ‹€:
λ‹€μŒμ€ 우리의 "**경둜 μž‘λ™ ν•¨μˆ˜**"μž…λ‹ˆλ‹€:

* **경둜**: λŠ” `/`μž…λ‹ˆλ‹€.
* **λ™μž‘**: 은 `get`μž…λ‹ˆλ‹€.
* **μž‘λ™**: 은 `get`μž…λ‹ˆλ‹€.
* **ν•¨μˆ˜**: λŠ” "λ°μ½”λ ˆμ΄ν„°" μ•„λž˜μ— μžˆλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€ (`@app.get("/")` μ•„λž˜).

```Python hl_lines="7"
Expand All @@ -297,13 +297,13 @@ APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ 일반적으둜 νŠΉμ • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄

이것은 파이썬 ν•¨μˆ˜μž…λ‹ˆλ‹€.

`GET` λ™μž‘μ„ μ‚¬μš©ν•˜μ—¬ URL "`/`"에 λŒ€ν•œ μš”μ²­μ„ 받을 λ•Œλ§ˆλ‹€ **FastAPI**에 μ˜ν•΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.
URL "`/`"에 λŒ€ν•œ `GET` μž‘λ™μ„ μ‚¬μš©ν•˜λŠ” μš”μ²­μ„ 받을 λ•Œλ§ˆλ‹€ **FastAPI**에 μ˜ν•΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.

μœ„μ˜ 경우 `async` ν•¨μˆ˜μž…λ‹ˆλ‹€.
μœ„μ˜ μ˜ˆμ‹œμ—μ„œ 이 ν•¨μˆ˜λŠ” `async`(비동기) ν•¨μˆ˜μž…λ‹ˆλ‹€.

---

`async def` λŒ€μ‹  일반 ν•¨μˆ˜λ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
`async def`을 μ΄μš©ν•˜λŠ” λŒ€μ‹  일반 ν•¨μˆ˜λ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

```Python hl_lines="7"
{!../../../docs_src/first_steps/tutorial003.py!}
Expand All @@ -322,12 +322,12 @@ APIλ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆ 일반적으둜 νŠΉμ • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄

Pydantic λͺ¨λΈμ„ λ°˜ν™˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€(λ‚˜μ€‘μ— 더 μžμ„Ένžˆ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€).

JSON으둜 μžλ™ λ³€ν™˜λ˜λŠ” 객체듀과 λͺ¨λΈλ“€μ΄ 많이 μžˆμŠ΅λ‹ˆλ‹€(ORM 등을 ν¬ν•¨ν•΄μ„œμš”). κ°€μž₯ λ§ˆμŒμ— λ“œλŠ” 것을 μ‚¬μš©ν•˜μ„Έμš”, 이미 μ§€μ›λ˜κ³  μžˆμ„ κ²λ‹ˆλ‹€.
JSON으둜 μžλ™ λ³€ν™˜λ˜λŠ” 객체듀과 λͺ¨λΈλ“€(ORM 등을 ν¬ν•¨ν•΄μ„œ)이 많이 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ λ§ˆμŒμ— λ“œλŠ” 것을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€, 이미 μ§€μ›λ˜κ³  μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

## μš”μ•½

* `FastAPI` μž„ν¬νŠΈ.
* `app` μΈμŠ€ν„΄μŠ€ 생성.
* (`@app.get("/")`처럼) **경둜 λ™μž‘ λ°μ½”λ ˆμ΄ν„°** μž‘μ„±.
* (μœ„μ— μžˆλŠ” `def root(): ...`처럼) **경둜 λ™μž‘ ν•¨μˆ˜** μž‘μ„±.
* (`@app.get("/")`처럼) **경둜 μž‘λ™ λ°μ½”λ ˆμ΄ν„°** μž‘μ„±.
* (μœ„μ— μžˆλŠ” `def root(): ...`처럼) **경둜 μž‘λ™ ν•¨μˆ˜** μž‘μ„±.
* (`uvicorn main:app --reload`처럼) 개발 μ„œλ²„ μ‹€ν–‰.
27 changes: 14 additions & 13 deletions docs/ko/docs/tutorial/index.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ

이 μžμŠ΅μ„œλŠ” **FastAPI**의 λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯을 λ‹¨κ³„λ³„λ‘œ μ‚¬μš©ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.
이 μžμŠ΅μ„œλŠ” λ‹¨κ³„λ³„λ‘œ **FastAPI**의 λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

각 μ„Ήμ…˜μ€ 이전 μ„Ήμ…˜μ„ κΈ°λ°˜ν•΄μ„œ μ μ§„μ μœΌλ‘œ λ§Œλ“€μ–΄ μ‘Œμ§€λ§Œ, μ£Όμ œμ— 따라 λ‹€λ₯΄κ²Œ κ΅¬μ„±λ˜μ—ˆκΈ° λ•Œλ¬Έμ— νŠΉμ • API μš”κ΅¬μ‚¬ν•­μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλΌλ©΄ μ–΄λŠ νŠΉμ • ν•­λͺ©μœΌλ‘œλ˜μ§€ 직접 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.
각 μ„Ήμ…˜μ€ 이전 μ„Ήμ…˜μ— κΈ°λ°˜ν•˜λŠ” 순차적인 ꡬ쑰둜 μž‘μ„±λ˜μ—ˆμ§€λ§Œ, 각 주제둜 κ΅¬λΆ„λ˜μ–΄ 있기 λ•Œλ¬Έμ— ν•„μš”μ— 따라 νŠΉμ • μ„Ήμ…˜μœΌλ‘œ λ°”λ‘œ μ΄λ™ν•˜μ—¬ ν•„μš”ν•œ λ‚΄μš©μ„ λ°”λ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ ν–₯ν›„ μ°Έμ‘°κ°€ 될 수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.
λ˜ν•œ ν–₯후에도 μ°Έμ‘° 자료둜 쓰일 수 μžˆλ„λ‘ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ λ‹€μ‹œ λŒμ•„μ™€μ„œ μ •ν™•νžˆ ν•„μš”ν•œ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ―€λ‘œ ν•„μš”ν•  λ•Œμ— λ‹€μ‹œ λŒμ•„μ™€μ„œ μ›ν•˜λŠ” 것을 μ •ν™•νžˆ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

## μ½”λ“œ μ‹€ν–‰ν•˜κΈ°

λͺ¨λ“  μ½”λ“œ 블둝은 λ³΅μ‚¬ν•˜κ³  직접 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈν•œ 파이썬 νŒŒμΌμž…λ‹ˆλ‹€).
λͺ¨λ“  μ½”λ“œ 블둝은 λ³΅μ‚¬ν•˜μ—¬ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈλœ 파이썬 νŒŒμΌμž…λ‹ˆλ‹€).

예제λ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ μ½”λ“œλ₯Ό `main.py` νŒŒμΌμ— λ³΅μ‚¬ν•˜κ³  λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ `uvicorn`을 μ‹œμž‘ν•©λ‹ˆλ‹€:

Expand All @@ -28,17 +28,18 @@ $ uvicorn main:app --reload

</div>

μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ 볡사, νŽΈμ§‘ν•  λ•Œ, λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λŠ” 것을 **κ°•λ ₯히 μž₯λ €**ν•©λ‹ˆλ‹€.
μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ 볡사, νŽΈμ§‘ν•  λ•Œ, 둜컬 ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•˜λŠ” 것을 **κ°•λ ₯히 ꢌμž₯**ν•©λ‹ˆλ‹€.

둜컬 νŽΈμ§‘κΈ°μ—μ„œ μ‚¬μš©ν•œλ‹€λ©΄, λͺ¨λ“  νƒ€μž… 검사와 μžλ™μ™„μ„± λ“± μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ½”λ“œκ°€ μ–Όλ§ˆλ‚˜ 적은지 λ³΄λ©΄μ„œ FastAPI의 λΉ„λ‘œμ†Œ κ²½ν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘κΈ°μ—μ„œ μ΄λ ‡κ²Œ μ‚¬μš©ν•œλ‹€λ©΄, λͺ¨λ“  νƒ€μž… 검사와 μžλ™μ™„μ„± λ“± μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ½”λ“œκ°€ μ–Όλ§ˆλ‚˜ 적은지 λ³΄λ©΄μ„œ FastAPI의 μž₯점을 μ‹€μ œλ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

---

## FastAPI μ„€μΉ˜

첫 번째 λ‹¨κ³„λŠ” FastAPI μ„€μΉ˜μž…λ‹ˆλ‹€.
첫 번째 λ‹¨κ³„λŠ” FastAPIλ₯Ό μ„€μΉ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μžμŠ΅μ‹œμ—λŠ” λͺ¨λ“  선택적인 μ˜μ‘΄μ„± 및 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
μžμŠ΅μ‹œμ—λŠ” λͺ¨λ“  선택적인 μ˜μ‘΄μ„± 및 κΈ°λŠ₯을 ν•¨κ»˜ μ„€μΉ˜ν•˜λŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€:

<div class="termy">

Expand All @@ -50,7 +51,7 @@ $ pip install "fastapi[all]"

</div>

...μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” μ„œλ²„λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” `uvicorn` μ—­μ‹œ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
...μ΄λŠ” μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” μ„œλ²„λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” `uvicorn` λ˜ν•œ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

!!! note "μ°Έκ³ "
λΆ€λΆ„μ μœΌλ‘œ μ„€μΉ˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
Expand All @@ -73,8 +74,8 @@ $ pip install "fastapi[all]"

이 **μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ** λ‹€μŒμ— 읽을 수 μžˆλŠ” **κ³ κΈ‰ μ‚¬μš©μž μ•ˆλ‚΄μ„œ**도 μžˆμŠ΅λ‹ˆλ‹€.

**κ³ κΈ‰ μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λŠ” ν˜„μž¬ λ¬Έμ„œλ₯Ό 기반으둜 ν•˜κ³ , λ™μΌν•œ κ°œλ…μ„ μ‚¬μš©ν•˜λ©°, μΆ”κ°€ κΈ°λŠ₯듀을 μ•Œλ €μ€λ‹ˆλ‹€.
**κ³ κΈ‰ μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λŠ” ν˜„μž¬ λ¬Έμ„œλ₯Ό 기반으둜 ν•˜κ³ , λ™μΌν•œ κ°œλ…μ„ μ‚¬μš©ν•˜λ©°, 좔가적인 κΈ°λŠ₯듀에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ (μ§€κΈˆ 읽고 μžˆλŠ”) **μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λ₯Ό λ¨Όμ € μ½λŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ (μ§€κΈˆ 읽고 μžˆλŠ”) **μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λ₯Ό λ¨Όμ € μ½λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

**μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λ§ŒμœΌλ‘œλ„ μ™„μ „ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ좕할 수 있으며, ν•„μš”μ— 따라 **κ³ κΈ‰ μ‚¬μš©μž μ•ˆλ‚΄μ„œ**μ—μ„œ μ œκ³΅ν•˜λŠ” λͺ‡ 가지 좔가적인 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ ν™•μž₯ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
**μžμŠ΅μ„œ - μ‚¬μš©μž μ•ˆλ‚΄μ„œ**λ§ŒμœΌλ‘œλ„ μ™„μ „ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ좕할 수 μžˆλ„λ‘ μž‘μ„±λ˜μ—ˆμœΌλ©°, ν•„μš”μ— 따라 **κ³ κΈ‰ μ‚¬μš©μž μ•ˆλ‚΄μ„œ**의 좔가적인 아이디어λ₯Ό μ μš©ν•˜μ—¬ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.