Browse Source

๐ŸŒ Update translations for ko (update-outdated) (#15757)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pull/15772/head
Sebastiรกn Ramรญrez 2 days ago
committed by GitHub
parent
commit
2f69b265ef
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      docs/ko/docs/advanced/additional-responses.md
  2. 2
      docs/ko/docs/advanced/advanced-dependencies.md
  3. 6
      docs/ko/docs/advanced/custom-response.md
  4. 2
      docs/ko/docs/advanced/dataclasses.md
  5. 6
      docs/ko/docs/advanced/events.md
  6. 3
      docs/ko/docs/advanced/generate-clients.md
  7. 4
      docs/ko/docs/advanced/openapi-callbacks.md
  8. 4
      docs/ko/docs/advanced/openapi-webhooks.md
  9. 20
      docs/ko/docs/advanced/path-operation-advanced-configuration.md
  10. 2
      docs/ko/docs/advanced/response-directly.md
  11. 4
      docs/ko/docs/advanced/security/oauth2-scopes.md
  12. 4
      docs/ko/docs/advanced/stream-data.md
  13. 2
      docs/ko/docs/advanced/strict-content-type.md
  14. 2
      docs/ko/docs/advanced/websockets.md
  15. 2
      docs/ko/docs/advanced/wsgi.md
  16. 6
      docs/ko/docs/deployment/docker.md
  17. 24
      docs/ko/docs/deployment/fastapicloud.md
  18. 1
      docs/ko/docs/deployment/manually.md
  19. 2
      docs/ko/docs/deployment/server-workers.md
  20. 12
      docs/ko/docs/how-to/extending-openapi.md
  21. 6
      docs/ko/docs/how-to/separate-openapi-schemas.md
  22. 8
      docs/ko/docs/index.md
  23. 24
      docs/ko/docs/tutorial/bigger-applications.md
  24. 4
      docs/ko/docs/tutorial/body-multiple-params.md
  25. 4
      docs/ko/docs/tutorial/body-nested-models.md
  26. 2
      docs/ko/docs/tutorial/body.md
  27. 2
      docs/ko/docs/tutorial/cookie-param-models.md
  28. 4
      docs/ko/docs/tutorial/cookie-params.md
  29. 2
      docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
  30. 2
      docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
  31. 4
      docs/ko/docs/tutorial/dependencies/index.md
  32. 2
      docs/ko/docs/tutorial/dependencies/sub-dependencies.md
  33. 35
      docs/ko/docs/tutorial/first-steps.md
  34. 2
      docs/ko/docs/tutorial/metadata.md
  35. 4
      docs/ko/docs/tutorial/path-operation-configuration.md
  36. 4
      docs/ko/docs/tutorial/path-params-numeric-validations.md
  37. 8
      docs/ko/docs/tutorial/path-params.md
  38. 4
      docs/ko/docs/tutorial/query-params.md
  39. 4
      docs/ko/docs/tutorial/request-files.md
  40. 2
      docs/ko/docs/tutorial/request-form-models.md
  41. 2
      docs/ko/docs/tutorial/request-forms-and-files.md
  42. 8
      docs/ko/docs/tutorial/request-forms.md
  43. 8
      docs/ko/docs/tutorial/response-model.md
  44. 4
      docs/ko/docs/tutorial/response-status-code.md
  45. 6
      docs/ko/docs/tutorial/schema-extra-example.md
  46. 10
      docs/ko/docs/tutorial/security/first-steps.md
  47. 2
      docs/ko/docs/tutorial/security/get-current-user.md
  48. 6
      docs/ko/docs/tutorial/security/oauth2-jwt.md
  49. 8
      docs/ko/docs/tutorial/security/simple-oauth2.md
  50. 2
      docs/ko/docs/tutorial/server-sent-events.md
  51. 4
      docs/ko/docs/tutorial/stream-json-lines.md
  52. 4
      docs/ko/docs/tutorial/testing.md

4
docs/ko/docs/advanced/additional-responses.md

@ -34,7 +34,7 @@
///
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`model` ํ‚ค๋Š” OpenAPI์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
@ -183,7 +183,7 @@
///
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`responses` ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ, FastAPI๋Š” ์‘๋‹ต์ด ์ฃผ์š” ์‘๋‹ต ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๋ฏธ๋””์–ด ํƒ€์ž…(๊ธฐ๋ณธ๊ฐ’ `application/json`)์„ ๊ฐ€์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

2
docs/ko/docs/advanced/advanced-dependencies.md

@ -99,7 +99,7 @@ FastAPI 0.118.0 ์ด์ „์—๋Š” `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, *๊ฒฝ
์ด ๋™์ž‘์€ 0.118.0์—์„œ ๋˜๋Œ๋ ค์ ธ, `yield` ์ดํ›„์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€ ์‘๋‹ต์ด ์ „์†ก๋œ ๋’ค ์‹คํ–‰๋˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์•„๋ž˜์—์„œ ๋ณด์‹œ๊ฒ ์ง€๋งŒ, ์ด๋Š” 0.106.0 ๋ฒ„์ „ ์ด์ „์˜ ๋™์ž‘๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์„  ์‚ฌํ•ญ๊ณผ ์ฝ”๋„ˆ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

6
docs/ko/docs/advanced/custom-response.md

@ -41,7 +41,7 @@
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`response_class` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์‘๋‹ต์˜ "๋ฏธ๋””์–ด ํƒ€์ž…"์„ ์ •์˜ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
@ -65,7 +65,7 @@
///
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
๋ฌผ๋ก  ์‹ค์ œ `Content-Type` ํ—ค๋”, ์ƒํƒœ ์ฝ”๋“œ ๋“ฑ์€ ๋ฐ˜ํ™˜๋œ `Response` ๊ฐ์ฒด์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
@ -173,7 +173,7 @@ HTTP ๋ฆฌ๋””๋ ‰์…˜ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํƒœ ์ฝ”๋“œ๋Š” 30
### `StreamingResponse` { #streamingresponse }
๋น„๋™๊ธฐ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๋˜๋Š” ์ผ๋ฐ˜ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ/์ดํ„ฐ๋ ˆ์ดํ„ฐ(`yield`๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜)๋ฅผ ๋ฐ›์•„ ์‘๋‹ต ๋ณธ๋ฌธ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๋˜๋Š” ์ผ๋ฐ˜ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ/์ดํ„ฐ๋ ˆ์ดํ„ฐ(`yield`๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜`)๋ฅผ ๋ฐ›์•„ ์‘๋‹ต ๋ณธ๋ฌธ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}

2
docs/ko/docs/advanced/dataclasses.md

@ -18,7 +18,7 @@ FastAPI๋Š” **Pydantic** ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ง€๊ธˆ๊นŒ์ง€๋Š” Pydantic
์ด๋Š” Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Pydantic์„ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
/// info
/// note
dataclasses๋Š” Pydantic ๋ชจ๋ธ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

6
docs/ko/docs/advanced/events.md

