Skip to content

Commit

Permalink
🌐 Update Korean translation for `docs/ko/docs/tutorial/first-steps.md…
Browse files Browse the repository at this point in the history
…`, `docs/ko/docs/tutorial/index.md`, `docs/ko/docs/tutorial/path-params.md`, and `docs/ko/docs/tutorial/query-params.md` (#4218)
  • Loading branch information
SnowSuno authored Feb 2, 2024
1 parent 6f6e786 commit d254e2f
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 103 deletions.
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]"

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

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

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

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

0 comments on commit d254e2f

Please sign in to comment.