]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
๐ŸŒ Update translations for ko (update-outdated) (#15757)
authorSebastiรกn Ramรญrez <tiangolo@gmail.com>
Mon, 15 Jun 2026 21:13:54 +0000 (23:13 +0200)
committerGitHub <noreply@github.com>
Mon, 15 Jun 2026 21:13:54 +0000 (21:13 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
52 files changed:
docs/ko/docs/advanced/additional-responses.md
docs/ko/docs/advanced/advanced-dependencies.md
docs/ko/docs/advanced/custom-response.md
docs/ko/docs/advanced/dataclasses.md
docs/ko/docs/advanced/events.md
docs/ko/docs/advanced/generate-clients.md
docs/ko/docs/advanced/openapi-callbacks.md
docs/ko/docs/advanced/openapi-webhooks.md
docs/ko/docs/advanced/path-operation-advanced-configuration.md
docs/ko/docs/advanced/response-directly.md
docs/ko/docs/advanced/security/oauth2-scopes.md
docs/ko/docs/advanced/stream-data.md
docs/ko/docs/advanced/strict-content-type.md
docs/ko/docs/advanced/websockets.md
docs/ko/docs/advanced/wsgi.md
docs/ko/docs/deployment/docker.md
docs/ko/docs/deployment/fastapicloud.md
docs/ko/docs/deployment/manually.md
docs/ko/docs/deployment/server-workers.md
docs/ko/docs/how-to/extending-openapi.md
docs/ko/docs/how-to/separate-openapi-schemas.md
docs/ko/docs/index.md
docs/ko/docs/tutorial/bigger-applications.md
docs/ko/docs/tutorial/body-multiple-params.md
docs/ko/docs/tutorial/body-nested-models.md
docs/ko/docs/tutorial/body.md
docs/ko/docs/tutorial/cookie-param-models.md
docs/ko/docs/tutorial/cookie-params.md
docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
docs/ko/docs/tutorial/dependencies/index.md
docs/ko/docs/tutorial/dependencies/sub-dependencies.md
docs/ko/docs/tutorial/first-steps.md
docs/ko/docs/tutorial/metadata.md
docs/ko/docs/tutorial/path-operation-configuration.md
docs/ko/docs/tutorial/path-params-numeric-validations.md
docs/ko/docs/tutorial/path-params.md
docs/ko/docs/tutorial/query-params.md
docs/ko/docs/tutorial/request-files.md
docs/ko/docs/tutorial/request-form-models.md
docs/ko/docs/tutorial/request-forms-and-files.md
docs/ko/docs/tutorial/request-forms.md
docs/ko/docs/tutorial/response-model.md
docs/ko/docs/tutorial/response-status-code.md
docs/ko/docs/tutorial/schema-extra-example.md
docs/ko/docs/tutorial/security/first-steps.md
docs/ko/docs/tutorial/security/get-current-user.md
docs/ko/docs/tutorial/security/oauth2-jwt.md
docs/ko/docs/tutorial/security/simple-oauth2.md
docs/ko/docs/tutorial/server-sent-events.md
docs/ko/docs/tutorial/stream-json-lines.md
docs/ko/docs/tutorial/testing.md

index e43d7c727ffd806531fe9de3a2ca3ca0a0783a48..87866946b3e61b106c1ab16e88fe51af48e1cd6b 100644 (file)
@@ -34,7 +34,7 @@
 
 ///
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 `model` ํ‚ค๋Š” OpenAPI์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
 
 
 ///
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 `responses` ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ, FastAPI๋Š” ์‘๋‹ต์ด ์ฃผ์š” ์‘๋‹ต ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๋ฏธ๋””์–ด ํƒ€์ž…(๊ธฐ๋ณธ๊ฐ’ `application/json`)์„ ๊ฐ€์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
 
index 2755986a21e4de6bed4befc80a50518496f0680d..3a35bbfc7fbd3b5e602e3f7f2fd5a8b603ecfe25 100644 (file)
@@ -99,7 +99,7 @@ FastAPI 0.118.0 ์ด์ „์—๋Š” `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, *๊ฒฝ
 
 ์ด ๋™์ž‘์€ 0.118.0์—์„œ ๋˜๋Œ๋ ค์ ธ, `yield` ์ดํ›„์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€ ์‘๋‹ต์ด ์ „์†ก๋œ ๋’ค ์‹คํ–‰๋˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์•„๋ž˜์—์„œ ๋ณด์‹œ๊ฒ ์ง€๋งŒ, ์ด๋Š” 0.106.0 ๋ฒ„์ „ ์ด์ „์˜ ๋™์ž‘๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์„  ์‚ฌํ•ญ๊ณผ ์ฝ”๋„ˆ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
index e85ec3c743cd201e8468b66e9664ccc620ade528..c8c703ac23262743a40cf51ef7344e3ba4eb6bb5 100644 (file)
@@ -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] *}
 
index 77e8d0464cbef492f573278a147ae32e98de3b0f..fb5d9fbd9ba421f2e06a2cf69489ff9a4405af71 100644 (file)
@@ -18,7 +18,7 @@ FastAPI๋Š” **Pydantic** ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ง€๊ธˆ๊นŒ์ง€๋Š” Pydantic
 
 ์ด๋Š” Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Pydantic์„ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
 
-/// info
+/// note
 
 dataclasses๋Š” Pydantic ๋ชจ๋ธ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.
 
index 708ad443ffc8074afb6c2c4ebb4edd0b97d8e36d..24ce55b4c1d4a388532800fbb6152f7c2ba46ca4 100644 (file)
@@ -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/)์—์„œ ๋” ์ฝ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
index 1c2e32377869e7e8302fa9acb0ca8c2e06119f6a..f85db8cb911820fa602fce1a2b1980a7f6ffa42a 100644 (file)
@@ -2,7 +2,7 @@
 
 **FastAPI**๋Š” **OpenAPI** ์‚ฌ์–‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ, FastAPI์˜ API๋Š” ๋งŽ์€ ๋„๊ตฌ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รซ\8d\95รซยถ\84รฌ\97\90 รฌ\97ยฌรซ\9fยฌ รฌ\96ยธรฌ\96ยดรฌ\9aยฉ รญ\81ยดรซ\9dยผรฌ\9dยดรฌ\96ยธรญ\8aยธ รซ\9dยผรฌ\9dยดรซยธ\8cรซ\9fยฌรซยฆยฌ(<abbr title="Software Development Kits - รฌ\86\8cรญ\94\84รญ\8aยธรฌ\9bยจรฌ\96ยด รชยฐ\9cรซยฐ\9c รญ\82ยครญ\8aยธ">**SDKs**</abbr>), รฌยต\9cรฌ\8bย  **รซยฌยธรฌ\84\9c**, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ์™€ ๋™๊ธฐํ™”๋œ **ํ…Œ์ŠคํŠธ** ๋˜๋Š” **์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ**๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รซ\8d\95รซยถ\84รฌ\97\90 รฌยต\9cรฌ\8bย  **รซยฌยธรฌ\84\9c**, รฌ\97ยฌรซ\9fยฌ รฌ\96ยธรฌ\96ยดรฌ\9aยฉ รญ\81ยดรซ\9dยผรฌ\9dยดรฌ\96ยธรญ\8aยธ รซ\9dยผรฌ\9dยดรซยธ\8cรซ\9fยฌรซยฆยฌ(<abbr title="Software Development Kits - รฌ\86\8cรญ\94\84รญ\8aยธรฌ\9bยจรฌ\96ยด รชยฐ\9cรซยฐ\9c รญ\82ยครญ\8aยธ">**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 ์ƒ์„ฑ๊ธฐ๋„ ์žˆ์œผ๋ฉฐ ์˜จ๋ผ์ธ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“
 
index fa71acdcf8c18dfd0d94a72f4897d2c3e834b021..f9769209afa2809246b667282dbbdda1bf3eae16 100644 (file)
@@ -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 ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
 
 ///
 
index e40a7bb186d24f9f055983287facbd476f29ae4e..bb3f7895c9a4f83d466b15f338a018506d1adf43 100644 (file)
@@ -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`์ผ ๋ฟ์ด๋ฉฐ, ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ์•ฑ์„ ๊ตฌ์กฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
 
index 253a6f3021e2d9be9e301db3a660040558470ec4..39881600582068e5b7370c93b02818f742136923 100644 (file)
@@ -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 ๋ชจ๋ธ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
index 301a259b2f1d0463bdf9743fc9022fb88fa5dbf3..fc2efc728e422d7c3ee2a96473fea45e0b7989c1 100644 (file)
@@ -18,7 +18,7 @@
 
 `Response` ๋˜๋Š” ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 `JSONResponse` ์ž์ฒด๋„ `Response`์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
 
index 5a785ff9fdcec46bf8ccf47041a2f36032ffa40c..6aed77f752cc08e55a7e7c40dabdf04563930281 100644 (file)
@@ -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`์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด๋ฉฐ, ๋‚˜์ค‘์— ๋ณด๊ฒŒ ๋  ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•˜๋‚˜๋งŒ ๋” ์žˆ์Šต๋‹ˆ๋‹ค.
 
index 5eda170cb54130117677a539de796e0a3f477e27..33013fddd7875adf54996e2b6717b9d4b6e0e28c 100644 (file)
@@ -4,7 +4,7 @@ JSON์œผ๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด [JSON Line
 
 ํ•˜์ง€๋งŒ ์ˆœ์ˆ˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 FastAPI 0.134.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
@@ -90,7 +90,7 @@ FastAPI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹
 
 ๋˜ํ•œ ๋””์Šคํฌ๋‚˜ ๋„คํŠธ์›Œํฌ์—์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฒฝ์šฐ ์ฝ๊ธฐ ์ž‘์—…์€ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๋ธ”๋กœํ‚น ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์œ„์˜ ์˜ˆ์‹œ๋Š” ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. `io.BytesIO` ๊ฐ์ฒด๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฏ€๋กœ ์ฝ๊ธฐ๊ฐ€ ์•„๋ฌด ๊ฒƒ๋„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
index 82683e15c38427373644fe1df3215e859adc6662..39ecde4b6fbb05c4cdc573fa4c6d34eb589a395a 100644 (file)
@@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac
 
 ์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด `Content-Type` ํ—ค๋”๊ฐ€ ์—†๋Š” ์š”์ฒญ๋„ ๋ณธ๋ฌธ์ด JSON์œผ๋กœ ํŒŒ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ๋ฒ„์ „์˜ FastAPI์™€ ๋™์ผํ•œ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์ด ๋™์ž‘๊ณผ ์„ค์ •์€ FastAPI 0.132.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
index 0b920c3b388e48454d329d2eaf05dbb7e18dfe4e..b37d938040a1c7bf47fc471fe05be3b154edc295 100644 (file)
@@ -111,7 +111,7 @@ WebSocket ์—”๋“œํฌ์ธํŠธ์—์„œ `fastapi`์—์„œ ๋‹ค์Œ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  
 
 {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 WebSocket์ด๊ธฐ ๋•Œ๋ฌธ์— `HTTPException`์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  `WebSocketException`์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
 
index 921e426efd245c062e9752e22215aaf2fcae3603..bd359661d84781b47091222451b97a3fe5bacab1 100644 (file)
@@ -6,7 +6,7 @@
 
 ## `WSGIMiddleware` ์‚ฌ์šฉํ•˜๊ธฐ { #using-wsgimiddleware }
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `a2wsgi`๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: `pip install a2wsgi`
 
index d965af1d1eddc6ae42a855143993ee5dc7c104bc..93e69873a9ae6b279220da2d0b462b68f3a9e21d 100644 (file)
@@ -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/)์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
index a601f5416c01ac2df8299869d5ce76a90be43bc7..5fe057f47b5af10d200b59fa5eaaf1791dfcd2b1 100644 (file)
@@ -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 }
index 7199686829280cd1e50442a51e449a2a603f2959..b2a91bd9412d89d3b9181524aa0efd2d4ac59666 100644 (file)
@@ -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 }
 
index 9cc1a9a81602d0ebc504ce500f98190bc2788915..a9d06242a4aae83129edbe740b7831338d0b855c 100644 (file)
@@ -17,7 +17,7 @@
 
 ์—ฌ๊ธฐ์„œ๋Š” `fastapi` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `uvicorn` ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ, **์›Œ์ปค ํ”„๋กœ์„ธ์Šค**์™€ ํ•จ๊ป˜ **Uvicorn**์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 Docker๋‚˜ Kubernetes ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค์Œ ์žฅ์ธ [์ปจํ…Œ์ด๋„ˆ์—์„œ์˜ FastAPI - ๋„์ปค](docker.md)์—์„œ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
 
index 992243dbe5c0843c7f08777056882c6fad62d299..cdfa89d553c2aa8f4e413a73f44dffa6916eb854 100644 (file)
 * `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 ์ด์ƒ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
 
index 2dd76a3b4cee15e27dbfcb975cd0e8ad0fdfa8e5..207381804916cb8563fba9c54ec4c23d918a3862 100644 (file)
@@ -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`์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“
 
index 0dd0bef59eda30f4bb2641fbd662f742a8befc3a..33f34b416f070b6703d6574fa717fd00c2f4180a 100644 (file)
@@ -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 }
index a206bfdc19f948bd4848a255d6f1929f4d8155b9..f9528604748361c8a755acc59f610dfaaf2c259f 100644 (file)
@@ -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"๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
-รฌ\9dยดรซ\8a\94 OpenAPI รฌ\8aยครญ\82ยครซยง\88รฌ\99\80 รฌ\82ยฌรฌ\9aยฉรฌ\9e\90 รฌ\9dยธรญ\84ยฐรญ\8e\98รฌ\9dยดรฌ\8aยครฌ\97\90 รชยทยธรซ\93ยครฌ\9d\98 *path operations*รซยฅยผ รญ\8fยฌรญ\95ยจรฌ\8b\9cรญ\82ยครชยณย  รฌ\8bยถรชยธยฐ รซ\95\8cรซยฌยธ์ž…๋‹ˆ๋‹ค.
+รฌ\9dยดรซ\8a\94 OpenAPI รฌ\8aยครญ\82ยครซยง\88รฌ\99\80 รฌ\82ยฌรฌ\9aยฉรฌ\9e\90 รฌ\9dยธรญ\84ยฐรญ\8e\98รฌ\9dยดรฌ\8aยครฌ\97\90 รชยทยธรซ\93ยครฌ\9d\98 *path operations*รซยฅยผ รญ\8fยฌรญ\95ยจรฌ\8b\9cรญ\82ยครชยธยฐ รฌ\9c\84รญ\95ยจ์ž…๋‹ˆ๋‹ค.
 
-รซ\82\98รซยจยธรฌยง\80รฌ\99\80 รซ\8f\85รซยฆยฝรฌย \81รฌ\9cยผรซยก\9c รชยฒยฉรซยฆยฌรญ\95ยด "mount"รญ\95ย  รฌ\88\98 รฌ\97\86รฌ\9cยผรซยฏ\80รซยก\9c, *path operations*รซ\8a\94 รฌยง\81รฌย \91 รญ\8fยฌรญ\95ยจรซ\90\98รซ\8a\94 รชยฒ\83รฌ\9dยด รฌ\95\84รซ\8b\88รซ\9dยผ "clone"(รฌ\9eยฌรฌ\83\9dรฌ\84ยฑ)รซ\90ยฉรซ\8b\88รซ\8bยค.
+FastAPIรซ\8a\94 รฌ\9b\90รซ\9e\98รฌ\9d\98 routerรฌ\99\80 *path operations*รซยฅยผ รญ\99\9cรฌ\84ยฑ รฌ\83\81รญ\83\9cรซยก\9c รฌ\9cย รฌยง\80รญ\95\98รชยณย , รฌ\9a\94รฌยฒยญรฌ\9d\84 รฌยฒ\98รซยฆยฌรญ\95\98รชยณย  OpenAPIรซยฅยผ รฌ\83\9dรฌ\84ยฑรญ\95ย  รซ\95\8c routerรฌ\9d\98 prefix, dependencies, tags, responses รซยฐ\8f รชยธยฐรญ\83\80 รซยฉ\94รญ\83\80รซ\8dยฐรฌ\9dยดรญ\84ยฐรซยฅยผ รชยฒยฐรญ\95ยฉรญ\95ยฉรซ\8b\88รซ\8bยค.
 
 ///
 
@@ -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๋ฅผ ๋‹ด๋Š” ํ•˜์œ„ ์ˆ˜์ค€์˜ ํŠธ๋ฆฌ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์—ฌ๊ธฐ์— ์˜์กดํ•˜์ง€ ๋งˆ์„ธ์š”.
+
+///
index 3db614d72b4ae9e9c6a746cb75d2b9a53a533c69..c686e8a5abd347879bfa5bc49f74e56a3564863a 100644 (file)
@@ -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)]
 ```
 
 ๋‹ค์Œ๊ณผ ๊ฐ™์ด์š”:
index bbb95cf00b3fa6bd85ccd77ab75bb6ef8ab5119a..e6c70d179c19c99e120990cdf768a9a96b423b1c 100644 (file)
@@ -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` ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š”์ง€ ์ฃผ๋ชฉํ•˜์„ธ์š”
 
index d124b4bef03d2a4bb4cd2e74222a56b1cdd2f7b5..e5a670baf4fe49675db968e95d79b20aec02cfd1 100644 (file)
@@ -8,7 +8,7 @@
 
 **์š”์ฒญ** ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๊ฐ•๋ ฅํ•จ๊ณผ ์ด์ ์„ ๊ฐ–์ถ˜ [Pydantic](https://docs.pydantic.dev/) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด, (์ข€ ๋” ๋ณดํŽธ์ ์ธ) `POST`, `PUT`, `DELETE` ํ˜น์€ `PATCH` ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
 
index 70b76e09cefab87a03ba7a127379e6f2a73c8b58..2105bea862ee88f86b6ae98e67227d351006a2ff 100644 (file)
@@ -32,7 +32,7 @@
 <img src="/img/tutorial/cookie-param-models/image01.png">
 </div>
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ๋ช…์‹ฌํ•˜์„ธ์š”, ๋‚ด๋ถ€์ ์œผ๋กœ **๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๋ฅผ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ**ํ•˜๊ธฐ ๋•Œ๋ฌธ์— **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ**๊ฐ€ ์‰ฝ๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๊ฑด๋“œ๋ฆด ์ˆ˜ **์—†์Šต๋‹ˆ๋‹ค**.
 
index 6ea09101c32aca4e63b6b3289e80e2f46f23a14d..223d896e0d8c32e9906168d059457331837bea68 100644 (file)
 
 ///
 
-/// info
+/// note
 
 ์ฟ ํ‚ค๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `Cookie`๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 
 ///
 
-/// info
+/// note
 
 **๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๋ฅผ** ๋‚ด๋ถ€์ ์œผ๋กœ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, **JavaScript**๊ฐ€ ์‰ฝ๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃจ๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์—ผ๋‘์— ๋‘์„ธ์š”.
 
index 880a47157f7507f9ba75b89f7a33b0a87e3d0556..f31a5758672bb6b0f2c28a7f5f6befd4de712630 100644 (file)
@@ -28,7 +28,7 @@
 
 ///
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์ด ์˜ˆ์‹œ์—์„œ `X-Key`์™€ `X-Token`์ด๋ผ๋Š” ์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
 
index 56f690f5939066d4a4f89d79bec0e5ec2c9dc7b5..61bb47d9da8c3fb3f06ba4d30ee695fdf68f91b8 100644 (file)
@@ -170,7 +170,7 @@ participant tasks as Background tasks
     end
 ```
 
-/// info
+/// note
 
 ํด๋ผ์ด์–ธํŠธ์—๋Š” **ํ•˜๋‚˜์˜ ์‘๋‹ต**๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜ ์‘๋‹ต ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜๋„ ์žˆ๊ณ , *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—์„œ ์ƒ์„ฑ๋œ ์‘๋‹ต์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
index 4b540b779e7e77cbf2818965d7d77505fa1d3089..7473ce899fb893d0d8395cd4f4e71171439eab25 100644 (file)
@@ -51,7 +51,7 @@
 
 ๊ทธ ํ›„ ์œ„์˜ ๊ฐ’์„ ํฌํ•จํ•œ `dict` ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 FastAPI๋Š” 0.95.0 ๋ฒ„์ „๋ถ€ํ„ฐ `Annotated`์— ๋Œ€ํ•œ ์ง€์›์„ (๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค) ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
 
@@ -106,7 +106,7 @@ common_parameters --> read_users
 
 ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณต์šฉ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ ์–ด๋„ ๋˜๋ฉฐ, **FastAPI**๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์„ ์œ„ํ•ด ์ด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
 
-/// check | ํ™•์ธ
+/// tip | ํŒ
 
 ํŠน๋ณ„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฒƒ ํ˜น์€ ๋น„์Šทํ•œ ์ข…๋ฅ˜๋ฅผ **FastAPI**์— "๋“ฑ๋ก"ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ณณ์— ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
 
index 52c847b70254c6c0e28c0ec5421494d9d050e228..c0443bf2c9c3514f55b56a4a2fe2d9b95f562d39 100644 (file)
@@ -35,7 +35,7 @@
 
 {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ๋Š” `query_or_cookie_extractor`๋ผ๋Š” ์˜์กด์„ฑ ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•˜์„ธ์š”.
 
index cc3d6c6182559a0564bb9d1957821fe9f17f769e..db68497e2743178c2c24a9f8a1c6cb84dd2d581e 100644 (file)
@@ -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` ๋ฌธ๋ฒ•์€ ํŒŒ์ด์ฌ์—์„œ "๋ฐ์ฝ”๋ ˆ์ดํ„ฐ"๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
 
index 9220dc2b47656c1747bda9775787b81b19e4b87d..4461f2bc48c98f26803df7a7a4197f557144595d 100644 (file)
@@ -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)์—์„œ ์ฝ์–ด๋ณด์„ธ์š”.
 
index ebdf6f918fdc2e21371acf084b2ff226548a621e..a92b04c9d72b4f8f156372a9067b11bf9cfed5d7 100644 (file)
 
 {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 `response_description`์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์‘๋‹ต์„ ์ง€์นญํ•˜๋ฉฐ, `description`์€ ์ผ๋ฐ˜์ ์ธ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.
 
 ///
 
-/// check | ํ™•์ธ
+/// tip | ํŒ
 
 OpenAPI๋Š” ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์‘๋‹ต์— ๊ด€ํ•œ ์„ค๋ช…์„ ์š”๊ตฌํ•  ๊ฒƒ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
 
index 2ff56c46e7be3e9b69da1eeae887e0da8345acf6..8511f9dba698cf1787b47e29bcf2abcbd38308a5 100644 (file)
@@ -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` ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
 
index c6ea6b7c1655ac96d362ebda0e3f39d2248413f3..0f1c8ee7632231cf8779a4fcbdbd179dfc6dc390 100644 (file)
@@ -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 ํ†ตํ•ฉ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
 
index 4dffc90570ddb673e51c844989a362cf63b091e1..8004b2dde1c779af153f7a538e7d43379176c65d 100644 (file)
@@ -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`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
index 49522ac252531fb39369bb49c33a24015ebf50ce..bca580b67b4236f3988b3b27b11bf58f33d0c0e7 100644 (file)
@@ -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` ์œผ๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ƒ์†๋œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
 
index 4a5c3e1a75383f366ebc7387e8e09e4530c3c407..351067d3e2d492ca8064715250591620a8534b87 100644 (file)
@@ -2,7 +2,7 @@
 
 FastAPI์—์„œ **Pydantic ๋ชจ๋ธ**์„ ์ด์šฉํ•˜์—ฌ **ํผ ํ•„๋“œ**๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ํผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.
 
index fa8fdae7e88e4ef209afbca1d77c72c045156849..644bd0cc0c32c008b3f18d4bee15c621a7c8b4d1 100644 (file)
@@ -2,7 +2,7 @@
 
 `File` ๊ณผ `Form` ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ๊ณผ ํผ ํ•„๋“œ๋ฅผ ๋™์‹œ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-/// info
+/// note
 
 ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ๋ฐ/๋˜๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ๋จผ์ € [`python-multipart`](https://github.com/Kludex/python-multipart)๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
index 4a618f5873cf0d0720441d7118559576ebcd39ce..2bc678801a47f53dc25bb3da99bcf2752b3455ed 100644 (file)
@@ -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).
 
 ///
 
index f3d1046267927b7161770d2413b3394ffa182c2d..bdd8cec2c52a39993bb1f37fca882147907f38e5 100644 (file)
@@ -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 | ์ฐธ๊ณ 
 
 ๋‹ค์Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
index 68db66e3388d7176be3221b836efde8bcc31cd06..bc966916f6dde40a165cf113d40294d5b5cf286c 100644 (file)
 
 /// note | ์ฐธ๊ณ 
 
-`status_code` รซ\8a\94 "รซ\8dยฐรฌยฝ\94รซย \88รฌ\9dยดรญ\84ยฐ" รซยฉ\94รฌ\86\8cรซ\93\9c(`get`, `post` รซ\93ยฑ)รฌ\9d\98 รซยงยครชยฐ\9cรซยณ\80รฌ\88\98รฌ\9e\85รซ\8b\88รซ\8bยค. รซยชยจรซ\93ย  รซยงยครชยฐ\9cรซยณ\80รฌ\88\98รซ\93ยครชยณยผ รซยณยธรซยฌยธรฌยฒ\98รซ\9fยผ *รชยฒยฝรซยก\9c รฌยฒ\98รซยฆยฌ รญ\95ยจรฌ\88\98*๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
+`status_code` รซ\8a\94 "รซ\8dยฐรฌยฝ\94รซย \88รฌ\9dยดรญ\84ยฐ" รซยฉ\94รฌ\86\8cรซ\93\9c(`get`, `post` รซ\93ยฑ)รฌ\9d\98 รซยงยครชยฐ\9cรซยณ\80รฌ\88\98รฌ\9e\85รซ\8b\88รซ\8bยค. รซ\8bยครซยฅยธ รซยงยครชยฐ\9cรซยณ\80รฌ\88\98รซ\82\98 รซยณยธรซยฌยธรชยณยผ รซ\8bยฌรซยฆยฌ, *รชยฒยฝรซยก\9c รฌยฒ\98รซยฆยฌ รญ\95ยจรฌ\88\98*รฌ\9d\98 รซยงยครชยฐ\9cรซยณ\80รฌ\88\98๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
 
 ///
 
 `status_code` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ˆซ์ž๋กœ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 `status_code` ๋Š” ํŒŒ์ด์ฌ์˜ [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) ์™€ ๊ฐ™์€ `IntEnum` ์„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
index ffa97375dfe811a2615bad180c6586ca09d650da..9326ba032273e248bb12497924a0d0dfe0a65051 100644 (file)
@@ -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 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰).
 
index 8b7563ec3e9eb181a934f0bab6f7bb3cdaa1abc2..0c197adf953de059b50b2b6a4898e777db801473 100644 (file)
@@ -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`๋ฅผ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 
index eab599e2753bbd68608bf8c0dc02c3cdf296eb9e..0c8e5c60f7a0facc6d3f46b28cf45d71b6444fd3 100644 (file)
@@ -52,7 +52,7 @@ Pydantic์„ ์‚ฌ์šฉํ•ด ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, ๋‹ค๋ฅธ
 
 ///
 
-/// check | ํ™•์ธ
+/// tip | ํŒ
 
 ์ด ์˜์กด์„ฑ ์‹œ์Šคํ…œ์ด ์„ค๊ณ„๋œ ๋ฐฉ์‹์€ ๋ชจ๋‘ `User` ๋ชจ๋ธ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์˜์กด์„ฑ(์„œ๋กœ ๋‹ค๋ฅธ "dependables")์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
 
index 3c3b93e3a6b7413e0ad3e6993f7774e0b8591c26..d079294680b80761cfc20d54ea493f39289e2c9b 100644 (file)
@@ -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`"์€ ์—†๊ณ , ํ•ด์‹œ๋œ ๋ฒ„์ „๋งŒ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.
 
index 48361de83d05e0a69ae6723e19efe6fc31dd8c47..a487b7230ed02c7b304262e60e579e49dc1e16ca 100644 (file)
@@ -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`๋„ ์‚ฌ์–‘์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
 
index a8ae1180faae921b52867816d5db65735c40eab1..abcabd9979c659a951f2ddc0bb8febd7b6f3cf2d 100644 (file)
@@ -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์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
index 816338d7e39a99da9763c91594df573012d89d3d..cc2e051dbb1b93c8d7a03061ff3f4c97c5ae1f93 100644 (file)
@@ -2,7 +2,7 @@
 
 ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ๋ฅผ "**์ŠคํŠธ๋ฆผ**"์œผ๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด **JSON Lines**๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-/// info
+/// note
 
 FastAPI 0.134.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
@@ -48,7 +48,7 @@ sequenceDiagram
 
 JSON ๋ฐฐ์—ด(Python์˜ list์— ํ•ด๋‹น)๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ํ•ญ๋ชฉ๋“ค์„ `[]`๋กœ ๊ฐ์‹ธ๊ณ  ํ•ญ๋ชฉ ์‚ฌ์ด์— `,`๋ฅผ ๋„ฃ๋Š” ๋Œ€์‹ , ์ค„๋งˆ๋‹ค ํ•˜๋‚˜์˜ JSON ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , ์ƒˆ ์ค„ ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
 
-/// info
+/// note
 
 ํ•ต์‹ฌ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ ์ค„์„ ์ฐจ๋ก€๋กœ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ด์ „ ์ค„์„ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
 
index aab85580bb660fa839396c8627a476d25daa0925..7d0dbc6bcfeb9395c481fc34caef067163308dcc 100644 (file)
@@ -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์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.