@ -120,7 +120,7 @@ async with lifespan(app):
์—ฌ๊ธฐ์„œ `shutdown` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” ํ…์ŠคํŠธ ํ•œ ์ค„ `"Application shutdown"`์„ `log.txt` ํŒŒ์ผ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`open()` ํ•จ์ˆ˜์—์„œ `mode="a"`๋Š” "append"(์ถ”๊ฐ€)๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ๊ธฐ์กด ๋‚ด์šฉ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ํŒŒ์ผ์— ์žˆ๋˜ ๋‚ด์šฉ ๋’ค์— ์ค„์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
@ -150,9 +150,9 @@ async with lifespan(app):
ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ๋ถ„๋“ค์„ ์œ„ํ•œ ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๐Ÿค“
๋‚ด๋ถ€์ ์œผ๋กœ ASGI ๊ธฐ์ˆ  ์‚ฌ์–‘์—์„œ๋Š” ์ด๊ฒƒ์ด [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)์˜ ์ผ๋ถ€์ด๋ฉฐ, `startup`๊ณผ `shutdown`์ด๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ ASGI ๊ธฐ์ˆ  ์‚ฌ์–‘์—์„œ๋Š” ์ด๊ฒƒ์ด [Lifespan ํ”„๋กœํ† ์ฝœ](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)์˜ ์ผ๋ถ€์ด๋ฉฐ, `startup`๊ณผ `shutdown`์ด๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
Starlette `lifespan` ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•ด์„œ๋Š” [Starlette์˜ Lifespan ๋ฌธ์„œ](https://www.starlette.dev/lifespan/)์—์„œ ๋” ์ฝ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3
docs/ko/docs/advanced/generate-clients.md

@ -2,7 +2,7 @@
**FastAPI**๋Š” **OpenAPI** ์‚ฌ์–‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ, FastAPI์˜ API๋Š” ๋งŽ์€ ๋„๊ตฌ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋•๋ถ„์— ์—ฌ๋Ÿฌ ์–ธ์–ด์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(<abbr title="Software Development Kits - ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ">**SDKs**</abbr>), ์ตœ์‹  **๋ฌธ์„œ**, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ์™€ ๋™๊ธฐํ™”๋œ **ํ…Œ์ŠคํŠธ** ๋˜๋Š” **์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ**๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋•๋ถ„์— ์ตœ์‹  **๋ฌธ์„œ**, ์—ฌ๋Ÿฌ ์–ธ์–ด์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(<abbr title="Software Development Kits - ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ">**SDKs**</abbr>), ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ์™€ ๋™๊ธฐํ™”๋œ **ํ…Œ์ŠคํŠธ** ๋˜๋Š” **์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ**๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” FastAPI ๋ฐฑ์—”๋“œ์šฉ **TypeScript SDK**๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.
@ -31,7 +31,6 @@ FastAPI๋Š” **OpenAPI 3.1** ์‚ฌ์–‘์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š”
์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
์ด ์ค‘ ์ผ๋ถ€๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๊ฑฐ๋‚˜ ๋ฌด๋ฃŒ ํ‹ฐ์–ด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ๋น„์šฉ ๋ถ€๋‹ด ์—†์ด ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒ์šฉ SDK ์ƒ์„ฑ๊ธฐ๋„ ์žˆ์œผ๋ฉฐ ์˜จ๋ผ์ธ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“

4
docs/ko/docs/advanced/openapi-callbacks.md

@ -167,13 +167,13 @@ https://www.external.org/events/invoices/2expen51ve
์ด ์‹œ์ ์—์„œ, ์œ„์—์„œ ๋งŒ๋“  ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ ์•ˆ์— *์ฝœ๋ฐฑ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ(๋“ค)*(์ฆ‰ *external developer*๊ฐ€ *external API*์— ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค)์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ *์—ฌ๋Ÿฌ๋ถ„์˜ API ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ*์—์„œ `callbacks` ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด, ๊ทธ ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ์˜ `.routes` ์†์„ฑ(์‹ค์ œ๋กœ๋Š” routes/*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์˜ `list`)์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค:
์ด์ œ *์—ฌ๋Ÿฌ๋ถ„์˜ API ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ*์—์„œ `callbacks` ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด, ๊ทธ ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ์˜ `.routes` ์†์„ฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค:
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip | ํŒ
`callback=`์— ๋ผ์šฐํ„ฐ ์ž์ฒด(`invoices_callback_router`)๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, `invoices_callback_router.routes`์ฒ˜๋Ÿผ `.routes` ์†์„ฑ์„ ๋„˜๊ธด๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•˜์„ธ์š”.
`callbacks=`์— ๋ผ์šฐํ„ฐ ์ž์ฒด(`invoices_callback_router`)๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, `invoices_callback_router.routes`์ฒ˜๋Ÿผ `.routes` ์†์„ฑ์„ ๋„˜๊ธด๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•˜์„ธ์š”. FastAPI๋Š” ์ด ๋ผ์šฐํŠธ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝœ๋ฐฑ OpenAPI ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
///

4
docs/ko/docs/advanced/openapi-webhooks.md

@ -22,7 +22,7 @@ webhook์˜ URL์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์‹ค์ œ๋กœ ๊ทธ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฝ”
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ **webhook** ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด **์ž์‹ ๋“ค์˜ API๋ฅผ ๊ตฌํ˜„**ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง€๊ณ , ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์ž์‹ ์˜ API ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
Webhooks๋Š” OpenAPI 3.1.0 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, FastAPI `0.99.0` ์ด์ƒ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
@ -36,7 +36,7 @@ Webhooks๋Š” OpenAPI 3.1.0 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, FastAPI `0.99.0`
์—ฌ๋Ÿฌ๋ถ„์ด ์ •์˜ํ•œ webhook์€ **OpenAPI** ์Šคํ‚ค๋งˆ์™€ ์ž๋™ **docs UI**์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`app.webhooks` ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ `APIRouter`์ผ ๋ฟ์ด๋ฉฐ, ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ์•ฑ์„ ๊ตฌ์กฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

20
docs/ko/docs/advanced/path-operation-advanced-configuration.md

@ -2,7 +2,7 @@
## OpenAPI operationId { #openapi-operationid }
/// warning | ๊ฒฝ๊ณ 
/// warning
OpenAPI โ€œ์ „๋ฌธ๊ฐ€โ€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์•„๋งˆ ์ด ๋‚ด์šฉ์€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
@ -16,19 +16,13 @@ OpenAPI โ€œ์ „๋ฌธ๊ฐ€โ€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์•„๋งˆ ์ด ๋‚ด์šฉ์€ ํ•„์š”ํ•˜์ง€ ์•Š
### *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜* ์ด๋ฆ„์„ operationId๋กœ ์‚ฌ์šฉํ•˜๊ธฐ { #using-the-path-operation-function-name-as-the-operationid }
API์˜ ํ•จ์ˆ˜ ์ด๋ฆ„์„ `operationId`๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ชจ๋“  API๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ `APIRoute.name`์„ ์‚ฌ์šฉํ•ด ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์˜ `operation_id`๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
API์˜ ํ•จ์ˆ˜ ์ด๋ฆ„์„ `operationId`๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, `FastAPI`์— ์‚ฌ์šฉ์ž ์ •์˜ `generate_unique_id_function`์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ํ•จ์ˆ˜๋Š” ๊ฐ `APIRoute`๋ฅผ ๋ฐ›์•„ ๊ทธ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์— ์‚ฌ์šฉํ•  `operationId`๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
/// tip | ํŒ
`app.openapi()`๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, ๊ทธ ์ „์— `operationId`๋“ค์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
///
/// warning | ๊ฒฝ๊ณ 
/// warning
์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ, ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์˜ ์ด๋ฆ„์ด ๊ณ ์œ ํ•˜๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
@ -78,7 +72,7 @@ OpenAPI ๋ช…์„ธ์—์„œ๋Š” ์ด๋ฅผ [Operation Object](https://github.com/OAI/OpenAPI
์ด *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ์ „์šฉ OpenAPI ์Šคํ‚ค๋งˆ๋Š” ๋ณดํ†ต **FastAPI**๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€๋งŒ, ํ™•์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
/// tip | ํŒ
/// tip
์ด๋Š” ์ €์ˆ˜์ค€ ํ™•์žฅ ์ง€์ ์ž…๋‹ˆ๋‹ค.
@ -163,7 +157,7 @@ OpenAPI ๋ช…์„ธ์—์„œ๋Š” ์ด๋ฅผ [Operation Object](https://github.com/OAI/OpenAPI
{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[24:31] *}
/// tip | ํŒ
/// tip
์—ฌ๊ธฐ์„œ๋Š” ๊ฐ™์€ Pydantic ๋ชจ๋ธ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2
docs/ko/docs/advanced/response-directly.md

@ -18,7 +18,7 @@
`Response` ๋˜๋Š” ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`JSONResponse` ์ž์ฒด๋„ `Response`์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

4
docs/ko/docs/advanced/security/oauth2-scopes.md

@ -46,7 +46,7 @@ OpenAPI(์˜ˆ: API ๋ฌธ์„œ)์—์„œ๋Š” โ€œsecurity schemesโ€๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต
* `instagram_basic` ๋Š” Facebook/Instagram์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
* `https://www.googleapis.com/auth/drive` ๋Š” Google์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
OAuth2์—์„œ โ€œ์Šค์ฝ”ํ”„โ€๋Š” ํ•„์š”ํ•œ ํŠน์ • ๊ถŒํ•œ์„ ์„ ์–ธํ•˜๋Š” ๋ฌธ์ž์—ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
@ -126,7 +126,7 @@ OAuth2 ์ž…์žฅ์—์„œ๋Š” ๊ทธ์ € ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
/// info | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
/// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
`Security`๋Š” ์‹ค์ œ๋กœ `Depends`์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด๋ฉฐ, ๋‚˜์ค‘์— ๋ณด๊ฒŒ ๋  ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•˜๋‚˜๋งŒ ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

4
docs/ko/docs/advanced/stream-data.md

@ -4,7 +4,7 @@ JSON์œผ๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด [JSON Line
ํ•˜์ง€๋งŒ ์ˆœ์ˆ˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
FastAPI 0.134.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@ -90,7 +90,7 @@ FastAPI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹
๋˜ํ•œ ๋””์Šคํฌ๋‚˜ ๋„คํŠธ์›Œํฌ์—์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฒฝ์šฐ ์ฝ๊ธฐ ์ž‘์—…์€ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๋ธ”๋กœํ‚น ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์œ„์˜ ์˜ˆ์‹œ๋Š” ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. `io.BytesIO` ๊ฐ์ฒด๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฏ€๋กœ ์ฝ๊ธฐ๊ฐ€ ์•„๋ฌด ๊ฒƒ๋„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2
docs/ko/docs/advanced/strict-content-type.md

@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac
์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด `Content-Type` ํ—ค๋”๊ฐ€ ์—†๋Š” ์š”์ฒญ๋„ ๋ณธ๋ฌธ์ด JSON์œผ๋กœ ํŒŒ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ๋ฒ„์ „์˜ FastAPI์™€ ๋™์ผํ•œ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์ด ๋™์ž‘๊ณผ ์„ค์ •์€ FastAPI 0.132.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2
docs/ko/docs/advanced/websockets.md

@ -111,7 +111,7 @@ WebSocket ์—”๋“œํฌ์ธํŠธ์—์„œ `fastapi`์—์„œ ๋‹ค์Œ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ• 
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
WebSocket์ด๊ธฐ ๋•Œ๋ฌธ์— `HTTPException`์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  `WebSocketException`์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

2
docs/ko/docs/advanced/wsgi.md

@ -6,7 +6,7 @@
## `WSGIMiddleware` ์‚ฌ์šฉํ•˜๊ธฐ { #using-wsgimiddleware }
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `a2wsgi`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: `pip install a2wsgi`

6
docs/ko/docs/deployment/docker.md

@ -26,7 +26,7 @@ COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
# If running behind a proxy like Nginx or Traefik add --proxy-headers
# Nginx๋‚˜ Traefik ๊ฐ™์€ ํ”„๋ก์‹œ ๋’ค์—์„œ ์‹คํ–‰ํ•œ๋‹ค๋ฉด --proxy-headers๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]
```
@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
</div>
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
ํŒจํ‚ค์ง€ ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋‹ค๋ฅธ ํ˜•์‹๊ณผ ๋„๊ตฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
@ -556,7 +556,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
**์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ**๊ฐ€ ์žˆ๊ณ  ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณดํ†ต **๋‹จ์ผ ํ”„๋กœ์„ธ์Šค**๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด(์˜ˆ: **Kubernetes** ํด๋Ÿฌ์Šคํ„ฐ), ๋ณต์ œ๋œ ์›Œ์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ **์ „์—**, ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ **์‹œ์ž‘ ์ „ ์‚ฌ์ „ ๋‹จ๊ณ„**๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” **๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ**๋ฅผ ๋‘๊ณ  ์‹ถ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์•„๋งˆ๋„ [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

24
docs/ko/docs/deployment/fastapicloud.md

@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
**ํ•œ ๋ฒˆ์˜ ๋ช…๋ น**์œผ๋กœ FastAPI ์•ฑ์„ [FastAPI Cloud](https://fastapicloud.com)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง์ด๋ผ๋ฉด ๋Œ€๊ธฐ์ž ๋ช…๋‹จ์— ๋“ฑ๋กํ•ด ๋ณด์„ธ์š”. ๐Ÿš€
## ๋กœ๊ทธ์ธํ•˜๊ธฐ { #login }
๋จผ์ € **FastAPI Cloud** ๊ณ„์ •์ด ์ด๋ฏธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”(๋Œ€๊ธฐ์ž ๋ช…๋‹จ์—์„œ ์ดˆ๋Œ€ํ•ด ๋“œ๋ ธ์„ ๊ฑฐ์˜ˆ์š” ๐Ÿ˜‰).
๊ทธ๋‹ค์Œ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud ๐Ÿš€
```
</div>
## ๋ฐฐํฌํ•˜๊ธฐ { #deploy }
์ด์ œ **ํ•œ ๋ฒˆ์˜ ๋ช…๋ น**์œผ๋กœ ์•ฑ์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค:
**ํ•œ ๋ฒˆ์˜ ๋ช…๋ น**์œผ๋กœ FastAPI ์•ฑ์„ [FastAPI Cloud](https://fastapicloud.com)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
<div class="termy">
@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
</div>
CLI๊ฐ€ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์ธ์ฆ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค! ์ด์ œ ํ•ด๋‹น URL์—์„œ ์•ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ
## FastAPI Cloud ์†Œ๊ฐœ { #about-fastapi-cloud }

1
docs/ko/docs/deployment/manually.md

@ -56,7 +56,6 @@ FastAPI๋Š” <abbr title="Asynchronous Server Gateway Interface - ๋น„๋™๊ธฐ ์„œ๋ฒ„
* [Hypercorn](https://hypercorn.readthedocs.io/): HTTP/2 ๋ฐ Trio ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๊ณผ ํ˜ธํ™˜๋˜๋Š” ASGI ์„œ๋ฒ„.
* [Daphne](https://github.com/django/daphne): Django Channels๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ASGI ์„œ๋ฒ„.
* [Granian](https://github.com/emmett-framework/granian): Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ Rust HTTP ์„œ๋ฒ„.
* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit์€ ๊ฐ€๋ณ๊ณ  ๋‹ค์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค.
## ์„œ๋ฒ„ ๋จธ์‹ ๊ณผ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ { #server-machine-and-server-program }

2
docs/ko/docs/deployment/server-workers.md

@ -17,7 +17,7 @@
์—ฌ๊ธฐ์„œ๋Š” `fastapi` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `uvicorn` ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ, **์›Œ์ปค ํ”„๋กœ์„ธ์Šค**์™€ ํ•จ๊ป˜ **Uvicorn**์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
Docker๋‚˜ Kubernetes ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค์Œ ์žฅ์ธ [์ปจํ…Œ์ด๋„ˆ์—์„œ์˜ FastAPI - ๋„์ปค](docker.md)์—์„œ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

12
docs/ko/docs/how-to/extending-openapi.md

@ -25,9 +25,17 @@
* `openapi_version`: ์‚ฌ์šฉ๋˜๋Š” OpenAPI ์ŠคํŽ™ ๋ฒ„์ „. ๊ธฐ๋ณธ๊ฐ’์€ ์ตœ์‹ ์ธ `3.1.0`.
* `summary`: API์— ๋Œ€ํ•œ ์งง์€ ์š”์•ฝ.
* `description`: API ์„ค๋ช…. markdown์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์„œ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
* `routes`: ๋ผ์šฐํŠธ ๋ชฉ๋ก. ๊ฐ๊ฐ ๋“ฑ๋ก๋œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์ž…๋‹ˆ๋‹ค. `app.routes`์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
* `routes`: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์šฐํŠธ. `app.routes`์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. FastAPI๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•ด ๋“ฑ๋ก๋œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉฐ, ํฌํ•จ๋œ ๋ผ์šฐํ„ฐ์˜ ๊ฒƒ๊นŒ์ง€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// tip | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
`app.routes`๋Š” ๋” ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ผ์šฐํŠธ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํฌํ•จ๋œ ๋ผ์šฐํ„ฐ๋ฅผ ์œ„ํ•ด FastAPI๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์šฐํŠธ ํ›„๋ณด๋“ค์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ตœ์ข… `APIRoute` ๊ฐ์ฒด๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
`app.routes`๋ฅผ ๊ทธ๋Œ€๋กœ `get_openapi()`์— ์ „๋‹ฌํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. FastAPI๊ฐ€ ๊ทธ ๋ผ์šฐํŠธ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜์—ฌ ์‹ค์ œ ์œ ํšจํ•œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๋“ค์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
///
/// note | ์ฐธ๊ณ 
`summary` ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” OpenAPI 3.1.0 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, FastAPI 0.99.0 ์ด์ƒ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

6
docs/ko/docs/how-to/separate-openapi-schemas.md

@ -1,4 +1,4 @@
# ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์— ๋Œ€ํ•ด OpenAPI ์Šคํ‚ค๋งˆ๋ฅผ ๋ถ„๋ฆฌํ• ์ง€ ์—ฌ๋ถ€ { #separate-openapi-schemas-for-input-and-output-or-not }
# ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์— ๋Œ€ํ•ด OpenAPI ์Šคํ‚คะผะฐ๋ฅผ ๋ถ„๋ฆฌํ• ์ง€ ์—ฌ๋ถ€ { #separate-openapi-schemas-for-input-and-output-or-not }
**Pydantic v2**๊ฐ€ ๋ฆด๋ฆฌ์Šค๋œ ์ดํ›„, ์ƒ์„ฑ๋˜๋Š” OpenAPI๋Š” ์ด์ „๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์ •ํ™•ํ•˜๊ณ  **์˜ฌ๋ฐ”๋ฅด๊ฒŒ** ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๐Ÿ˜Ž
@ -72,7 +72,7 @@
ํ•˜์ง€๋งŒ `Item-Output`์—์„œ๋Š” `description`์ด **ํ•„์ˆ˜์ด๋ฉฐ**, ๋นจ๊ฐ„ ๋ณ„ํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
<div class="screenshot">
<img src="/img/tutorial/separate-openapi_schemas/image04.png">
<img src="/img/tutorial/separate-openapi-schemas/image04.png">
</div>
**Pydantic v2**์˜ ์ด ๊ธฐ๋Šฅ ๋•๋ถ„์— API ๋ฌธ์„œ๋Š” ๋” **์ •๋ฐ€**ํ•ด์ง€๊ณ , ์ž๋™ ์ƒ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ์™€ SDK๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋“ค๋„ ๋” ์ •๋ฐ€ํ•ด์ ธ์„œ ๋” ๋‚˜์€ **developer experience**์™€ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰
@ -85,7 +85,7 @@
๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋Š”, **FastAPI**์—์„œ `separate_input_output_schemas=False` ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`separate_input_output_schemas` ์ง€์›์€ FastAPI `0.102.0`์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“

8
docs/ko/docs/index.md

@ -143,7 +143,7 @@ FastAPI๋Š” ํ˜„๋Œ€์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์„ฑ๋Šฅ), ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ํžŒํŠธ
---
"_ํ”„๋กœ๋•์…˜ Python API๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์ €๋Š” **FastAPI**๋ฅผ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. **์•„๋ฆ„๋‹ต๊ฒŒ ์„ค๊ณ„**๋˜์—ˆ๊ณ , **์‚ฌ์šฉ์ด ๊ฐ„๋‹จ**ํ•˜๋ฉฐ, **ํ™•์žฅ์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜** ์šฐ๋ฆฌ์˜ API ์šฐ์„  ๊ฐœ๋ฐœ ์ „๋žต์—์„œ **ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ**๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค._"
"_ํ”„๋กœ๋•์…˜ Python API๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์ €๋Š” **FastAPI**๋ฅผ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. **์•„๋ฆ„๋‹ต๊ฒŒ ์„ค๊ณ„**๋˜์—ˆ๊ณ , **์‚ฌ์šฉ์ด ๊ฐ„๋‹จ**ํ•˜๋ฉฐ, **ํ™•์žฅ์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜** ์šฐ๋ฆฌ์˜ API ์šฐ์„  ๊ฐœ๋ฐœ ์ „๋žต์—์„œ **ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ**๊ฐ€ ๋˜์—ˆ๊ณ , ์šฐ๋ฆฌ์˜ Virtual TAC Engineer์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ž๋™ํ™”์™€ ์„œ๋น„์Šค๋“ค์„ ์ถ”์ง„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค._"
<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(ref)</small></a></div>
@ -492,9 +492,7 @@ item: Item
### ์•ฑ ๋ฐฐํฌํ•˜๊ธฐ(์„ ํƒ ์‚ฌํ•ญ) { #deploy-your-app-optional }
์„ ํƒ์ ์œผ๋กœ FastAPI ์•ฑ์„ [FastAPI Cloud](https://fastapicloud.com)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง์ด๋ผ๋ฉด ๋Œ€๊ธฐ์ž ๋ช…๋‹จ์— ๋“ฑ๋กํ•ด ๋ณด์„ธ์š”. ๐Ÿš€
์ด๋ฏธ **FastAPI Cloud** ๊ณ„์ •์ด ์žˆ๋‹ค๋ฉด(๋Œ€๊ธฐ์ž ๋ช…๋‹จ์—์„œ ์ดˆ๋Œ€ํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰), ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ ํƒ์ ์œผ๋กœ FastAPI ์•ฑ์„ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์–ด๋กœ [FastAPI Cloud](https://fastapicloud.com)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
<div class="termy">
@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
</div>
CLI๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์ธ์ฆ์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค! ์ด์ œ ํ•ด๋‹น URL์—์„œ ์•ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ
#### FastAPI Cloud ์†Œ๊ฐœ { #about-fastapi-cloud }

24
docs/ko/docs/tutorial/bigger-applications.md

@ -396,9 +396,9 @@ from .routers.users import router
/// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
๋‚ด๋ถ€์ ์œผ๋กœ๋Š” `APIRouter`์— ์„ ์–ธ๋œ ๊ฐ *path operation*๋งˆ๋‹ค *path operation*์„ ์‹ค์ œ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
FastAPI๋Š” ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— router๋ฅผ ํฌํ•จํ•ด๋„ ์›๋ž˜์˜ `APIRouter`์™€ ๊ทธ `APIRoute`๋“ค์„ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋™์ผํ•œ ํ•˜๋‚˜์˜ ์•ฑ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์ปค์Šคํ…€ `APIRouter`์™€ `APIRoute` ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋œ ์ดํ›„์—๋„ ๊ณ„์† ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
///
@ -406,7 +406,7 @@ from .routers.users import router
router๋ฅผ ํฌํ•จ(include)ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
์ด ์ž‘์—…์€ ๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„์ด๋ฉฐ ์‹œ์ž‘ ์‹œ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ธฐ๋Šฅ์€ ๋งค์šฐ ๊ฐ€๋ณ๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๊ณ  ๊ฐ ์š”์ฒญ์— ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. โšก
@ -459,9 +459,9 @@ router๋ฅผ ํฌํ•จ(include)ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
`APIRouter`๋Š” "mount"๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๋Š” OpenAPI ์Šคํ‚ค๋งˆ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ๊ทธ๋“ค์˜ *path operations*๋ฅผ ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด๋Š” OpenAPI ์Šคํ‚ค๋งˆ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ๊ทธ๋“ค์˜ *path operations*๋ฅผ ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
๋‚˜๋จธ์ง€์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•ด "mount"ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, *path operations*๋Š” ์ง์ ‘ ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "clone"(์žฌ์ƒ์„ฑ)๋ฉ๋‹ˆ๋‹ค.
FastAPI๋Š” ์›๋ž˜์˜ router์™€ *path operations*๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ , ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OpenAPI๋ฅผ ์ƒ์„ฑํ•  ๋•Œ router์˜ prefix, dependencies, tags, responses ๋ฐ ๊ธฐํƒ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
///
@ -532,4 +532,16 @@ $ fastapi dev
router.include_router(other_router)
```
`FastAPI` ์•ฑ์— `router`๋ฅผ ํฌํ•จํ•˜๊ธฐ ์ „์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ž˜์•ผ `other_router`์˜ *path operations*๋„ ํ•จ๊ป˜ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
`router`๋ฅผ `FastAPI` ์•ฑ์— ํฌํ•จํ•˜๊ธฐ ์ „์ด๋“  ํ›„๋“ , ์–ด๋А ์‹œ์ ์— ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. FastAPI๋Š” ๋ผ์šฐํŒ…๊ณผ OpenAPI์— `other_router`์˜ *path operations*๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
๋‚˜์ค‘์— router๋“ค์— ์ถ”๊ฐ€๋œ *path operations*๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ˆ˜ํ–‰ํ•œ ํฌํ•จ์„ ํ†ตํ•ด์„œ๋„ ๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
/// warning | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
router๋ฅผ ํฌํ•จํ•œ ๋’ค์— `router.routes`๋ฅผ ์ง์ ‘ ๋ณ€ํ˜•ํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•˜์„ธ์š”. FastAPI๋Š” router ํฌํ•จ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์›๋ž˜ router์™€ ๊ทธ routes๋Š” ๋ผ์šฐํŒ…๊ณผ OpenAPI ์ƒ์„ฑ์˜ ์ผ๋ถ€๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒฝ๋กœ์™€ router๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” path operation ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ `.include_router()` ๊ฐ™์€ ๋ฌธ์„œํ™”๋œ API๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
`router.routes`๋Š” ์ตœ์ข… *path operations*์˜ ํ‰ํƒ„ํ™”๋œ ๋ชฉ๋ก์ด ์•„๋‹ˆ๋ผ, route ์ •์˜์™€ ํฌํ•จ๋œ router๋ฅผ ๋‹ด๋Š” ํ•˜์œ„ ์ˆ˜์ค€์˜ ํŠธ๋ฆฌ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์—ฌ๊ธฐ์— ์˜์กดํ•˜์ง€ ๋งˆ์„ธ์š”.
///

4
docs/ko/docs/tutorial/body-multiple-params.md

@ -111,7 +111,7 @@ q: str | None = None
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`Body` ๋˜ํ•œ `Query`, `Path` ๊ทธ๋ฆฌ๊ณ  ์ดํ›„์— ๋ณผ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋™์ผํ•œ ์ถ”๊ฐ€ ๊ฒ€์ฆ๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
@ -126,7 +126,7 @@ Pydantic ๋ชจ๋ธ `Item`์—์„œ ๊ฐ€์ ธ์˜จ ๋‹จ์ผ `item` ๋ณธ๋ฌธ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์žˆ
ํ•˜์ง€๋งŒ ์ถ”๊ฐ€ ๋ณธ๋ฌธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ์ฒ˜๋Ÿผ, `item` ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ ์•ˆ์— ๋ชจ๋ธ ๋‚ด์šฉ์ด ๋“ค์–ด ์žˆ๋Š” JSON์„ ์˜ˆ์ƒํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, `Body`์˜ ํŠน๋ณ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ `embed`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```Python
item: Item = Body(embed=True)
item: Annotated[Item, Body(embed=True)]
```
๋‹ค์Œ๊ณผ ๊ฐ™์ด์š”:

4
docs/ko/docs/tutorial/body-nested-models.md

@ -136,7 +136,7 @@ Pydantic ๋ชจ๋ธ์˜ ๊ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ํƒ€์ž…์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
}
```
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`images` ํ‚ค๊ฐ€ ์ด์ œ ์ด๋ฏธ์ง€ ๊ฐ์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š”์ง€ ์ฃผ๋ชฉํ•˜์„ธ์š”.
@ -148,7 +148,7 @@ Pydantic ๋ชจ๋ธ์˜ ๊ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ํƒ€์ž…์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
{* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`Offer`๊ฐ€ `Item`์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ , ๊ทธ `Item`์ด ๋‹ค์‹œ ์„ ํƒ ์‚ฌํ•ญ์ธ `Image` ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š”์ง€ ์ฃผ๋ชฉํ•˜์„ธ์š”

2
docs/ko/docs/tutorial/body.md

@ -8,7 +8,7 @@
**์š”์ฒญ** ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๊ฐ•๋ ฅํ•จ๊ณผ ์ด์ ์„ ๊ฐ–์ถ˜ [Pydantic](https://docs.pydantic.dev/) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด, (์ข€ ๋” ๋ณดํŽธ์ ์ธ) `POST`, `PUT`, `DELETE` ํ˜น์€ `PATCH` ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/cookie-param-models.md

@ -32,7 +32,7 @@
<img src="/img/tutorial/cookie-param-models/image01.png">
</div>
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
๋ช…์‹ฌํ•˜์„ธ์š”, ๋‚ด๋ถ€์ ์œผ๋กœ **๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๋ฅผ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ**ํ•˜๊ธฐ ๋•Œ๋ฌธ์— **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ**๊ฐ€ ์‰ฝ๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๊ฑด๋“œ๋ฆด ์ˆ˜ **์—†์Šต๋‹ˆ๋‹ค**.

4
docs/ko/docs/tutorial/cookie-params.md

@ -24,13 +24,13 @@
///
/// info
/// note
์ฟ ํ‚ค๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `Cookie`๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
///
/// info
/// note
**๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๋ฅผ** ๋‚ด๋ถ€์ ์œผ๋กœ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, **JavaScript**๊ฐ€ ์‰ฝ๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃจ๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์—ผ๋‘์— ๋‘์„ธ์š”.

2
docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md

@ -28,7 +28,7 @@
///
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์ด ์˜ˆ์‹œ์—์„œ `X-Key`์™€ `X-Token`์ด๋ผ๋Š” ์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md

@ -170,7 +170,7 @@ participant tasks as Background tasks
end
```
/// info
/// note
ํด๋ผ์ด์–ธํŠธ์—๋Š” **ํ•˜๋‚˜์˜ ์‘๋‹ต**๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜ ์‘๋‹ต ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜๋„ ์žˆ๊ณ , *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—์„œ ์ƒ์„ฑ๋œ ์‘๋‹ต์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/dependencies/index.md

@ -51,7 +51,7 @@
๊ทธ ํ›„ ์œ„์˜ ๊ฐ’์„ ํฌํ•จํ•œ `dict` ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
FastAPI๋Š” 0.95.0 ๋ฒ„์ „๋ถ€ํ„ฐ `Annotated`์— ๋Œ€ํ•œ ์ง€์›์„ (๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค) ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
@ -106,7 +106,7 @@ common_parameters --> read_users
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณต์šฉ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ ์–ด๋„ ๋˜๋ฉฐ, **FastAPI**๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์„ ์œ„ํ•ด ์ด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
/// check | ํ™•์ธ
/// tip | ํŒ
ํŠน๋ณ„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฒƒ ํ˜น์€ ๋น„์Šทํ•œ ์ข…๋ฅ˜๋ฅผ **FastAPI**์— "๋“ฑ๋ก"ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ณณ์— ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/dependencies/sub-dependencies.md

@ -35,7 +35,7 @@
{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ๋Š” `query_or_cookie_extractor`๋ผ๋Š” ์˜์กด์„ฑ ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•˜์„ธ์š”.

35
docs/ko/docs/tutorial/first-steps.md

@ -180,7 +180,7 @@ entrypoint = "backend.main:app"
from backend.main import app
```
### `fastapi dev`์— ๊ฒฝ๋กœ ์ง€์ •ํ•˜๊ธฐ { #fastapi-dev-with-path }
### `fastapi dev`๋ฅผ ๊ฒฝ๋กœ ๋˜๋Š” `--entrypoint` CLI ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
`fastapi dev` ๋ช…๋ น์–ด์— ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉํ•  FastAPI app ๊ฐ์ฒด๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค:
@ -188,29 +188,19 @@ from backend.main import app
$ fastapi dev main.py
```
ํ•˜์ง€๋งŒ ๋งค๋ฒˆ `fastapi` ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด [VS Code ํ™•์žฅ](../editor-support.md)์ด๋‚˜ [FastAPI Cloud](https://fastapicloud.com)๊ฐ€ ์ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, `pyproject.toml`์˜ `entrypoint`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
### ์•ฑ ๋ฐฐํฌํ•˜๊ธฐ(์„ ํƒ ์‚ฌํ•ญ) { #deploy-your-app-optional }
์„ ํƒ์ ์œผ๋กœ FastAPI ์•ฑ์„ [FastAPI Cloud](https://fastapicloud.com)์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋Œ€๊ธฐ์ž ๋ช…๋‹จ์— ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋“ฑ๋กํ•˜๋Ÿฌ ๊ฐ€์„ธ์š”. ๐Ÿš€
์ด๋ฏธ **FastAPI Cloud** ๊ณ„์ •์ด ์žˆ๋‹ค๋ฉด(๋Œ€๊ธฐ์ž ๋ช…๋‹จ์—์„œ ์ดˆ๋Œ€ํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰), ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐํฌํ•˜๊ธฐ ์ „์—, ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:
<div class="termy">
๋˜๋Š” `fastapi dev` ๋ช…๋ น์–ด์— `--entrypoint` ์˜ต์…˜์„ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:
```console
$ fastapi login
You are logged in to FastAPI Cloud ๐Ÿš€
$ fastapi dev --entrypoint main:app
```
</div>
ํ•˜์ง€๋งŒ ๋งค๋ฒˆ `fastapi` ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์˜ฌ๋ฐ”๋ฅธ path\entrypoint๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ๋‹ค์Œ ์•ฑ์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค:
๋˜ํ•œ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด [VS Code ํ™•์žฅ](../editor-support.md)์ด๋‚˜ [FastAPI Cloud](https://fastapicloud.com)๊ฐ€ ์ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, `pyproject.toml`์˜ `entrypoint`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
### ์•ฑ ๋ฐฐํฌํ•˜๊ธฐ(์„ ํƒ ์‚ฌํ•ญ) { #deploy-your-app-optional }
์„ ํƒ์ ์œผ๋กœ FastAPI ์•ฑ์„ [FastAPI Cloud](https://fastapicloud.com)์— ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
<div class="termy">
@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
</div>
CLI๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ ค ์ธ์ฆ ๊ณผ์ •์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค! ์ด์ œ ํ•ด๋‹น URL์—์„œ ์•ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ
## ๋‹จ๊ณ„๋ณ„ ์š”์•ฝ { #recap-step-by-step }
@ -269,8 +261,7 @@ https://example.com/items/foo
```
/items/foo
```
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
"๊ฒฝ๋กœ"๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ "์—”๋“œํฌ์ธํŠธ" ๋˜๋Š” "๋ผ์šฐํŠธ"๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.
@ -322,7 +313,7 @@ API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ •
* ๊ฒฝ๋กœ `/`
* <dfn title="HTTP GET ๋ฉ”์†Œ๋“œ"><code>get</code> ์ž‘๋™</dfn> ์‚ฌ์šฉ
/// info | `@decorator` ์ •๋ณด
/// note | `@decorator` ์ •๋ณด
์ด `@something` ๋ฌธ๋ฒ•์€ ํŒŒ์ด์ฌ์—์„œ "๋ฐ์ฝ”๋ ˆ์ดํ„ฐ"๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/metadata.md

@ -74,7 +74,7 @@ OpenAPI 3.1.0 ๋ฐ FastAPI 0.99.0๋ถ€ํ„ฐ `license_info`์— `url` ๋Œ€์‹  `identifie
{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๊ตฌ์„ฑ](path-operation-configuration.md#tags)์—์„œ ์ฝ์–ด๋ณด์„ธ์š”.

4
docs/ko/docs/tutorial/path-operation-configuration.md

@ -72,13 +72,13 @@
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`response_description`์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์‘๋‹ต์„ ์ง€์นญํ•˜๋ฉฐ, `description`์€ ์ผ๋ฐ˜์ ์ธ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.
///
/// check | ํ™•์ธ
/// tip | ํŒ
OpenAPI๋Š” ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์‘๋‹ต์— ๊ด€ํ•œ ์„ค๋ช…์„ ์š”๊ตฌํ•  ๊ฒƒ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/path-params-numeric-validations.md

@ -8,7 +8,7 @@
{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
FastAPI๋Š” 0.95.0 ๋ฒ„์ „์—์„œ `Annotated` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๊ณ (๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๊ถŒ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค).
@ -131,7 +131,7 @@ FastAPI๋Š” 0.95.0 ๋ฒ„์ „์—์„œ `Annotated` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๊ณ (๊ทธ๋ฆฌ๊ณ  ์ด
* `lt`: `l`ess `t`han
* `le`: `l`ess than or `e`qual
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`Query`, `Path`, ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— ๋ณด๊ฒŒ ๋  ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์€ ๊ณตํ†ต `Param` ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

8
docs/ko/docs/tutorial/path-params.md

@ -20,7 +20,7 @@
์œ„์˜ ์˜ˆ์‹œ์—์„œ, `item_id`๋Š” `int`๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
/// check | ํ™•์ธ
/// tip | ํŒ
์ด ๊ธฐ๋Šฅ์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ, ์ž๋™์™„์„ฑ ๋“ฑ์˜ ํŽธ์ง‘๊ธฐ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
@ -34,7 +34,7 @@
{"item_id":3}
```
/// check | ํ™•์ธ
/// tip | ํŒ
ํ•จ์ˆ˜๊ฐ€ ๋ฐ›์€(๋ฐ˜ํ™˜๋„ ํ•˜๋Š”) ๊ฐ’์€ ๋ฌธ์ž์—ด `"3"`์ด ์•„๋‹ˆ๋ผ ํŒŒ์ด์ฌ `int` ํ˜•์ธ `3`์ž…๋‹ˆ๋‹ค.
@ -66,7 +66,7 @@
`int` ๋Œ€์‹  `float`์„ ์ œ๊ณตํ•˜๋ฉด(์˜ˆ: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)) ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
/// check | ํ™•์ธ
/// tip | ํŒ
์ฆ‰, ํŒŒ์ด์ฌ ํƒ€์ž… ์„ ์–ธ์„ ํ•˜๋ฉด **FastAPI**๋Š” ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ํ•ฉ๋‹ˆ๋‹ค.
@ -82,7 +82,7 @@
<img src="/img/tutorial/path-params/image01.png">
/// check | ํ™•์ธ
/// tip | ํŒ
๋‹ค์‹œ ํ•œ ๋ฒˆ, ๋™์ผํ•œ ํŒŒ์ด์ฌ ํƒ€์ž… ์„ ์–ธ๋งŒ์œผ๋กœ **FastAPI**๋Š” ์ž๋™ ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ(Swagger UI ํ†ตํ•ฉ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/query-params.md

@ -65,7 +65,7 @@ http://127.0.0.1:8000/items/?skip=20
์ด ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ `q`๋Š” ์„ ํƒ์ ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ `None` ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค.
/// check
/// tip | ํŒ
๋˜ํ•œ **FastAPI**๋Š” `item_id`๊ฐ€ ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๊ณ  `q`๋Š” ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ •๋„๋กœ ์ถฉ๋ถ„ํžˆ ๋˜‘๋˜‘ํ•˜๋‹ค๋Š” ์ ๋„ ํ™•์ธํ•˜์„ธ์š”.
@ -181,7 +181,7 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
* `skip`, ๊ธฐ๋ณธ๊ฐ’์ด `0`์ธ `int`.
* `limit`, ์„ ํƒ์ ์ธ `int`.
/// tip
/// tip | ํŒ
[๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜](path-params.md#predefined-values)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ `Enum`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/request-files.md

@ -2,7 +2,7 @@
`File`์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—…๋กœ๋“œํ•  ํŒŒ์ผ๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ์ „๋‹ฌ๋ฐ›๊ธฐ ์œ„ํ•ด ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
@ -28,7 +28,7 @@ $ pip install python-multipart
{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`File` ์€ `Form` ์œผ๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ƒ์†๋œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/request-form-models.md

@ -2,7 +2,7 @@
FastAPI์—์„œ **Pydantic ๋ชจ๋ธ**์„ ์ด์šฉํ•˜์—ฌ **ํผ ํ•„๋“œ**๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
ํผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

2
docs/ko/docs/tutorial/request-forms-and-files.md

@ -2,7 +2,7 @@
`File` ๊ณผ `Form` ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ๊ณผ ํผ ํ•„๋“œ๋ฅผ ๋™์‹œ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info
/// note
์—…๋กœ๋“œ๋œ ํŒŒ์ผ ๋ฐ/๋˜๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

8
docs/ko/docs/tutorial/request-forms.md

@ -2,7 +2,7 @@
JSON ๋Œ€์‹  ํผ ํ•„๋“œ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ `Form`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
ํผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.
@ -30,9 +30,9 @@ $ pip install python-multipart
<dfn title="์‚ฌ์–‘">์‚ฌ์–‘</dfn>์—์„œ๋Š” ํ•„๋“œ ์ด๋ฆ„์ด `username` ๋ฐ `password`๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…๋ช…๋˜์–ด์•ผ ํ•˜๊ณ , JSON์ด ์•„๋‹Œ ํผ ํ•„๋“œ๋กœ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
`Form`์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์˜ˆ์ œ, ๋ณ„์นญ(์˜ˆ: `username` ๋Œ€์‹  `user-name`) ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ `Body`(๋ฐ `Query`, `Path`, `Cookie`)์™€ ๋™์ผํ•œ ๊ตฌ์„ฑ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
`Form`์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์˜ˆ์ œ, ๋ณ„์นญ(์˜ˆ: `user-name` ๋Œ€์‹  `username`) ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ `Body`(๋ฐ `Query`, `Path`, `Cookie`)์™€ ๋™์ผํ•œ ๊ตฌ์„ฑ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`Form`์€ `Body`์—์„œ ์ง์ ‘ ์ƒ์†๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
@ -56,7 +56,7 @@ HTML ํผ(`<form></form>`)์ด ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์€ ์ผ๋ฐ˜
๊ทธ๋Ÿฌ๋‚˜ ํผ์— ํŒŒ์ผ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ, `multipart/form-data`๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์žฅ์—์„œ ํŒŒ์ผ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์ฝ์„ ๊ฒ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ธ์ฝ”๋”ฉ ๋ฐ ํผ ํ•„๋“œ์— ๋Œ€ํ•ด ๋” ์ฝ๊ณ  ์‹ถ๋‹ค๋ฉด, [`POST`์— ๋Œ€ํ•œ <abbr title="Mozilla Developer Network - Mozilla ๊ฐœ๋ฐœ์ž ๋„คํŠธ์›Œํฌ">MDN</abbr> ์›น ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
์ด๋Ÿฌํ•œ ์ธ์ฝ”๋”ฉ ๋ฐ ํผ ํ•„๋“œ์— ๋Œ€ํ•ด ๋” ์ฝ๊ณ  ์‹ถ๋‹ค๋ฉด, [`POST`์— ๋Œ€ํ•œ <abbr title="Mozilla Developer Network - ๋ชจ์งˆ๋ผ ๊ฐœ๋ฐœ์ž ๋„คํŠธ์›Œํฌ">MDN</abbr> ์›น ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
///

8
docs/ko/docs/tutorial/response-model.md

@ -72,7 +72,7 @@ FastAPI๋Š” ์ด `response_model`์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ฌธ์„œํ™”, ๊ฒ€์ฆ ๋“ฑ์„
{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`EmailStr`์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € [`email-validator`](https://github.com/JoshData/python-email-validator)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.
@ -202,11 +202,11 @@ FastAPI๋Š” Pydantic์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ํด๋ž˜
ํ•˜์ง€๋งŒ ์œ ํšจํ•œ Pydantic ํƒ€์ž…์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ž„์˜์˜ ๊ฐ์ฒด(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ•จ์ˆ˜์—์„œ ๊ทธ๋ ‡๊ฒŒ ์–ด๋…ธํ…Œ์ด์…˜ํ•˜๋ฉด, FastAPI๋Š” ๊ทธ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ๋ถ€ํ„ฐ Pydantic ์‘๋‹ต ๋ชจ๋ธ์„ ๋งŒ๋“ค๋ ค๊ณ  ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ, ์œ ํšจํ•œ Pydantic ํƒ€์ž…์ด ์•„๋‹Œ ํƒ€์ž…์ด ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํƒ€์ž… ๊ฐ„์˜ <dfn title="์—ฌ๋Ÿฌ ํƒ€์ž… ๊ฐ„์˜ union์€ '์ด ํƒ€์ž…๋“ค ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜'๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.">union</dfn>์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ฅ:
๋˜ํ•œ, ์œ ํšจํ•œ Pydantic ํƒ€์ž…์ด ์•„๋‹Œ ํƒ€์ž…์ด ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํƒ€์ž… ๊ฐ„์˜ <dfn title="์—ฌ๋Ÿฌ ํƒ€์ž… ๊ฐ„์˜ ์œ ๋‹ˆ์˜จ์€ '์ด ํƒ€์ž…๋“ค ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜'๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.">์œ ๋‹ˆ์˜จ</dfn>์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ฅ:
{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
...์ด๋Š” ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ด Pydantic ํƒ€์ž…์ด ์•„๋‹ˆ๊ณ , ๋‹จ์ผ `Response` ํด๋ž˜์Šค/์„œ๋ธŒํด๋ž˜์Šค๋„ ์•„๋‹ˆ๋ฉฐ, `Response`์™€ `dict` ๊ฐ„ union(๋‘˜ ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜)์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
...์ด๋Š” ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ด Pydantic ํƒ€์ž…์ด ์•„๋‹ˆ๊ณ , ๋‹จ์ผ `Response` ํด๋ž˜์Šค/์„œ๋ธŒํด๋ž˜์Šค๋„ ์•„๋‹ˆ๋ฉฐ, `Response`์™€ `dict` ๊ฐ„ ์œ ๋‹ˆ์˜จ(๋‘˜ ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜)์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
### ์‘๋‹ต ๋ชจ๋ธ ๋น„ํ™œ์„ฑํ™” { #disable-response-model }
@ -251,7 +251,7 @@ FastAPI๋Š” Pydantic์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ํด๋ž˜
}
```
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
๋‹ค์Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

4
docs/ko/docs/tutorial/response-status-code.md

@ -12,13 +12,13 @@
/// note | ์ฐธ๊ณ 
`status_code` ๋Š” "๋ฐ์ฝ”๋ ˆ์ดํ„ฐ" ๋ฉ”์†Œ๋“œ(`get`, `post` ๋“ฑ)์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค๊ณผ ๋ณธ๋ฌธ์ฒ˜๋Ÿผ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
`status_code` ๋Š” "๋ฐ์ฝ”๋ ˆ์ดํ„ฐ" ๋ฉ”์†Œ๋“œ(`get`, `post` ๋“ฑ)์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ณธ๋ฌธ๊ณผ ๋‹ฌ๋ฆฌ, *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
///
`status_code` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ˆซ์ž๋กœ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`status_code` ๋Š” ํŒŒ์ด์ฌ์˜ [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) ์™€ ๊ฐ™์€ `IntEnum` ์„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

6
docs/ko/docs/tutorial/schema-extra-example.md

@ -24,7 +24,7 @@ JSON ์Šคํ‚ค๋งˆ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ณ„๋„์˜ ์ž์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€
///
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
(FastAPI 0.99.0๋ถ€ํ„ฐ ์“ฐ์ด๊ธฐ ์‹œ์ž‘ํ•œ) OpenAPI 3.1.0์€ **JSON ์Šคํ‚ค๋งˆ** ํ‘œ์ค€์˜ ์ผ๋ถ€์ธ `examples`์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
@ -155,7 +155,7 @@ OpenAPI๋Š” ๋˜ํ•œ `example`๊ณผ `examples` ํ•„๋“œ๋ฅผ ๋ช…์„ธ์„œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„
* `File()`
* `Form()`
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์ด ์˜ˆ์ „ OpenAPI-ํŠนํ™” `examples` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด์ œ FastAPI `0.103.0`๋ถ€ํ„ฐ `openapi_examples`์ž…๋‹ˆ๋‹ค.
@ -171,7 +171,7 @@ OpenAPI๋Š” ๋˜ํ•œ `example`๊ณผ `examples` ํ•„๋“œ๋ฅผ ๋ช…์„ธ์„œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„
JSON ์Šคํ‚ค๋งˆ์˜ ์ƒˆ๋กœ์šด `examples` ํ•„๋“œ๋Š” ์˜ˆ์ œ์˜ **๋‹จ์ˆœํ•œ `list`**์ผ ๋ฟ์ด๋ฉฐ, (์œ„์—์„œ ์ƒ์ˆ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ) OpenAPI์˜ ๋‹ค๋ฅธ ๊ณณ์— ์กด์žฌํ•˜๋Š” ์ถ”๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” dict๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
๋” ์‰ฝ๊ณ  ์ƒˆ๋กœ์šด JSON ์Šคํ‚ค๋งˆ์™€์˜ ํ†ตํ•ฉ๊ณผ ํ•จ๊ป˜ OpenAPI 3.1.0๊ฐ€ ๋ฐฐํฌ๋˜์—ˆ์ง€๋งŒ, ์ž ์‹œ๋™์•ˆ ์ž๋™ ๋ฌธ์„œ ์ƒ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์ธ Swagger UI๋Š” OpenAPI 3.1.0์„ ์ง€์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (5.0.0 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰).

10
docs/ko/docs/tutorial/security/first-steps.md

@ -24,7 +24,7 @@
## ์‹คํ–‰ํ•˜๊ธฐ { #run-it }
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
[`python-multipart`](https://github.com/Kludex/python-multipart) ํŒจํ‚ค์ง€๋Š” `pip install "fastapi[standard]"` ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด **FastAPI**์™€ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
@ -60,7 +60,7 @@ $ fastapi dev
<img src="/img/tutorial/security/image01.png">
/// check | Authorize ๋ฒ„ํŠผ!
/// tip | Authorize ๋ฒ„ํŠผ!
๋ฐ˜์ง์ด๋Š” ์ƒˆ "Authorize" ๋ฒ„ํŠผ์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.
@ -118,7 +118,7 @@ OAuth2๋Š” backend ๋˜๋Š” API๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋Š” ์„œ๋ฒ„์™€ ๋…๋ฆฝ์ ์ผ
์ด ์˜ˆ์ œ์—์„œ๋Š” **OAuth2**์˜ **Password** ํ”Œ๋กœ์šฐ์™€ **Bearer** token์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด `OAuth2PasswordBearer` ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
"bearer" token๋งŒ์ด ์œ ์ผํ•œ ์„ ํƒ์ง€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
@ -148,7 +148,7 @@ OAuth2๋Š” backend ๋˜๋Š” API๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋Š” ์„œ๋ฒ„์™€ ๋…๋ฆฝ์ ์ผ
๊ณง ์‹ค์ œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์—„๊ฒฉํ•œ "Pythonista"๋ผ๋ฉด `token_url` ๋Œ€์‹  `tokenUrl` ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„ ์Šคํƒ€์ผ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
@ -176,7 +176,7 @@ oauth2_scheme(some, parameters)
**FastAPI**๋Š” ์ด ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•ด OpenAPI ์Šคํ‚ค๋งˆ(๋ฐ ์ž๋™ API ๋ฌธ์„œ)์— "security scheme"๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
/// info | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
/// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
**FastAPI**๋Š” (์˜์กด์„ฑ์— ์„ ์–ธ๋œ) `OAuth2PasswordBearer` ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด OpenAPI์—์„œ ๋ณด์•ˆ ์Šคํ‚ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” `OAuth2PasswordBearer`๊ฐ€ `fastapi.security.oauth2.OAuth2`๋ฅผ ์ƒ์†ํ•˜๊ณ , ์ด๊ฒƒ์ด ๋‹ค์‹œ `fastapi.security.base.SecurityBase`๋ฅผ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/security/get-current-user.md

@ -52,7 +52,7 @@ Pydantic์„ ์‚ฌ์šฉํ•ด ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, ๋‹ค๋ฅธ
///
/// check | ํ™•์ธ
/// tip | ํŒ
์ด ์˜์กด์„ฑ ์‹œ์Šคํ…œ์ด ์„ค๊ณ„๋œ ๋ฐฉ์‹์€ ๋ชจ๋‘ `User` ๋ชจ๋ธ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์˜์กด์„ฑ(์„œ๋กœ ๋‹ค๋ฅธ "dependables")์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

6
docs/ko/docs/tutorial/security/oauth2-jwt.md

@ -1,6 +1,6 @@
# ํŒจ์Šค์›Œ๋“œ(ํ•ด์‹ฑ ํฌํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OAuth2, JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” Bearer { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
๋ชจ๋“  ๋ณด์•ˆ ํ๋ฆ„์„ ๊ตฌ์„ฑํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ œ <abbr title="JSON ์›น ํ† ํฐ">JWT</abbr> ํ† ํฐ๊ณผ ์•ˆ์ „ํ•œ ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ๋ณด์•ˆ ํ๋ฆ„์„ ๊ตฌ์„ฑํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ œ <abbr title="JSON Web Tokens - JSON ์›น ํ† ํฐ">JWT</abbr> ํ† ํฐ๊ณผ ์•ˆ์ „ํ•œ ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŒจ์Šค์›Œ๋“œ ํ•ด์‹œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@ -42,7 +42,7 @@ $ pip install pyjwt
</div>
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
RSA๋‚˜ ECDSA ๊ฐ™์€ ์ „์ž ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด๋ผ๋ฉด, cryptography ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์ธ `pyjwt[crypto]`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
@ -213,7 +213,7 @@ JWT๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ API์—์„œ ์ง์ ‘ ์ž‘์—…์„ ์ˆ˜ํ–‰
Username: `johndoe`
Password: `secret`
/// check | ํ™•์ธ
/// tip | ํŒ
์ฝ”๋“œ ์–ด๋””์—๋„ ํ‰๋ฌธ ํŒจ์Šค์›Œ๋“œ "`secret`"์€ ์—†๊ณ , ํ•ด์‹œ๋œ ๋ฒ„์ „๋งŒ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

8
docs/ko/docs/tutorial/security/simple-oauth2.md

@ -32,7 +32,7 @@ OAuth2๋Š” (์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”) "ํŒจ์Šค์›Œ๋“œ ํ”Œ๋กœ์šฐ"์„ ์‚ฌ์šฉํ• 
* `instagram_basic`์€ ํŽ˜์ด์Šค๋ถ/์ธ์Šคํƒ€๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
* `https://www.googleapis.com/auth/drive`๋Š” Google์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
OAuth2์—์„œ "๋ฒ”์œ„"๋Š” ํ•„์š”ํ•œ ํŠน์ • ๊ถŒํ•œ์„ ์„ ์–ธํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
@ -72,7 +72,7 @@ OAuth2 ์‚ฌ์–‘์€ ์‹ค์ œ๋กœ `password`๋ผ๋Š” ๊ณ ์ • ๊ฐ’์ด ์žˆ๋Š” `grant_type`
* `client_id`(์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ) (์˜ˆ์ œ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
* `client_secret`(์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ) (์˜ˆ์ œ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`OAuth2PasswordRequestForm`์€ `OAuth2PasswordBearer`์™€ ๊ฐ™์ด **FastAPI**์— ๋Œ€ํ•œ ํŠน์ˆ˜ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
@ -144,7 +144,7 @@ UserInDB(
)
```
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`**user_dict`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ [**์ถ”๊ฐ€ ๋ชจ๋ธ** ๋ฌธ์„œ](../extra-models.md#about-user-in-dict)๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด์„ธ์š”.
@ -196,7 +196,7 @@ UserInDB(
{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
์—ฌ๊ธฐ์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์ด `Bearer`์ธ ์ถ”๊ฐ€ ํ—ค๋” `WWW-Authenticate`๋„ ์‚ฌ์–‘์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

2
docs/ko/docs/tutorial/server-sent-events.md

@ -4,7 +4,7 @@
์ด๋Š” [JSON Lines ์ŠคํŠธ๋ฆฌ๋ฐ](stream-json-lines.md)๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource)๋ฅผ ํ†ตํ•ด ์ง€์›ํ•˜๋Š” `text/event-stream` ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
FastAPI 0.135.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/stream-json-lines.md

@ -2,7 +2,7 @@
์—ฐ์†๋œ ๋ฐ์ดํ„ฐ๋ฅผ "**์ŠคํŠธ๋ฆผ**"์œผ๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด **JSON Lines**๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
/// info
/// note
FastAPI 0.134.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@ -48,7 +48,7 @@ sequenceDiagram
JSON ๋ฐฐ์—ด(Python์˜ list์— ํ•ด๋‹น)๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ํ•ญ๋ชฉ๋“ค์„ `[]`๋กœ ๊ฐ์‹ธ๊ณ  ํ•ญ๋ชฉ ์‚ฌ์ด์— `,`๋ฅผ ๋„ฃ๋Š” ๋Œ€์‹ , ์ค„๋งˆ๋‹ค ํ•˜๋‚˜์˜ JSON ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , ์ƒˆ ์ค„ ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
/// info
/// note
ํ•ต์‹ฌ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ ์ค„์„ ์ฐจ๋ก€๋กœ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ด์ „ ์ค„์„ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

4
docs/ko/docs/tutorial/testing.md

@ -8,7 +8,7 @@
## `TestClient` ์‚ฌ์šฉํ•˜๊ธฐ { #using-testclient }
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`TestClient` ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์šฐ์„  [`httpx`](https://www.python-httpx.org)๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
@ -144,7 +144,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์™ธ์—๋„ ํ…Œ์ŠคํŠธ์—์„œ
๋ฐฑ์—”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด๋Š”์ง€ ์ •๋ณด๋ฅผ ๋” ์–ป์œผ๋ ค๋ฉด (`httpx` ํ˜น์€ `TestClient`๋ฅผ ์ด์šฉํ•ด์„œ) [HTTPX ๋ฌธ์„œ](https://www.python-httpx.org)๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
/// info | ์ •๋ณด
/// note | ์ฐธ๊ณ 
`TestClient`๋Š” Pydantic ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ JSON์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

Loadingโ€ฆ
Cancel
Save