11# 첫걸μ
22
3- κ°μ₯ λ¨μν FastAPI νμΌμ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²λλ€ :
3+ κ°μ₯ λ¨μν FastAPI νμΌμ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²μ
λλ€ :
44
55``` Python
66{!../ ../ ../ docs_src/ first_steps/ tutorial001.py!}
77```
88
9- μλ₯Ό ` main.py ` μ 볡μ¬ν©λλ€.
9+ μ μ½λλ₯Ό ` main.py ` μ 볡μ¬ν©λλ€.
1010
1111λΌμ΄λΈ μλ²λ₯Ό μ€νν©λλ€:
1212
@@ -29,9 +29,9 @@ $ uvicorn main:app --reload
2929
3030 * `main`: νμΌ `main.py` (νμ΄μ¬ "λͺ¨λ").
3131 * `app`: `main.py` λ΄λΆμ `app = FastAPI()` μ€μμ μμ±ν μ€λΈμ νΈ.
32- * `--reload`: μ½λ λ³κ²½ ν μλ² μ¬μμ. κ°λ°μλ§ μ¬μ©.
32+ * `--reload`: μ½λ λ³κ²½ μ μλμΌλ‘ μλ² μ¬μμ. κ°λ° μμλ§ μ¬μ©.
3333
34- μΆλ ₯μ μλμ κ°μ μ€μ΄ μμ΅λλ€:
34+ μΆλ ₯λλ μ€λ€ μ€μλ μλμ κ°μ λ΄μ©μ΄ μμ΅λλ€:
3535
3636``` hl_lines="4"
3737INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
@@ -75,7 +75,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
7575
7676#### API "μ€ν€λ§"
7777
78- μ΄ κ²½μ°, <a href =" https://github.com/OAI/OpenAPI-Specification " class =" external-link " target =" _blank " >OpenAPI</a >λ APIμ μ€ν€λ§λ₯Ό μ΄λ»κ² μ μνλμ§ μ§μνλ κ·κ²©μ
λλ€.
78+ <a href =" https://github.com/OAI/OpenAPI-Specification " class =" external-link " target =" _blank " >OpenAPI</a >λ APIμ μ€ν€λ§λ₯Ό μ΄λ»κ² μ μνλμ§ μ§μνλ κ·κ²©μ
λλ€.
7979
8080μ΄ μ€ν€λ§ μ μλ API κ²½λ‘, κ°λ₯ν λ§€κ°λ³μ λ±μ ν¬ν¨ν©λλ€.
8181
@@ -87,13 +87,13 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
8787
8888#### OpenAPIμ JSON μ€ν€λ§
8989
90- OpenAPIλ APIμ λν API μ€ν€λ§λ₯Ό μ μν©λλ€. λν μ΄ μ€ν€λ§μλ JSON λ°μ΄ν° μ€ν€λ§μ νμ€μΈ ** JSON μ€ν€λ§** λ₯Ό μ¬μ©νμ¬ APIμμ 보λ΄κ³ λ°μ λ°μ΄ν°μ μ μ(λλ "μ€ν€λ§")λ₯Ό ν¬ν¨ν©λλ€.
90+ OpenAPIλ λΉμ μ APIμ λν API μ€ν€λ§λ₯Ό μ μν©λλ€. λν μ΄ μ€ν€λ§λ JSON λ°μ΄ν° μ€ν€λ§μ νμ€μΈ ** JSON μ€ν€λ§** λ₯Ό μ¬μ©νμ¬ λΉμ μ APIκ° λ³΄λ΄κ³ λ°λ λ°μ΄ν°μ μ μ(λλ "μ€ν€λ§")λ₯Ό ν¬ν¨ν©λλ€.
9191
9292#### ` openapi.json ` νμΈ
9393
94- κ°κ³΅λμ§ μμ OpenAPI μ€ν€λ§κ° μ΄λ»κ² μκ²Όλμ§ κΆκΈνλ€λ©΄, FastAPIλ μλμΌλ‘ APIμ μ€λͺ
κ³Ό ν¨κ» JSON (μ€ν€λ§)λ₯Ό μμ±ν©λλ€.
94+ FastAPIλ μλμΌλ‘ APIμ μ€λͺ
κ³Ό ν¨κ» JSON (μ€ν€λ§)λ₯Ό μμ±ν©λλ€.
9595
96- μ¬κΈ°μμ μ§μ λ³Ό μ μμ΅λλ€: <a href =" http://127.0.0.1:8000/openapi.json " class =" external-link " target =" _blank " >http://127.0.0.1:8000/openapi.json </a >.
96+ κ°κ³΅λμ§ μμ 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 >.
9797
9898λ€μκ³Ό κ°μ΄ μμνλ JSONμ νμΈν μ μμ΅λλ€:
9999
@@ -124,7 +124,7 @@ OpenAPI μ€ν€λ§λ ν¬ν¨λ λ κ°μ λνν λ¬Έμ μμ€ν
μ μ 곡
124124
125125κ·Έλ¦¬κ³ OpenAPIμ λͺ¨λ κ²μ κΈ°λ°μΌλ‘ νλ μμ κ°μ§ λμμ΄ μμ΅λλ€. **FastAPI**λ‘ λΉλν μ ν리μΌμ΄μ
μ μ΄λ¬ν λμμ μ½κ² μΆκ° ν μ μμ΅λλ€.
126126
127- APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±νλ λ°λ μ¬μ©ν μ μμ΅λλ€. μλ‘ νλ‘ νΈμλ, λͺ¨λ°μΌ, IoT μ ν리μΌμ΄μ
μ΄ μμ΅λλ€.
127+ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈ(νλ‘ νΈμλ, λͺ¨λ°μΌ, IoT μ ν리μΌμ΄μ
λ±)λ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±νλ λ°λ μ¬μ©ν μ μμ΅λλ€.
128128
129129## λ¨κ³λ³ μμ½
130130
@@ -134,7 +134,7 @@ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±ν
134134{!../../../docs_src/first_steps/tutorial001.py! }
135135```
136136
137- `FastAPI`λ APIμ λν λͺ¨λ κΈ°λ₯μ μ 곡νλ νμ΄μ¬ ν΄λμ€μ
λλ€.
137+ `FastAPI`λ λΉμ μ APIλ₯Ό μν λͺ¨λ κΈ°λ₯μ μ 곡νλ νμ΄μ¬ ν΄λμ€μ
λλ€.
138138
139139!!! note "κΈ°μ μΈλΆμ¬ν"
140140 `FastAPI`λ `Starlette`λ₯Ό μ§μ μμνλ ν΄λμ€μ
λλ€.
@@ -147,11 +147,11 @@ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±ν
147147{!../../../docs_src/first_steps/tutorial001.py! }
148148```
149149
150- μ¬κΈ° μλ `app` λ³μλ `FastAPI` ν΄λμ€μ "μΈμ€ν΄μ€"κ° λ©λλ€.
150+ μ¬κΈ°μμ `app` λ³μλ `FastAPI` ν΄λμ€μ "μΈμ€ν΄μ€"κ° λ©λλ€.
151151
152- μ΄κ²μ λͺ¨λ APIλ₯Ό μμ±νκΈ° μν μνΈμμ©μ μ£Όμ μ§μ μ΄ λ κ²μ
λλ€.
152+ μ΄κ²μ λΉμ μ λͺ¨λ APIλ₯Ό μμ±νκΈ° μν μνΈμμ©μ μ£Όμ μ§μ μ΄ λ κ²μ
λλ€.
153153
154- μ΄ `app`μ λ€μ λͺ
λ Ήμμ `uvicorn`μ΄ μ°Έμ‘°νκ³ κ²κ³Ό λμΌν©λλ€:
154+ μ΄ `app`μ λ€μ λͺ
λ Ήμμ `uvicorn`μ΄ μ°Έμ‘°νκ³ μλ κ²κ³Ό λμΌν©λλ€:
155155
156156<div class="termy">
157157
@@ -181,11 +181,11 @@ $ uvicorn main:my_awesome_api --reload
181181
182182</div>
183183
184- ### 3 λ¨κ³: *κ²½λ‘ λμ * μμ±
184+ ### 3 λ¨κ³: *κ²½λ‘ μλ * μμ±
185185
186186#### κ²½λ‘
187187
188- μ¬κΈ°μ "κ²½λ‘"λ 첫 λ²μ§Έ `/`μμ μμνλ URLμ λ§μ§λ§ λΆλΆμ λνλ
λλ€ .
188+ μ¬κΈ°μ "κ²½λ‘"λ 첫 λ²μ§Έ `/`λΆν° μμνλ URLμ λ·λΆλΆμ μλ―Έν©λλ€ .
189189
190190κ·Έλ¬λ―λ‘ μλμ κ°μ URLμμ:
191191
@@ -200,13 +200,13 @@ https://example.com/items/foo
200200```
201201
202202!!! info "μ 보"
203- " κ²½λ‘" λ μΌλ°μ μΌλ‘ "μ€λν¬μΈνΈ " λλ "λΌμ°νΈ"λΌκ³ λ λΆλ¦½λλ€.
203+ " κ²½λ‘" λ μΌλ°μ μΌλ‘ "μλν¬μΈνΈ " λλ "λΌμ°νΈ"λΌκ³ λ λΆλ¦½λλ€.
204204
205- APIλ₯Ό λΉλνλ λμ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬νλ μ£Όμ λ°©λ²μ
λλ€.
205+ APIλ₯Ό μ€κ³ν λ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬νκΈ° μν μ£Όμν λ°©λ²μ
λλ€.
206206
207- #### λμ
207+ #### μλ
208208
209- μ¬κΈ°μ "λμ (Operation)"μ HTTP "λ©μλ" μ€ νλλ₯Ό λνλ
λλ€.
209+ " μλ (Operation)" μ HTTP "λ©μλ" μ€ νλλ₯Ό λνλ
λλ€.
210210
211211λ€μ μ€ νλμ΄λ©°:
212212
@@ -215,7 +215,7 @@ APIλ₯Ό λΉλνλ λμ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬ν
215215* `PUT`
216216* `DELETE`
217217
218- ...μ΄κ΅μ μΈ κ²λ€λ μμ΅λλ€:
218+ ...νν μ¬μ©λμ§ μλ κ²λ€λ μμ΅λλ€:
219219
220220* `OPTIONS`
221221* `HEAD`
@@ -226,20 +226,20 @@ HTTP νλ‘ν μ½μμλ μ΄λ¬ν "λ©μλ"λ₯Ό νλ(λλ μ΄μ) μ¬μ©
226226
227227---
228228
229- APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄ νΉμ HTTP λ©μλλ₯Ό μ¬μ©ν©λλ€.
229+ APIλ₯Ό μ€κ³ν λ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄ νΉμ HTTP λ©μλλ₯Ό μ¬μ©ν©λλ€.
230230
231- μΌλ°μ μΌλ‘ λ€μμ μ¬μ©ν©λλ€ :
231+ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΅λλ€ :
232232
233233* `POST`: λ°μ΄ν°λ₯Ό μμ±νκΈ° μν΄.
234234* `GET`: λ°μ΄ν°λ₯Ό μ½κΈ° μν΄.
235- * `PUT`: λ°μ΄ν°λ₯Ό μ
λ°μ΄νΈνκΈ° μν΄.
235+ * `PUT`: λ°μ΄ν°λ₯Ό μμ νκΈ° μν΄.
236236* `DELETE`: λ°μ΄ν°λ₯Ό μμ νκΈ° μν΄.
237237
238- κ·Έλμ OpenAPIμμλ κ° HTTP λ©μλλ€μ "λμ "μ΄λΌ λΆλ¦
λλ€.
238+ κ·Έλμ OpenAPIμμλ κ° HTTP λ©μλλ€μ "μλ "μ΄λΌ λΆλ¦
λλ€.
239239
240- μ΄μ λΆν° μ°λ¦¬λ λ©μλλ₯Ό "**λμ **"μ΄λΌκ³ λ λΆλ₯Όκ²λλ€ .
240+ μ°λ¦¬ μμ μ΄μ λΆν° λ©μλλ₯Ό "**μλ **"μ΄λΌκ³ λΆλ₯Ό κ²μ
λλ€ .
241241
242- #### *κ²½λ‘ λμ λ°μ½λ μ΄ν°* μ μ
242+ #### *κ²½λ‘ μλ λ°μ½λ μ΄ν°* μ μ
243243
244244```Python hl_lines="6"
245245{!../../../docs_src/first_steps/tutorial001.py! }
@@ -248,47 +248,47 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
248248`@app.get("/")`μ **FastAPI**μκ² λ°λ‘ μλμ μλ ν¨μκ° λ€μμΌλ‘ μ΄λνλ μμ²μ μ²λ¦¬νλ€λ κ²μ μλ €μ€λλ€.
249249
250250* κ²½λ‘ `/`
251- * <abbr title="HTTP GET λ©μλ"><code>get</code> λμ </abbr> μ¬μ©
251+ * <abbr title="HTTP GET λ©μλ"><code>get</code> μλ </abbr> μ¬μ©
252252
253253!!! info "`@decorator` μ 보"
254254 μ΄ `@something` λ¬Έλ²μ νμ΄μ¬μμ "λ°μ½λ μ΄ν°"λΌ λΆλ¦
λλ€.
255255
256- ν¨μ 맨 μμ λμ΅λλ€. λ§μΉ μμ μ₯μμ©(Decorative) λͺ¨μμ²λΌ(κ°μΈμ μΌλ‘ μ΄ μ©μ΄κ° μ¬κΈ°μ μ λνκ±° κ°μ΅λλ€).
256+ λ§μΉ μμ μ₯μμ©(Decorative) λͺ¨μμ²λΌ(κ°μΈμ μΌλ‘ μ΄ μ©μ΄κ° μ¬κΈ°μ μ λν κ² κ°μ΅λλ€) ν¨μ 맨 μμ λμ΅λλ€ .
257257
258- " λ°μ½λ μ΄ν°" μλ μλ ν¨μλ₯Ό λ°κ³ κ·Έκ±Έ μ΄μ©ν΄ 무μΈκ° ν©λλ€.
258+ " λ°μ½λ μ΄ν°" λ μλ μλ ν¨μλ₯Ό λ°μ κ·Έκ²μΌλ‘ 무μΈκ°λ₯Ό ν©λλ€.
259259
260- μ°λ¦¬μ κ²½μ°, μ΄ λ°μ½λ μ΄ν°λ **FastAPI**μκ² μλ ν¨μκ° **κ²½λ‘** `/`μ ν΄λΉνλ `get` **λμ**νλΌκ³ μλ €μ€λλ€.
260+ μ°λ¦¬μ κ²½μ°, μ΄ λ°μ½λ μ΄ν°λ **FastAPI**μκ² μλ ν¨μκ° **κ²½λ‘** `/`μ `get` **μλ**μ ν΄λΉνλ€κ³ μλ €μ€λλ€.
261261
262- μ΄κ²μ΄ "**κ²½λ‘ λμ λ°μ½λ μ΄ν°**"μ
λλ€.
262+ μ΄κ²μ΄ "**κ²½λ‘ μλ λ°μ½λ μ΄ν°**"μ
λλ€.
263263
264- λ€λ₯Έ λμλ μΈ μ μμ΅λλ€:
264+ λ€λ₯Έ μλλ μ¬μ©ν μ μμ΅λλ€:
265265
266266* `@app.post()`
267267* `@app.put()`
268268* `@app.delete()`
269269
270- μ΄κ΅μ μΈ κ²λ€λ μμ΅λλ€:
270+ νν μ¬μ©λμ§ μλ κ²λ€λ μμ΅λλ€:
271271
272272* `@app.options()`
273273* `@app.head()`
274274* `@app.patch()`
275275* `@app.trace()`
276276
277277!!! tip "ν"
278- κ° λμ (HTTP λ©μλ)μ μνλ λλ‘ μ¬μ©ν΄λ λ©λλ€.
278+ κ° μλ (HTTP λ©μλ)μ μνλ λλ‘ μ¬μ©ν΄λ λ©λλ€.
279279
280280 **FastAPI**λ νΉμ μλ―Έλ₯Ό κ°μ νμ§ μμ΅λλ€.
281281
282- μ¬κΈ°μ μ 보λ μ§μΉ¨μμΌλΏ μꡬμ¬νμ΄ μλλλ€.
282+ μ¬κΈ°μ μ 보λ μ§μΉ¨μμΌλΏ κ°μ μ¬νμ΄ μλλλ€.
283283
284- μλ₯Ό λ€μ΄ GraphQLμ μ¬μ©ν λ μΌλ°μ μΌλ‘ `POST` λμλ§ μ¬μ©νμ¬ λͺ¨λ νλμ μνν©λλ€.
284+ μλ₯Ό λ€μ΄ GraphQLμ μ¬μ©νλ κ²½μ°, μΌλ°μ μΌλ‘ `POST` μλλ§ μ¬μ©νμ¬ λͺ¨λ νλμ μνν©λλ€.
285285
286- ### 4 λ¨κ³: **κ²½λ‘ λμ ν¨μ** μ μ
286+ ### 4 λ¨κ³: **κ²½λ‘ μλ ν¨μ** μ μ
287287
288- λ€μμ μ°λ¦¬μ "**κ²½λ‘ λμ ν¨μ**"μ
λλ€:
288+ λ€μμ μ°λ¦¬μ "**κ²½λ‘ μλ ν¨μ**"μ
λλ€:
289289
290290* **κ²½λ‘**: λ `/`μ
λλ€.
291- * **λμ **: μ `get`μ
λλ€.
291+ * **μλ **: μ `get`μ
λλ€.
292292* **ν¨μ**: λ "λ°μ½λ μ΄ν°" μλμ μλ ν¨μμ
λλ€ (`@app.get("/")` μλ).
293293
294294```Python hl_lines="7"
@@ -297,13 +297,13 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
297297
298298μ΄κ²μ νμ΄μ¬ ν¨μμ
λλ€.
299299
300- `GET` λμμ μ¬μ©νμ¬ URL "`/`"μ λν μμ²μ λ°μ λλ§λ€ **FastAPI**μ μν΄ νΈμΆλ©λλ€.
300+ URL "`/`"μ λν `GET` μλμ μ¬μ©νλ μμ²μ λ°μ λλ§λ€ **FastAPI**μ μν΄ νΈμΆλ©λλ€.
301301
302- μμ κ²½μ° `async` ν¨μμ
λλ€.
302+ μμ μμμμ μ΄ ν¨μλ `async`(λΉλκΈ°) ν¨μμ
λλ€.
303303
304304---
305305
306- `async def` λμ μΌλ° ν¨μλ‘ μ μν μ μμ΅λλ€:
306+ `async def`μ μ΄μ©νλ λμ μΌλ° ν¨μλ‘ μ μν μ μμ΅λλ€:
307307
308308```Python hl_lines="7"
309309{!../../../docs_src/first_steps/tutorial003.py! }
@@ -322,12 +322,12 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
322322
323323Pydantic λͺ¨λΈμ λ°νν μλ μμ΅λλ€(λμ€μ λ μμΈν μ΄ν΄λ΄
λλ€).
324324
325- JSONμΌλ‘ μλ λ³νλλ κ°μ²΄λ€κ³Ό λͺ¨λΈλ€μ΄ λ§μ΄ μμ΅λλ€ (ORM λ±μ ν¬ν¨ν΄μμ) . κ°μ₯ λ§μμ λλ κ²μ μ¬μ©νμΈμ , μ΄λ―Έ μ§μλκ³ μμ κ²λλ€ .
325+ JSONμΌλ‘ μλ λ³νλλ κ°μ²΄λ€κ³Ό λͺ¨λΈλ€ (ORM λ±μ ν¬ν¨ν΄μ)μ΄ λ§μ΄ μμ΅λλ€ . κ°μ₯ λ§μμ λλ κ²μ μ¬μ©νμμμ€ , μ΄λ―Έ μ§μλκ³ μμ κ²μ
λλ€ .
326326
327327## μμ½
328328
329329* `FastAPI` μν¬νΈ.
330330* `app` μΈμ€ν΄μ€ μμ±.
331- * (`@app.get("/")`μ²λΌ) **κ²½λ‘ λμ λ°μ½λ μ΄ν°** μμ±.
332- * (μμ μλ `def root(): ...`μ²λΌ) **κ²½λ‘ λμ ν¨μ** μμ±.
331+ * (`@app.get("/")`μ²λΌ) **κ²½λ‘ μλ λ°μ½λ μ΄ν°** μμ±.
332+ * (μμ μλ `def root(): ...`μ²λΌ) **κ²½λ‘ μλ ν¨μ** μμ±.
333333* (`uvicorn main:app --reload`μ²λΌ) κ°λ° μλ² μ€ν.
0 commit comments