]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
๐ŸŒ Update translations for ko (update-outdated) (#15890)
authorSebastiรกn Ramรญrez <tiangolo@gmail.com>
Wed, 1 Jul 2026 13:16:28 +0000 (15:16 +0200)
committerGitHub <noreply@github.com>
Wed, 1 Jul 2026 13:16:28 +0000 (13:16 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
60 files changed:
docs/ko/docs/_llm-test.md
docs/ko/docs/advanced/additional-status-codes.md
docs/ko/docs/advanced/advanced-dependencies.md
docs/ko/docs/advanced/dataclasses.md
docs/ko/docs/advanced/events.md
docs/ko/docs/advanced/generate-clients.md
docs/ko/docs/advanced/json-base64-bytes.md
docs/ko/docs/advanced/openapi-callbacks.md
docs/ko/docs/advanced/response-change-status-code.md
docs/ko/docs/advanced/response-cookies.md
docs/ko/docs/advanced/response-headers.md
docs/ko/docs/advanced/security/oauth2-scopes.md
docs/ko/docs/advanced/settings.md
docs/ko/docs/advanced/stream-data.md
docs/ko/docs/advanced/wsgi.md
docs/ko/docs/alternatives.md
docs/ko/docs/async.md
docs/ko/docs/deployment/cloud.md
docs/ko/docs/deployment/concepts.md
docs/ko/docs/deployment/docker.md
docs/ko/docs/deployment/https.md
docs/ko/docs/deployment/manually.md
docs/ko/docs/editor-support.md
docs/ko/docs/environment-variables.md
docs/ko/docs/features.md
docs/ko/docs/help-fastapi.md
docs/ko/docs/how-to/configure-swagger-ui.md
docs/ko/docs/how-to/custom-request-and-route.md
docs/ko/docs/how-to/graphql.md
docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
docs/ko/docs/how-to/separate-openapi-schemas.md
docs/ko/docs/index.md
docs/ko/docs/project-generation.md
docs/ko/docs/python-types.md
docs/ko/docs/tutorial/bigger-applications.md
docs/ko/docs/tutorial/body-nested-models.md
docs/ko/docs/tutorial/body.md
docs/ko/docs/tutorial/debugging.md
docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
docs/ko/docs/tutorial/extra-data-types.md
docs/ko/docs/tutorial/extra-models.md
docs/ko/docs/tutorial/first-steps.md
docs/ko/docs/tutorial/handling-errors.md
docs/ko/docs/tutorial/index.md
docs/ko/docs/tutorial/metadata.md
docs/ko/docs/tutorial/path-operation-configuration.md
docs/ko/docs/tutorial/query-params-str-validations.md
docs/ko/docs/tutorial/query-params.md
docs/ko/docs/tutorial/request-files.md
docs/ko/docs/tutorial/request-forms.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/sql-databases.md
docs/ko/docs/tutorial/static-files.md
docs/ko/docs/tutorial/testing.md
docs/ko/docs/virtual-environments.md

index ea22d6191decac252aff1dc1cb1068fdd36418d8..9e9d0ee73f143245d55263a7ac1478091d11d0db 100644 (file)
@@ -7,11 +7,11 @@
 ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
 
 * ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ `docs/{language code}/llm-prompt.md`๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
-* ์ด ๋ฌธ์„œ๋ฅผ ์›ํ•˜๋Š” ๋Œ€์ƒ ์–ธ์–ด๋กœ ์ƒˆ๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: `translate.py`์˜ `translate-page` ๋ช…๋ น). ๊ทธ๋Ÿฌ๋ฉด `docs/{language code}/docs/_llm-test.md` ์•„๋ž˜์— ๋ฒˆ์—ญ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
+* ์ด ๋ฌธ์„œ๋ฅผ ์›ํ•˜๋Š” ๋Œ€์ƒ ์–ธ์–ด๋กœ ์ƒˆ๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: `translate.py`์˜ `translate-page` ๋ช…๋ น์–ด). ๊ทธ๋Ÿฌ๋ฉด `docs/{language code}/docs/_llm-test.md` ์•„๋ž˜์— ๋ฒˆ์—ญ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
 * ๋ฒˆ์—ญ์—์„œ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
 * ํ•„์š”ํ•˜๋‹ค๋ฉด ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ, ์ผ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ, ๋˜๋Š” ์˜์–ด ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
 * ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฒˆ์—ญ์—์„œ ๋‚จ์•„ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด ์ข‹์€ ๋ฒˆ์—ญ์ด ๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
-* ์ข‹์€ ๋ฒˆ์—ญ์„ ๋‘” ์ƒํƒœ์—์„œ ๋‹ค์‹œ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ๊ฒฐ๊ณผ๋Š” LLM์ด ๋” ์ด์ƒ ๋ฒˆ์—ญ์— ๋ณ€๊ฒฝ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ์™€ ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์„ ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค(๋•Œ๋•Œ๋กœ ๋ช‡ ๊ฐ€์ง€ seemingly random ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” [LLM์€ ๊ฒฐ์ •๋ก ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ](https://doublespeak.chat/#/handbook#deterministic-output)์ž…๋‹ˆ๋‹ค).
+* ์ข‹์€ ๋ฒˆ์—ญ์„ ๋‘” ์ƒํƒœ์—์„œ ๋‹ค์‹œ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ๊ฒฐ๊ณผ๋Š” LLM์ด ๋” ์ด์ƒ ๋ฒˆ์—ญ์— ๋ณ€๊ฒฝ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ์™€ ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์„ ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค(๋•Œ๋•Œ๋กœ ๋ช‡ ๊ฐ€์ง€ ๊ฒ‰๋ณด๊ธฐ์— ๋ฌด์ž‘์œ„์ธ ๋ณ€๊ฒฝ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” [LLM์€ ๊ฒฐ์ •๋ก ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ](https://doublespeak.chat/#/handbook#deterministic-output)์ž…๋‹ˆ๋‹ค).
 
 ํ…Œ์ŠคํŠธ:
 
@@ -150,7 +150,7 @@ works(foo="bar")  # ์ด๊ฑด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰
 
 ํƒญ๊ณผ `Info`/`Note`/`Warning`/๋“ฑ์˜ ๋ธ”๋ก์€ ์ œ๋ชฉ ๋ฒˆ์—ญ์„ ์ˆ˜์ง ๋ง‰๋Œ€(`|`) ๋’ค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
-`scripts/translate.py`รฌ\9d\98 รฌ\9dยผรซยฐ\98 รญ\94\84รซยกยฌรญ\94\84รญ\8aยธรฌ\97\90รฌ\84\9c `### Special blocks`รฌ\99\80 `### Tab blocks` รฌ\84\9d์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
+`scripts/translate.py`รฌ\9d\98 รฌ\9dยผรซยฐ\98 รญ\94\84รซยกยฌรญ\94\84รญ\8aยธรฌ\97\90รฌ\84\9c `### Special blocks`รฌ\99\80 `### Tab blocks` รฌ\84ยน์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
 ////
 
@@ -240,7 +240,7 @@ works(foo="bar")  # ์ด๊ฑด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰
 
 `scripts/translate.py`์˜ ์ผ๋ฐ˜ ํ”„๋กฌํ”„ํŠธ์—์„œ `### Headings` ์„น์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
-รฌ\96ยธรฌ\96ยดรซยณ\84 รฌยง\80รฌยนยจรฌ\9d\80 รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด `docs/de/llm-prompt.md`รฌ\9d\98 `### Headings` รฌ\84\9d์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
+รฌ\96ยธรฌ\96ยดรซยณ\84 รฌยง\80รฌยนยจรฌ\9d\80 รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด `docs/de/llm-prompt.md`รฌ\9d\98 `### Headings` รฌ\84ยน์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
 ////
 
@@ -289,7 +289,7 @@ works(foo="bar")  # ์ด๊ฑด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰
 * ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋น™ํ•˜๋‹ค
 * ํŽ˜์ด์ง€๋ฅผ ์„œ๋น™ํ•˜๋‹ค
 
-* รฌ\95ยฑ
+* รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98
 * ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
 
 * ์š”์ฒญ
@@ -490,6 +490,6 @@ works(foo="bar")  # ์ด๊ฑด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰
 
 ์ด๊ฒƒ์€ ๋ฌธ์„œ์—์„œ ๋ณด์ด๋Š” (๋Œ€๋ถ€๋ถ„) ๊ธฐ์ˆ  ์šฉ์–ด์˜ ๋ถˆ์™„์ „ํ•˜๊ณ  ๋น„๊ทœ๋ฒ”์ ์ธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„์ž๊ฐ€ ์–ด๋–ค ์šฉ์–ด์— ๋Œ€ํ•ด LLM์— ์ถ”๊ฐ€์ ์ธ ๋„์›€์ด ํ•„์š”ํ•œ์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ข‹์€ ๋ฒˆ์—ญ์„ ๊ณ„์† ๋œ ์ข‹์€ ๋ฒˆ์—ญ์œผ๋กœ ๋˜๋Œ๋ฆด ๋•Œ, ๋˜๋Š” ์–ธ์–ด์—์„œ ์šฉ์–ด์˜ ํ™œ์šฉ/๋ณ€ํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
 
-รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด `docs/de/llm-prompt.md`รฌ\9d\98 `### List of English terms and their preferred German translations` รฌ\84\9d์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
+รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด `docs/de/llm-prompt.md`รฌ\9d\98 `### List of English terms and their preferred German translations` รฌ\84ยน์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
 ////
index 6251b68b2315b8b86412b30d0f3345523e8671ba..4762c8eed0a20c35f792db4815a644672dfdf518 100644 (file)
@@ -8,7 +8,7 @@
 
 ๊ธฐ๋ณธ ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด `JSONResponse`์™€ ๊ฐ™์ด `Response`๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ถ”๊ฐ€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์žˆ๊ณ  ์„ฑ๊ณต ์‹œ 200 โ€œOKโ€์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
+์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์žˆ๊ณ  ์„ฑ๊ณต ์‹œ 200 "OK"์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
 ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ์„ ํ—ˆ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ๋ชฉ์ด ์ด์ „์— ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  HTTP ์ƒํƒœ ์ฝ”๋“œ 201 "Created"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
 
index 3a35bbfc7fbd3b5e602e3f7f2fd5a8b603ecfe25..49b96bdad4d9729b2eb209936b61b4e9690c1d8f 100644 (file)
@@ -79,7 +79,7 @@ checker(q="somequery")
 
 ### `yield`์™€ `scope`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ { #dependencies-with-yield-and-scope }
 
-0.121.0 ๋ฒ„์ „์—์„œ FastAPI๋Š” `Depends(scope="function")` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
+0.121.0 ๋ฒ„์ „์—์„œ FastAPI๋Š” `yield`๊ฐ€ ์žˆ๋Š” ์˜์กด์„ฑ์„ ์œ„ํ•œ `Depends(scope="function")` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
 
 `Depends(scope="function")`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, `yield` ์ดํ›„์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*๊ฐ€ ๋๋‚œ ์งํ›„(ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋˜๊ธฐ ์ „)์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
 
index fb5d9fbd9ba421f2e06a2cf69489ff9a4405af71..609cb6cd920d830818cae957d176aec586c9564e 100644 (file)
@@ -18,7 +18,7 @@ FastAPI๋Š” **Pydantic** ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ง€๊ธˆ๊นŒ์ง€๋Š” Pydantic
 
 ์ด๋Š” Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Pydantic์„ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
 
-/// note
+/// note | ์ฐธ๊ณ 
 
 dataclasses๋Š” Pydantic ๋ชจ๋ธ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.
 
index 24ce55b4c1d4a388532800fbb6152f7c2ba46ca4..13db29ef2f305c113599dc697a23e8ec4a4318b8 100644 (file)
@@ -6,15 +6,15 @@
 
 ์ด ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญ์„ ๋ฐ›๊ธฐ **์‹œ์ž‘**ํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ณ , ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ **๋๋‚ธ ์งํ›„**์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ **์ˆ˜๋ช…(lifespan)**์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค(์ž ์‹œ ํ›„ "lifespan"์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค ๐Ÿ˜‰).
 
-รฌ\9dยดรซ\8a\94 รฌย \84รฌยฒยด รฌ\95ยฑ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” **์ž์›**์„ ์„ค์ •ํ•˜๊ณ , ์š”์ฒญ ๊ฐ„์— **๊ณต์œ ๋˜๋Š”** ์ž์›์„ ์„ค์ •ํ•˜๊ณ , ๊ทธ๋ฆฌ๊ณ /๋˜๋Š” ์ดํ›„์— **์ •๋ฆฌ**ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ๋˜๋Š” ๊ณต์œ  ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
+รฌ\9dยดรซ\8a\94 รฌย \84รฌยฒยด รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” **์ž์›**์„ ์„ค์ •ํ•˜๊ณ , ์š”์ฒญ ๊ฐ„์— **๊ณต์œ ๋˜๋Š”** ์ž์›์„ ์„ค์ •ํ•˜๊ณ , ๊ทธ๋ฆฌ๊ณ /๋˜๋Š” ์ดํ›„์— **์ •๋ฆฌ**ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ๋˜๋Š” ๊ณต์œ  ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
 
 ## ์‚ฌ์šฉ ์‚ฌ๋ก€ { #use-case }
 
 ๋จผ์ € **์‚ฌ์šฉ ์‚ฌ๋ก€** ์˜ˆ์‹œ๋กœ ์‹œ์ž‘ํ•œ ๋‹ค์Œ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
-์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ **๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ**์ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ๐Ÿค–
+์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ช‡ ๊ฐ€์ง€ **๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ**์ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ๐Ÿค–
 
-๋™์ผํ•œ ๋ชจ๋ธ์ด ์š”์ฒญ ๊ฐ„์— ๊ณต์œ ๋˜๋ฏ€๋กœ, ์š”์ฒญ๋งˆ๋‹ค ๋ชจ๋ธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žˆ๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.
+๋™์ผํ•œ ๋ชจ๋ธ๋“ค์ด ์š”์ฒญ ๊ฐ„์— ๊ณต์œ ๋˜๋ฏ€๋กœ, ์š”์ฒญ๋งˆ๋‹ค ๋ชจ๋ธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žˆ๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.
 
 ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ **์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค**, ์™œ๋ƒํ•˜๋ฉด ๋ชจ๋ธ์ด **๋””์Šคํฌ์—์„œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ** ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์š”์ฒญ๋งˆ๋‹ค ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
 
@@ -24,7 +24,7 @@
 
 ## Lifespan { #lifespan }
 
-`FastAPI` รฌ\95ยฑ์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜์™€ "์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ *์‹œ์ž‘*๊ณผ *์ข…๋ฃŒ* ๋กœ์ง์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž ์‹œ ํ›„์— ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค).
+`FastAPI` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜์™€ "์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ *์‹œ์ž‘*๊ณผ *์ข…๋ฃŒ* ๋กœ์ง์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž ์‹œ ํ›„์— ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค).
 
 ์˜ˆ์ œ๋กœ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
@@ -32,7 +32,7 @@
 
 {* ../../docs_src/events/tutorial003_py310.py hl[16,19] *}
 
-์—ฌ๊ธฐ์„œ๋Š” `yield` ์ด์ „์— (๊ฐ€์งœ) ๋ชจ๋ธ ํ•จ์ˆ˜๋ฅผ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์ด ๋“ค์–ด ์žˆ๋Š” ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์–ด ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๋น„์šฉ์ด ํฐ *์‹œ์ž‘* ์ž‘์—…์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด **์š”์ฒญ์„ ๋ฐ›๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „**, *์‹œ์ž‘* ๋™์•ˆ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
+์—ฌ๊ธฐ์„œ๋Š” `yield` ์ด์ „์— (๊ฐ€์งœ) ๋ชจ๋ธ ํ•จ์ˆ˜๋ฅผ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ๋“ค์ด ๋“ค์–ด ์žˆ๋Š” ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์–ด ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๋Š” ๋น„์šฉ์ด ํฐ *์‹œ์ž‘* ์ž‘์—…์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด **์š”์ฒญ์„ ๋ฐ›๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „**, *์‹œ์ž‘* ๋™์•ˆ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
 
 ๊ทธ๋ฆฌ๊ณ  `yield` ์งํ›„์—๋Š” ๋ชจ๋ธ์„ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด **์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์นœ ํ›„**, *์ข…๋ฃŒ* ์ง์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ๋‚˜ GPU ๊ฐ™์€ ์ž์›์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -80,7 +80,7 @@ async with lifespan(app):
 
 ์œ„์˜ ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ๋Š” ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , FastAPI์— ์ „๋‹ฌํ•˜์—ฌ FastAPI๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
 
-`FastAPI` รฌ\95ยฑ์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” **๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €**๋ฅผ ๋ฐ›์œผ๋ฏ€๋กœ, ์ƒˆ `lifespan` ๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+`FastAPI` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” **๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €**๋ฅผ ๋ฐ›์œผ๋ฏ€๋กœ, ์ƒˆ `lifespan` ๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 {* ../../docs_src/events/tutorial003_py310.py hl[22] *}
 
@@ -88,7 +88,7 @@ async with lifespan(app):
 
 /// warning | ๊ฒฝ๊ณ 
 
-*รฌ\8b\9cรฌ\9e\91*รชยณยผ *รฌยข\85รซยฃ\8c*รซยฅยผ รฌยฒ\98รซยฆยฌรญ\95\98รซ\8a\94 รชยถ\8cรฌ\9eยฅ รซยฐยฉรซยฒ\95รฌ\9d\80 รฌ\9c\84รฌ\97\90รฌ\84\9c รฌ\84ยครซยช\85รญ\95\9c รซ\8c\80รซยก\9c `FastAPI` รฌ\95ยฑ์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉด `startup`๊ณผ `shutdown` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋” ์ด์ƒ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `lifespan`๋งŒ ์“ฐ๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ๋งŒ ์“ฐ๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด์ง€, ๋‘˜ ๋‹ค๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
+*รฌ\8b\9cรฌ\9e\91*รชยณยผ *รฌยข\85รซยฃ\8c*รซยฅยผ รฌยฒ\98รซยฆยฌรญ\95\98รซ\8a\94 รชยถ\8cรฌ\9eยฅ รซยฐยฉรซยฒ\95รฌ\9d\80 รฌ\9c\84รฌ\97\90รฌ\84\9c รฌ\84ยครซยช\85รญ\95\9c รซ\8c\80รซยก\9c `FastAPI` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์˜ `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. `lifespan` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉด `startup`๊ณผ `shutdown` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋” ์ด์ƒ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `lifespan`๋งŒ ์“ฐ๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ๋งŒ ์“ฐ๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด์ง€, ๋‘˜ ๋‹ค๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
 
 ์ด ๋ถ€๋ถ„์€ ์•„๋งˆ ๊ฑด๋„ˆ๋›ฐ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
 
index f85db8cb911820fa602fce1a2b1980a7f6ffa42a..9cbe46ff8fc568123529e475267fecd19847af9b 100644 (file)
@@ -20,20 +20,6 @@ FastAPI๋Š” **OpenAPI 3.1** ์‚ฌ์–‘์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š”
 
 ///
 
-## FastAPI ์Šคํฐ์„œ์˜ SDK ์ƒ์„ฑ๊ธฐ { #sdk-generators-from-fastapi-sponsors }
-
-์ด ์„น์…˜์—์„œ๋Š” FastAPI๋ฅผ ํ›„์›ํ•˜๋Š” ํšŒ์‚ฌ๋“ค์ด ์ œ๊ณตํ•˜๋Š” **๋ฒค์ฒ˜ ํˆฌ์ž ๊ธฐ๋ฐ˜** ๋ฐ **๊ธฐ์—… ์ง€์›** ์†”๋ฃจ์…˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ์ œํ’ˆ๋“ค์€ ๊ณ ํ’ˆ์งˆ๋กœ ์ƒ์„ฑ๋œ SDK์— ๋”ํ•ด **์ถ”๊ฐ€ ๊ธฐ๋Šฅ**๊ณผ **ํ†ตํ•ฉ**์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
-
-โœจ [**FastAPI ํ›„์›ํ•˜๊ธฐ**](../help-fastapi.md#sponsor-the-author) โœจ๋ฅผ ํ†ตํ•ด, ์ด ํšŒ์‚ฌ๋“ค์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ทธ **์ƒํƒœ๊ณ„**๊ฐ€ ๊ฑด๊ฐ•ํ•˜๊ณ  **์ง€์† ๊ฐ€๋Šฅ**ํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.
-
-๋˜ํ•œ ์ด๋“ค์˜ ํ›„์›์€ FastAPI **์ปค๋ฎค๋‹ˆํ‹ฐ**(์—ฌ๋Ÿฌ๋ถ„)์— ๋Œ€ํ•œ ๊ฐ•ํ•œ ํ—Œ์‹ ์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, **์ข‹์€ ์„œ๋น„์Šค**๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋ฟ ์•„๋‹ˆ๋ผ, ๊ฒฌ๊ณ ํ•˜๊ณ  ํ™œ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ FastAPI๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐ์—๋„ ๊ด€์‹ฌ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๐Ÿ™‡
-
-์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
-
-* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
-
-์ด ์ค‘ ์ผ๋ถ€๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๊ฑฐ๋‚˜ ๋ฌด๋ฃŒ ํ‹ฐ์–ด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ๋น„์šฉ ๋ถ€๋‹ด ์—†์ด ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒ์šฉ SDK ์ƒ์„ฑ๊ธฐ๋„ ์žˆ์œผ๋ฉฐ ์˜จ๋ผ์ธ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“
-
 ## TypeScript SDK ๋งŒ๋“ค๊ธฐ { #create-a-typescript-sdk }
 
 ๊ฐ„๋‹จํ•œ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:
index b5e55a41afbf0e9cbe8a2facd3e03e8cfbdc21c0..b24acda8638a5de895b72b985e5717ecaf37f26d 100644 (file)
@@ -4,7 +4,7 @@
 
 ## Base64์™€ ํŒŒ์ผ { #base64-vs-files }
 
-๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ์—๋Š” [์š”์ฒญ ํŒŒ์ผ](../tutorial/request-files.md)์„, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก์—๋Š” [์ปค์Šคํ…€ ์‘๋‹ต - FileResponse](./custom-response.md#fileresponse--fileresponse-)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋จผ์ € ๊ณ ๋ คํ•˜์„ธ์š”. JSON์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹  ๋ง์ž…๋‹ˆ๋‹ค.
+๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ์—๋Š” [์š”์ฒญ ํŒŒ์ผ](../tutorial/request-files.md)์„, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก์—๋Š” [์ปค์Šคํ…€ ์‘๋‹ต - FileResponse](./custom-response.md#fileresponse)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋จผ์ € ๊ณ ๋ คํ•˜์„ธ์š”. JSON์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹  ๋ง์ž…๋‹ˆ๋‹ค.
 
 JSON์€ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์›์‹œ ๋ฐ”์ดํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‹ด์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
 
index f9769209afa2809246b667282dbbdda1bf3eae16..a44997ba28742ed2cffa73517e2b62b95ede6a57 100644 (file)
@@ -165,7 +165,7 @@ https://www.external.org/events/invoices/2expen51ve
 
 ### ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ { #add-the-callback-router }
 
-์ด ์‹œ์ ์—์„œ, ์œ„์—์„œ ๋งŒ๋“  ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ ์•ˆ์— *์ฝœ๋ฐฑ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ(๋“ค)*(์ฆ‰ *external developer*๊ฐ€ *external API*์— ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค)์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
+์ด ์‹œ์ ์—์„œ, ์œ„์—์„œ ๋งŒ๋“  ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ ์•ˆ์— *์ฝœ๋ฐฑ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ(๋“ค)*(์ฆ‰ *์™ธ๋ถ€ ๊ฐœ๋ฐœ์ž*๊ฐ€ *external API*์— ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค)์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
 
 ์ด์ œ *์—ฌ๋Ÿฌ๋ถ„์˜ API ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ*์—์„œ `callbacks` ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด, ๊ทธ ์ฝœ๋ฐฑ ๋ผ์šฐํ„ฐ์˜ `.routes` ์†์„ฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค:
 
index f30474917e86b2509d1c3083de9696863f685701..5e54dc75ecf97d314c5c2e6716fdc74f919323dc 100644 (file)
@@ -1,5 +1,6 @@
 # ์‘๋‹ต - ์ƒํƒœ ์ฝ”๋“œ ๋ณ€๊ฒฝ { #response-change-status-code }
 
+
 ๊ธฐ๋ณธ [์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ ์„ค์ •](../tutorial/response-status-code.md)์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฑธ ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค.
 
 ํ•˜์ง€๋งŒ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๋‹ค๋ฅธ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
index b73d719699a53bc34853183cc381d22d54602915..f17046e7b9b538744822b8733a1db1c7ee314894 100644 (file)
@@ -26,7 +26,7 @@
 
 {* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
 
-/// tip
+/// tip | ํŒ
 
 `Response` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์‘๋‹ต์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, FastAPI๋Š” ์ด๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.
 
index e7157d8f48a0ad32dae65306389b2d1752b3ffc3..7699729677b73153faf0bc6e43bea0706f73fa41 100644 (file)
@@ -1,5 +1,6 @@
 # ์‘๋‹ต ํ—ค๋” { #response-headers }
 
+
 ## `Response` ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ { #use-a-response-parameter }
 
 ์—ฌ๋Ÿฌ๋ถ„์€ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ `Response` ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ฟ ํ‚ค์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
index 6aed77f752cc08e55a7e7c40dabdf04563930281..265f82aa742ec1641029e81098f786ff51956df0 100644 (file)
@@ -4,9 +4,9 @@
 
 ์ด๋ฅผ ํ†ตํ•ด OAuth2 ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ๋” ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์‹œ์Šคํ…œ์„ OpenAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋ฐ API ๋ฌธ์„œ)์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OAuth2๋Š” Facebook, Google, GitHub, Microsoft, X(Twitter) ๋“ฑ ๋งŽ์€ ๋Œ€ํ˜• ์ธ์ฆ ์ œ๊ณต์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠน์ • ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
+์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OAuth2๋Š” Facebook, Google, GitHub, Microsoft, X (Twitter) ๋“ฑ ๋งŽ์€ ๋Œ€ํ˜• ์ธ์ฆ ์ œ๊ณต์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠน์ • ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
 
-Facebook, Google, GitHub, Microsoft, X(Twitter)๋กœ โ€œ๋กœ๊ทธ์ธโ€ํ•  ๋•Œ๋งˆ๋‹ค, ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š” OAuth2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
+Facebook, Google, GitHub, Microsoft, X (Twitter)๋กœ โ€œ๋กœ๊ทธ์ธโ€ํ•  ๋•Œ๋งˆ๋‹ค, ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š” OAuth2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์ด ์„น์…˜์—์„œ๋Š” **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์ผํ•œ โ€œ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š” OAuth2โ€๋กœ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
 
index 49a2b640e9ee420b1ee337741359ac89e4a90040..f7e8c20e79f54a72b2dea54425fe8a803017be80 100644 (file)
@@ -1,5 +1,6 @@
 # ์„ค์ •๊ณผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ { #settings-and-environment-variables }
 
+
 ๋งŽ์€ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ์™ธ๋ถ€ ์„ค์ •์ด๋‚˜ ๊ตฌ์„ฑ(์˜ˆ: secret key, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๊ฒฉ ์ฆ๋ช…, ์ด๋ฉ”์ผ ์„œ๋น„์Šค ์ž๊ฒฉ ์ฆ๋ช… ๋“ฑ)์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์ด๋Ÿฌํ•œ ์„ค์ • ๋Œ€๋ถ€๋ถ„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค URL์ฒ˜๋Ÿผ ๋ณ€๋™ ๊ฐ€๋Šฅ(๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ)ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์„ค์ •์€ secret์ฒ˜๋Ÿผ ๋ฏผ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
index 33013fddd7875adf54996e2b6717b9d4b6e0e28c..94276876ffbfa20a9ccdee9af484e36fc715e2de 100644 (file)
@@ -2,7 +2,7 @@
 
 JSON์œผ๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด [JSON Lines ์ŠคํŠธ๋ฆฌ๋ฐ](../tutorial/stream-json-lines.md)์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
 
-ํ•˜์ง€๋งŒ ์ˆœ์ˆ˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
+ํ•˜์ง€๋งŒ **์ˆœ์ˆ˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ**๋‚˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 
 /// note | ์ฐธ๊ณ 
 
@@ -12,21 +12,21 @@ FastAPI 0.134.0์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
 ## ์‚ฌ์šฉ ์˜ˆ์‹œ { #use-cases }
 
-์˜ˆ๋ฅผ ๋“ค์–ด AI LLM ์„œ๋น„์Šค์˜ ์ถœ๋ ฅ์—์„œ ๋ฐ”๋กœ ์ˆœ์ˆ˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+์˜ˆ๋ฅผ ๋“ค์–ด **AI LLM** ์„œ๋น„์Šค์˜ ์ถœ๋ ฅ์—์„œ ๋ฐ”๋กœ ์ˆœ์ˆ˜ ๋ฌธ์ž์—ด์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-๋˜ํ•œ ํฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์ง€ ์•Š๊ณ , ์ฝ๋Š” ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
+๋˜ํ•œ **ํฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ**์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์ง€ ์•Š๊ณ , ์ฝ๋Š” ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
 
-์ด ๋ฐฉ์‹์œผ๋กœ ๋น„๋””์˜ค๋‚˜ ์˜ค๋””์˜ค๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณง๋ฐ”๋กœ ์ „์†กํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
+์ด ๋ฐฉ์‹์œผ๋กœ **๋น„๋””์˜ค**๋‚˜ **์˜ค๋””์˜ค**๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณง๋ฐ”๋กœ ์ „์†กํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ## `yield`์™€ ํ•จ๊ป˜ `StreamingResponse` ์‚ฌ์šฉํ•˜๊ธฐ { #a-streamingresponse-with-yield }
 
-๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜์—์„œ `response_class=StreamingResponse`๋ฅผ ์„ ์–ธํ•˜๋ฉด `yield`๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ `response_class=StreamingResponse`๋ฅผ ์„ ์–ธํ•˜๋ฉด `yield`๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 {* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
 
 FastAPI๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ `StreamingResponse`์— ์ „๋‹ฌํ•˜๋ฉฐ, JSON ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
-### async๊ฐ€ ์•„๋‹Œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ { #non-async-path-operation-functions }
+### async๊ฐ€ ์•„๋‹Œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜* { #non-async-path-operation-functions }
 
 `async`๊ฐ€ ์—†๋Š” ์ผ๋ฐ˜ `def` ํ•จ์ˆ˜์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ `yield`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -40,7 +40,7 @@ FastAPI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹
 
 {* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
 
-์ด๋Š” ๊ณง `StreamingResponse`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ์• ๋„ˆํ…Œ์ด์…˜๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ, ์ „์†ก ๊ธฐ์ค€์— ๋งž์ถฐ ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ธ์ฝ”๋”ฉํ•  ์ž์œ ์™€ ์ฑ…์ž„์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค“
+์ด๋Š” ๊ณง `StreamingResponse`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ์• ๋„ˆํ…Œ์ด์…˜๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ, ์ „์†ก ๊ธฐ์ค€์— ๋งž์ถฐ ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ธ์ฝ”๋”ฉํ•  **์ž์œ **์™€ **์ฑ…์ž„**์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค“
 
 ### ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ { #stream-bytes }
 
@@ -58,7 +58,7 @@ FastAPI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹
 
 {* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
 
-๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜์—์„œ `response_class=PNGStreamingResponse`๋กœ ์ด ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
+๊ทธ๋Ÿฐ ๋‹ค์Œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ `response_class=PNGStreamingResponse`๋กœ ์ด ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 {* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
 
@@ -98,7 +98,7 @@ FastAPI๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ๋ฐฉ์‹
 
 ///
 
-์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋ธ”๋กœํ‚น๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๋ ค๋ฉด ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ `async def` ๋Œ€์‹  ์ผ๋ฐ˜ `def`๋กœ ์„ ์–ธํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด FastAPI๊ฐ€ ์Šค๋ ˆ๋“œํ’€ ์›Œ์ปค์—์„œ ์‹คํ–‰ํ•˜์—ฌ ๋ฉ”์ธ ๋ฃจํ”„๊ฐ€ ๋ง‰ํžˆ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
+์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋ธ”๋กœํ‚น๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๋ ค๋ฉด *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*๋ฅผ `async def` ๋Œ€์‹  ์ผ๋ฐ˜ `def`๋กœ ์„ ์–ธํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด FastAPI๊ฐ€ ์Šค๋ ˆ๋“œํ’€ ์›Œ์ปค์—์„œ ์‹คํ–‰ํ•˜์—ฌ ๋ฉ”์ธ ๋ฃจํ”„๊ฐ€ ๋ง‰ํžˆ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
 
 {* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
 
index bd359661d84781b47091222451b97a3fe5bacab1..2b3012a46259a95bb9f3c1bc114bb6d79da9cf22 100644 (file)
@@ -42,7 +42,7 @@
 Hello, World from Flask!
 ```
 
-๊ทธ๋ฆฌ๊ณ  [http://localhost:8000/v2](http://localhost:8000/v2)๋กœ ์ด๋™ํ•˜๋ฉด **FastAPI**์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
+๊ทธ๋ฆฌ๊ณ  [http://localhost:8000/v2](http://localhost:8000/v2)๋กœ ์ด๋™ํ•˜๋ฉด FastAPI์˜ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 ```JSON
 {
index ab92c0ea86eada04e7b9eda4cff81aa4d4ce212e..1bd0ba56a83f32930ade6838bbdb9c0a630d6ef4 100644 (file)
@@ -24,7 +24,7 @@
 
 ### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
 
-Django REST framework๋Š” Django๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Web API๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์—ฐํ•œ toolkit์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ , Django์˜ API ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
+Django REST Framework๋Š” Django๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Web API๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์—ฐํ•œ toolkit์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ , Django์˜ API ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
 
 Mozilla, Red Hat, Eventbrite๋ฅผ ํฌํ•จํ•ด ๋งŽ์€ ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
@@ -36,7 +36,7 @@ Django REST Framework๋Š” Tom Christie๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. **FastAPI**์˜ ๊ธฐ
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ์ž๋™ API ๋ฌธ์„œํ™” ์›น ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ.
 
@@ -56,7 +56,7 @@ Flask๋Š” "microframework"๋กœ, Django์— ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด
 
 Flask์˜ ๋‹จ์ˆœํ•จ์„ ๊ณ ๋ คํ•˜๋ฉด API๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ž˜ ๋งž๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์ฐพ๊ณ ์ž ํ–ˆ๋˜ ๊ฒƒ์€ Flask์šฉ "Django REST Framework"์˜€์Šต๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 micro-framework๊ฐ€ ๋˜๊ธฐ. ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ.
 
@@ -80,7 +80,7 @@ Requests๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ ์„ค๊ณ„๋ฅผ ๊ฐ€์กŒ๊ณ , ํ•ฉ๋ฆฌ์ ์ธ 
 
 ๊ทธ๋ž˜์„œ ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์—์„œ ๋งํ•˜๋“ฏ์ด:
 
-> Requests is one of the most downloaded Python packages of all time
+> Requests๋Š” ์—ญ๋Œ€ ๊ฐ€์žฅ ๋งŽ์ด ๋‹ค์šด๋กœ๋“œ๋œ Python ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค
 
 ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `GET` ์š”์ฒญ์„ ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค:
 
@@ -98,7 +98,7 @@ def read_url():
 
 `requests.get(...)`์™€ `@app.get(...)`์˜ ์œ ์‚ฌ์„ฑ์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 * ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ API๋ฅผ ๊ฐ–๊ธฐ.
 * HTTP method ์ด๋ฆ„(operations)์„ ์ง์ ‘, ์ง๊ด€์ ์ด๊ณ  ๋ช…ํ™•ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ.
@@ -118,7 +118,7 @@ def read_url():
 
 ๊ทธ๋ž˜์„œ 2.0 ๋ฒ„์ „์„ ์ด์•ผ๊ธฐํ•  ๋•Œ๋Š” "Swagger"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๊ณ , 3+ ๋ฒ„์ „์€ "OpenAPI"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ์ปค์Šคํ…€ schema ๋Œ€์‹ , API ์‚ฌ์–‘์„ ์œ„ํ•œ ์—ด๋ฆฐ ํ‘œ์ค€์„ ์ฑ„ํƒํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ.
 
@@ -147,7 +147,7 @@ API์— ๋˜ ํ•˜๋‚˜ ํฌ๊ฒŒ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์ž…๋‹ˆ๋‹ค. ํŠน์ • 
 
 ํ•˜์ง€๋งŒ Python type hints๊ฐ€ ์กด์žฌํ•˜๊ธฐ ์ „์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ <dfn title="๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •์˜">์Šคํ‚ค๋งˆ</dfn>๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด Marshmallow๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŠน์ • ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๊ฒ€์ฆ์„ ์ œ๊ณตํ•˜๋Š” "schema"๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ž๋™์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ.
 
@@ -169,7 +169,7 @@ Webargs๋Š” Marshmallow์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ์˜ ์ž๋™ ๊ฒ€์ฆ์„ ๊ฐ–๊ธฐ.
 
@@ -199,7 +199,7 @@ APISpec์€ Marshmallow์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 API๋ฅผ ์œ„ํ•œ ์—ด๋ฆฐ ํ‘œ์ค€์ธ OpenAPI๋ฅผ ์ง€์›ํ•˜๊ธฐ.
 
@@ -231,7 +231,7 @@ Flask-apispec์€ Marshmallow์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 serialization๊ณผ validation์„ ์ •์˜ํ•˜๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ OpenAPI schema๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ.
 
@@ -251,7 +251,7 @@ Angular 2์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ์˜์กด์„ฑ ์ฃผ์ž… ์‹œ์Šคํ…œ์ด ํ†ตํ•ฉ๋˜์–ด ์žˆ
 
 ์ค‘์ฒฉ ๋ชจ๋ธ์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์š”์ฒญ์˜ JSON body๊ฐ€ ๋‚ด๋ถ€ ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ JSON ๊ฐ์ฒด์ด๊ณ  ๊ทธ ๋‚ด๋ถ€ ํ•„๋“œ๋“ค์ด ๋‹ค์‹œ ์ค‘์ฒฉ๋œ JSON ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ, ์ œ๋Œ€๋กœ ๋ฌธ์„œํ™”ํ•˜๊ณ  ๊ฒ€์ฆํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 Python ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ๋›ฐ์–ด๋‚œ ์—๋””ํ„ฐ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ.
 
@@ -271,7 +271,7 @@ Python ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ๋›ฐ์–ด๋‚œ ์—๋””ํ„ฐ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ.
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ๋ฏธ์นœ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ.
 
@@ -283,11 +283,11 @@ Python ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ๋›ฐ์–ด๋‚œ ์—๋””ํ„ฐ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ.
 
 Falcon์€ ๋˜ ๋‹ค๋ฅธ ๊ณ ์„ฑ๋Šฅ Python framework๋กœ, ์ตœ์†Œํ•œ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ณ  Hug ๊ฐ™์€ ๋‹ค๋ฅธ framework์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
 
-ํ•จ์ˆ˜๊ฐ€ ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(ํ•˜๋‚˜๋Š” "request", ํ•˜๋‚˜๋Š” "response")๋ฅผ ๋ฐ›๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ request์—์„œ ์ผ๋ถ€๋ฅผ "์ฝ๊ณ ", response์— ์ผ๋ถ€๋ฅผ "์ž‘์„ฑ"ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค๊ณ„ ๋•Œ๋ฌธ์—, ํ‘œ์ค€ Python type hints๋ฅผ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•ด ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ body๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
+ํ•จ์ˆ˜๊ฐ€ ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(ํ•˜๋‚˜๋Š” "์š”์ฒญ", ํ•˜๋‚˜๋Š” "์‘๋‹ต")๋ฅผ ๋ฐ›๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์š”์ฒญ์—์„œ ์ผ๋ถ€๋ฅผ "์ฝ๊ณ ", ์‘๋‹ต์— ์ผ๋ถ€๋ฅผ "์ž‘์„ฑ"ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค๊ณ„ ๋•Œ๋ฌธ์—, ํ‘œ์ค€ Python type hints๋ฅผ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•ด ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ body๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
 
-๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, serialization, ๋ฌธ์„œํ™”๋Š” ์ž๋™์œผ๋กœ ๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Hug์ฒ˜๋Ÿผ Falcon ์œ„์— framework๋ฅผ ์–น์–ด ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. request ๊ฐ์ฒด ํ•˜๋‚˜์™€ response ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” Falcon์˜ ์„ค๊ณ„์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๋‹ค๋ฅธ framework์—์„œ๋„ ๊ฐ™์€ ๊ตฌ๋ถ„์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
+๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, serialization, ๋ฌธ์„œํ™”๋Š” ์ž๋™์œผ๋กœ ๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Hug์ฒ˜๋Ÿผ Falcon ์œ„์— framework๋ฅผ ์–น์–ด ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๊ฐ์ฒด ํ•˜๋‚˜์™€ ์‘๋‹ต ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” Falcon์˜ ์„ค๊ณ„์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๋‹ค๋ฅธ framework์—์„œ๋„ ๊ฐ™์€ ๊ตฌ๋ถ„์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ํ›Œ๋ฅญํ•œ ์„ฑ๋Šฅ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ.
 
@@ -313,7 +313,7 @@ Pydantic ๊ฐ™์€ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ/seria
 
 Route๋Š” ํ•œ ๊ณณ์—์„œ ์„ ์–ธํ•˜๊ณ , ๋‹ค๋ฅธ ๊ณณ์— ์„ ์–ธ๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜ ๋ฐ”๋กœ ์œ„์— ๋‘˜ ์ˆ˜ ์žˆ๋Š” decorator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ ). ์ด๋Š” Flask(๋ฐ Starlette)๋ณด๋‹ค๋Š” Django ๋ฐฉ์‹์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒƒ๋“ค์„ ๋ถ„๋ฆฌํ•ด ๋†“์Šต๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ๋ชจ๋ธ ์†์„ฑ์˜ "default" ๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ฒ€์ฆ์„ ์ •์˜ํ•˜๊ธฐ. ์ด๋Š” ์—๋””ํ„ฐ ์ง€์›์„ ๊ฐœ์„ ํ•˜๋ฉฐ, ์ด์ „์—๋Š” Pydantic์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
 
@@ -341,7 +341,7 @@ Hug๋Š” Timothy Crosley๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. Python ํŒŒ์ผ์—์„œ import๋ฅผ ์ž
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์•„์ด๋””์–ด
 
 Hug๋Š” APIStar์˜ ์ผ๋ถ€์— ์˜๊ฐ์„ ์ฃผ์—ˆ๊ณ , ์ €๋Š” APIStar์™€ ํ•จ๊ป˜ Hug๋ฅผ ๊ฐ€์žฅ ์œ ๋งํ•œ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋กœ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
 
@@ -385,7 +385,7 @@ APIStar๋Š” Tom Christie๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ๋งŒ๋“  ์‚ฌ๋žŒ๊ณผ ๋™์ผ
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**์— ์˜๊ฐ์„ ์ค€ ์ 
 
 ์กด์žฌํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ.
 
@@ -409,7 +409,7 @@ Pydantic์€ Python type hints๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, serialization, 
 
 Marshmallow์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ benchmark์—์„œ Marshmallow๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ Python type hints๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ ์—๋””ํ„ฐ ์ง€์›๋„ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•ด
 
 ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ๋ฐ์ดํ„ฐ serialization, ์ž๋™ ๋ชจ๋ธ ๋ฌธ์„œํ™”(JSON Schema ๊ธฐ๋ฐ˜)๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ.
 
@@ -430,7 +430,7 @@ Starlette๋Š” ๊ฒฝ๋Ÿ‰ <dfn title="๋น„๋™๊ธฐ Python ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ
 * ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—….
 * ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์ด๋ฒคํŠธ.
 * HTTPX ๊ธฐ๋ฐ˜์˜ ํ…Œ์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ.
-* CORS, GZip, Static Files, Streaming responses.
+* CORS, GZip, Static Files, ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต.
 * ์„ธ์…˜ ๋ฐ ์ฟ ํ‚ค ์ง€์›.
 * 100% ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€.
 * 100% ํƒ€์ž… ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ์ฝ”๋“œ๋ฒ ์ด์Šค.
@@ -452,7 +452,7 @@ ASGI๋Š” Django ์ฝ”์–ด ํŒ€ ๋ฉค๋ฒ„๋“ค์ด ๊ฐœ๋ฐœ ์ค‘์ธ ์ƒˆ๋กœ์šด "ํ‘œ์ค€"์ž…๋‹ˆ๋‹ค
 
 ///
 
-/// tip | ํŒ
+/// tip | **FastAPI**๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•ด
 
 ํ•ต์‹ฌ ์›น ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ. ๊ทธ ์œ„์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ.
 
@@ -470,11 +470,11 @@ web framework๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ routing
 
 Starlette์™€ **FastAPI**์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
 
-/// tip | ํŒ
+/// tip | **FastAPI**๋Š” ์ด๋ฅผ ๋‹ค์Œ์œผ๋กœ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค
 
 **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ์›น ์„œ๋ฒ„.
 
-๋˜ํ•œ `--workers` ์ปค๋งจ๋“œ๋ผ์ธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ์„œ๋ฒ„๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
+๋˜ํ•œ `--workers` ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ์„œ๋ฒ„๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๋ฐฐํฌ](deployment/index.md) ์„น์…˜์„ ํ™•์ธํ•˜์„ธ์š”.
 
index 6cd0f4786432e273e2b668ac157d95960a334374..03f76346d6c03e18e1ce38446f37788c9ba852de 100644 (file)
@@ -1,5 +1,6 @@
 # ๋™์‹œ์„ฑ๊ณผ async / await { #concurrency-and-async-await }
 
+
 *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์—์„œ์˜ `async def` ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ๋น„๋™๊ธฐ ์ฝ”๋“œ, ๋™์‹œ์„ฑ ๋ฐ ๋ณ‘๋ ฌ์„ฑ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ
 
 ## ๋ฐ”์˜์‹ ๊ฐ€์š”? { #in-a-hurry }
index 9d9dc93a3d77db1232f3d122b2c5e62cd5e72e76..106a9ec3a260e07467608b4db3b43b3788435928 100644 (file)
 
 ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ API๋ฅผ **๊ตฌ์ถ•**, **๋ฐฐํฌ**, **์ ‘๊ทผ**ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
 
-FastAPIรซยก\9c รฌ\95ยฑ์„ ๋นŒ๋“œํ•  ๋•Œ์˜ ๋™์ผํ•œ **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜**์„ ํด๋ผ์šฐ๋“œ์— **๋ฐฐํฌ**ํ•˜๋Š” ๋ฐ์—๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
+FastAPIรซยก\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ๋นŒ๋“œํ•  ๋•Œ์˜ ๋™์ผํ•œ **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜**์„ ํด๋ผ์šฐ๋“œ์— **๋ฐฐํฌ**ํ•˜๋Š” ๋ฐ์—๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
 
 FastAPI Cloud๋Š” *FastAPI and friends* ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ํ›„์›์ž์ด์ž ์ž๊ธˆ ์ œ๊ณต์ž์ž…๋‹ˆ๋‹ค. โœจ
 
 ## ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด - ํ›„์›์ž๋“ค { #cloud-providers-sponsors }
 
-๋‹ค๋ฅธ ๋ช‡๋ช‡ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด๋“ค๋„ โœจ [**FastAPI๋ฅผ ํ›„์›ํ•ฉ๋‹ˆ๋‹ค**](../help-fastapi.md#sponsor-the-author) โœจ. ๐Ÿ™‡
+๋‹ค๋ฅธ ๋ช‡๋ช‡ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด๋“ค๋„ โœจ [**FastAPI๋ฅผ ํ›„์›ํ•ฉ๋‹ˆ๋‹ค**](https://github.com/sponsors/tiangolo) โœจ. ๐Ÿ™‡
 
 ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์ด๋“ค๋„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
index a5c5e53e0d914f0088845aede95994981d8f2b49..0bfd9dbad7525915a985c79f3f6fde7d2f9fd6db 100644 (file)
@@ -104,7 +104,7 @@ TLS Termination Proxy๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ
 
 ### ์‹œ์ž‘ ์‹œ ์ž๋™ ์‹คํ–‰ { #run-automatically-on-startup }
 
-รฌ\9dยผรซยฐ\98รฌย \81รฌ\9cยผรซยก\9c รฌ\84\9cรซยฒ\84 รญ\94\84รซยก\9cรชยทยธรซ\9eยจ(รฌ\98\88: Uvicorn)รฌ\9d\80 รฌ\84\9cรซยฒ\84รชยฐ\80 รฌ\8b\9cรฌ\9e\91รซ\90ย  รซ\95\8c รฌ\9e\90รซ\8f\99รฌ\9cยผรซยก\9c รฌ\8b\9cรฌ\9e\91รซ\90\98รชยณย , **รฌ\82ยฌรซ\9e\8cรฌ\9d\98 รชยฐ\9cรฌ\9e\85** รฌ\97\86รฌ\9dยดรซ\8f\84 FastAPI รฌ\95ยฑรฌ\9d\84 รฌ\8bยครญ\96\89รญ\95\98รซ\8a\94 รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยครชยฐ\80 รญ\95ยญรฌ\83\81 รฌ\8bยครญ\96\89 รฌยค\91รฌ\9dยดรซ\8f\84รซยก\9d(รฌ\98\88: FastAPI รฌ\95ยฑ์„ ์‹คํ–‰ํ•˜๋Š” Uvicorn) ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
+รฌ\9dยผรซยฐ\98รฌย \81รฌ\9cยผรซยก\9c รฌ\84\9cรซยฒ\84 รญ\94\84รซยก\9cรชยทยธรซ\9eยจ(รฌ\98\88: Uvicorn)รฌ\9d\80 รฌ\84\9cรซยฒ\84รชยฐ\80 รฌ\8b\9cรฌ\9e\91รซ\90ย  รซ\95\8c รฌ\9e\90รซ\8f\99รฌ\9cยผรซยก\9c รฌ\8b\9cรฌ\9e\91รซ\90\98รชยณย , **รฌ\82ยฌรซ\9e\8cรฌ\9d\98 รชยฐ\9cรฌ\9e\85** รฌ\97\86รฌ\9dยดรซ\8f\84 FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9d\84 รฌ\8bยครญ\96\89รญ\95\98รซ\8a\94 รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยครชยฐ\80 รญ\95ยญรฌ\83\81 รฌ\8bยครญ\96\89 รฌยค\91รฌ\9dยดรซ\8f\84รซยก\9d(รฌ\98\88: FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹คํ–‰ํ•˜๋Š” Uvicorn) ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
 ### ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ { #separate-program }
 
@@ -159,7 +159,7 @@ FastAPI๋กœ ์›น API๋ฅผ ๋งŒ๋“ค ๋•Œ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด, FastAPI๋Š” ๋ณด
 
 ///
 
-รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9d\84 รฌ\9eยฌรฌ\8b\9cรฌ\9e\91รญ\95\98รซ\8a\94 รฌ\97ยญรญ\95ย รฌ\9d\80 **รฌ\99ยธรซยถ\80 รฌยปยดรญ\8fยฌรซ\84\8cรญ\8aยธ**รชยฐ\80 รซยงยกรซ\8a\94 รญ\8eยธรฌ\9dยด รซยณยดรญ\86ยต รฌยข\8bรฌ\8aยตรซ\8b\88รซ\8bยค. รชยทยธ รฌ\8b\9cรฌย \90รฌ\97\90รซ\8a\94 Uvicornรชยณยผ Pythonรฌ\9d\84 รญ\8fยฌรญ\95ยจรญ\95\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9dยด รฌ\9dยดรซยฏยธ รญ\81ยฌรซ\9e\98รฌ\8b\9cรญ\96\88รชยธยฐ รซ\95\8cรซยฌยธรฌ\97\90, รชยฐ\99รฌ\9d\80 รฌ\95ยฑ์˜ ๊ฐ™์€ ์ฝ”๋“œ ์•ˆ์—์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
+รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9d\84 รฌ\9eยฌรฌ\8b\9cรฌ\9e\91รญ\95\98รซ\8a\94 รฌ\97ยญรญ\95ย รฌ\9d\80 **รฌ\99ยธรซยถ\80 รฌยปยดรญ\8fยฌรซ\84\8cรญ\8aยธ**รชยฐ\80 รซยงยกรซ\8a\94 รญ\8eยธรฌ\9dยด รซยณยดรญ\86ยต รฌยข\8bรฌ\8aยตรซ\8b\88รซ\8bยค. รชยทยธ รฌ\8b\9cรฌย \90รฌ\97\90รซ\8a\94 Uvicornรชยณยผ Pythonรฌ\9d\84 รญ\8fยฌรญ\95ยจรญ\95\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9dยด รฌ\9dยดรซยฏยธ รญ\81ยฌรซ\9e\98รฌ\8b\9cรญ\96\88รชยธยฐ รซ\95\8cรซยฌยธรฌ\97\90, รชยฐ\99รฌ\9d\80 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์˜ ๊ฐ™์€ ์ฝ”๋“œ ์•ˆ์—์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 
 ### ์ž๋™ ์žฌ์‹œ์ž‘์„ ์œ„ํ•œ ๋„๊ตฌ ์˜ˆ์‹œ { #example-tools-to-restart-automatically }
 
@@ -243,7 +243,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Uvicorn์„ ์‹คํ–‰ํ•˜๋Š” `fastapi` ๋ช…๋ น ๊ฐ™์€ 
 
 **์ปจํ…Œ์ด๋„ˆ**, Docker, Kubernetes์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋‚ด์šฉ์ด ์•„์ง์€ ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
 
-๋‹ค์Œ ์žฅ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€, Docker, Kubernetes ๋“ฑ์„ ๋” ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: [์ปจํ…Œ์ด๋„ˆ์—์„œ FastAPI - Docker](docker.md).
+ํ–ฅํ›„ ์žฅ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€, Docker, Kubernetes ๋“ฑ์„ ๋” ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: [์ปจํ…Œ์ด๋„ˆ์—์„œ FastAPI - Docker](docker.md).
 
 ///
 
@@ -275,13 +275,13 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Uvicorn์„ ์‹คํ–‰ํ•˜๋Š” `fastapi` ๋ช…๋ น ๊ฐ™์€ 
 
 ๊ฐ€๋Šฅํ•œ ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
 
-* รฌ\95ยฑ ์ปจํ…Œ์ด๋„ˆ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๋Š” Kubernetes์˜ โ€œInit Containerโ€
+* รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98 ์ปจํ…Œ์ด๋„ˆ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๋Š” Kubernetes์˜ โ€œInit Containerโ€
 * ์‚ฌ์ „ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” bash ์Šคํฌ๋ฆฝํŠธ
     * ์ด bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ์ž‘/์žฌ์‹œ์ž‘ํ•˜๊ณ , ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•๋„ ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
 
 /// tip | ํŒ
 
-์ปจํ…Œ์ด๋„ˆ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ ์žฅ์—์„œ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: [์ปจํ…Œ์ด๋„ˆ์—์„œ FastAPI - Docker](docker.md).
+์ปจํ…Œ์ด๋„ˆ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋Š” ํ–ฅํ›„ ์žฅ์—์„œ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: [์ปจํ…Œ์ด๋„ˆ์—์„œ FastAPI - Docker](docker.md).
 
 ///
 
index 93e69873a9ae6b279220da2d0b462b68f3a9e21d..db166bf2421d2575cb05f17fe0b3a5a58e8becd3 100644 (file)
@@ -11,7 +11,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๋•Œ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ **๋ฆฌ
 ///
 
 <details>
-<summary>Dockerfile Preview ๐Ÿ‘€</summary>
+<summary>Dockerfile ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๐Ÿ‘€</summary>
 
 ```Dockerfile
 FROM python:3.14
@@ -46,7 +46,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
 
 **์ปจํ…Œ์ด๋„ˆ**๋Š” **์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
 
-์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ผ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๊ธฐ๋ณธ ๋ช…๋ น/ํ”„๋กœ๊ทธ๋žจ์˜ **์ •์ ** ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ **์ •์ **์ด๋ผ๋Š” ๊ฒƒ์€ ์ปจํ…Œ์ด๋„ˆ **์ด๋ฏธ์ง€**๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŒจํ‚ค์ง•๋œ ํŒŒ์ผ๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ผ ๋ฟ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
+์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ผ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๊ธฐ๋ณธ ๋ช…๋ น์–ด/ํ”„๋กœ๊ทธ๋žจ์˜ **์ •์ ** ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ **์ •์ **์ด๋ผ๋Š” ๊ฒƒ์€ ์ปจํ…Œ์ด๋„ˆ **์ด๋ฏธ์ง€**๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŒจํ‚ค์ง•๋œ ํŒŒ์ผ๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ผ ๋ฟ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
 
 ์ €์žฅ๋œ ์ •์  ์ฝ˜ํ…์ธ ์ธ "**์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**"์™€ ๋‹ฌ๋ฆฌ, "**์ปจํ…Œ์ด๋„ˆ**"๋Š” ๋ณดํ†ต ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค, ์ฆ‰ **์‹คํ–‰๋˜๋Š”** ๋Œ€์ƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
 
@@ -62,7 +62,7 @@ Docker๋Š” **์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**์™€ **์ปจํ…Œ์ด๋„ˆ**๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
 
 ๋˜ํ•œ [Docker Hub](https://hub.docker.com/)์—๋Š” ๋‹ค์–‘ํ•œ ๋„๊ตฌ, ํ™˜๊ฒฝ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ **๊ณต์‹ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
-์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต์‹ [Python Image](https://hub.docker.com/_/python)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
+์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต์‹ [Python ์ด๋ฏธ์ง€](https://hub.docker.com/_/python)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด:
 
@@ -81,11 +81,11 @@ Docker๋‚˜ Kubernetes ๊ฐ™์€ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—๋Š” ์ด๋Ÿฌํ•œ
 
 ## ์ปจํ…Œ์ด๋„ˆ์™€ ํ”„๋กœ์„ธ์Šค { #containers-and-processes }
 
-**์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**๋Š” ๋ณดํ†ต **์ปจํ…Œ์ด๋„ˆ**๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ/๋ช…๋ น๊ณผ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์— ์ „๋‹ฌํ•  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
+**์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€**๋Š” ๋ณดํ†ต **์ปจํ…Œ์ด๋„ˆ**๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ/๋ช…๋ น์–ด์™€ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์— ์ „๋‹ฌํ•  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
 
-**์ปจํ…Œ์ด๋„ˆ**๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ํ•ด๋‹น ๋ช…๋ น/ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋‹ค๋ฅธ ๋ช…๋ น/ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).
+**์ปจํ…Œ์ด๋„ˆ**๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด/ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋‹ค๋ฅธ ๋ช…๋ น์–ด/ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).
 
-์ปจํ…Œ์ด๋„ˆ๋Š” **๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค**(๋ช…๋ น ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ)๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
+์ปจํ…Œ์ด๋„ˆ๋Š” **๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค**(๋ช…๋ น์–ด ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ)๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
 
 ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณดํ†ต **๋‹จ์ผ ํ”„๋กœ์„ธ์Šค**๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค์—์„œ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์— **์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค**๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
 
@@ -218,11 +218,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
 
     ๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด `Dockerfile`์˜ **๋๋ถ€๋ถ„ ๊ทผ์ฒ˜**์— ๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
 
-6. ๋‚ด๋ถ€์ ์œผ๋กœ Uvicorn์„ ์‚ฌ์šฉํ•˜๋Š” `fastapi run`์„ ์‚ฌ์šฉํ•˜๋„๋ก **๋ช…๋ น**์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
+6. ๋‚ด๋ถ€์ ์œผ๋กœ Uvicorn์„ ์‚ฌ์šฉํ•˜๋Š” `fastapi run`์„ ์‚ฌ์šฉํ•˜๋„๋ก **๋ช…๋ น์–ด**๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
 
     `CMD`๋Š” ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉฐ, ๊ฐ ๋ฌธ์ž์—ด์€ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ž…๋ ฅํ•˜๋Š” ํ•ญ๋ชฉ๋“ค์ž…๋‹ˆ๋‹ค.
 
-    รฌ\9dยด รซยช\85รซย ยนรฌ\9d\80 **ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ**์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋Š” ์œ„์—์„œ `WORKDIR /code`๋กœ ์„ค์ •ํ•œ `/code` ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
+    รฌ\9dยด รซยช\85รซย ยนรฌ\96ยดรซ\8a\94 **ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ**์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋Š” ์œ„์—์„œ `WORKDIR /code`๋กœ ์„ค์ •ํ•œ `/code` ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
 
 /// tip | ํŒ
 
@@ -258,7 +258,7 @@ FastAPI๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ(graceful shutdown)๋˜๊ณ  [lifespan ์ด๋ฒคํŠธ](
 
 ์ž์„ธํ•œ ๋‚ด์šฉ์€ [shell and exec form์— ๋Œ€ํ•œ Docker ๋ฌธ์„œ](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
-์ด๋Š” `docker compose`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฝค ๋ˆˆ์— ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ๊ธฐ์ˆ ์ ์ธ ์ƒ์„ธ ๋‚ด์šฉ์€ Docker Compose FAQ ์„น์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”: [Why do my services take 10 seconds to recreate or stop?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
+์ด๋Š” `docker compose`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฝค ๋ˆˆ์— ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ๊ธฐ์ˆ ์ ์ธ ์ƒ์„ธ ๋‚ด์šฉ์€ Docker Compose FAQ ์„น์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”: [์™œ ๋‚ด ์„œ๋น„์Šค๋Š” ๋‹ค์‹œ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ค‘์ง€๋˜๋Š” ๋ฐ 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋‚˜์š”?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
 
 #### ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ { #directory-structure }
 
@@ -409,7 +409,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
 
 2. ๋‹จ์ผ ํŒŒ์ผ `main.py`์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณต(serve)ํ•˜๊ธฐ ์œ„ํ•ด `fastapi run`์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
-`fastapi run`รฌ\97\90 รญ\8c\8cรฌ\9dยผรฌ\9d\84 รฌย \84รซ\8bยฌรญ\95\98รซยฉยด, รฌ\9dยดรชยฒ\83รฌ\9dยด รญ\8cยจรญ\82ยครฌยง\80รฌ\9d\98 รฌ\9dยผรซยถ\80รชยฐ\80 รฌ\95\84รซ\8b\8c รซ\8bยจรฌ\9dยผ รญ\8c\8cรฌ\9dยผรฌ\9dยดรซ\9dยผรซ\8a\94 รชยฒ\83รฌ\9d\84 รฌ\9e\90รซ\8f\99รฌ\9cยผรซยก\9c รชยฐ\90รฌยง\80รญ\95\98รชยณย , รฌ\96ยดรซ\96ยปรชยฒ\8c รฌ\9e\84รญ\8fยฌรญ\8aยธรญ\95ยดรฌ\84\9c FastAPI รฌ\95ยฑ์„ ์ œ๊ณตํ• ์ง€ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. ๐Ÿ˜Ž
+`fastapi run`รฌ\97\90 รญ\8c\8cรฌ\9dยผรฌ\9d\84 รฌย \84รซ\8bยฌรญ\95\98รซยฉยด, รฌ\9dยดรชยฒ\83รฌ\9dยด รญ\8cยจรญ\82ยครฌยง\80รฌ\9d\98 รฌ\9dยผรซยถ\80รชยฐ\80 รฌ\95\84รซ\8b\8c รซ\8bยจรฌ\9dยผ รญ\8c\8cรฌ\9dยผรฌ\9dยดรซ\9dยผรซ\8a\94 รชยฒ\83รฌ\9d\84 รฌ\9e\90รซ\8f\99รฌ\9cยผรซยก\9c รชยฐ\90รฌยง\80รญ\95\98รชยณย , รฌ\96ยดรซ\96ยปรชยฒ\8c รฌ\9e\84รญ\8fยฌรญ\8aยธรญ\95ยดรฌ\84\9c FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์ œ๊ณตํ• ์ง€ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. ๐Ÿ˜Ž
 
 ## ๋ฐฐํฌ ๊ฐœ๋… { #deployment-concepts }
 
@@ -472,17 +472,17 @@ HTTPS์— ์‚ฌ์šฉ๋˜๋Š” ๋™์ผํ•œ **TLS ์ข…๋ฃŒ ํ”„๋ก์‹œ** ์ปดํฌ๋„ŒํŠธ๊ฐ€ **๋กœ
 
 ///
 
-รซ\98\90รญ\95\9c รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รซยก\9c รฌ\9e\91รฌ\97\85รญ\95ย  รซ\95\8c, รฌ\9dยดรซยฅยผ รฌ\8b\9cรฌ\9e\91รญ\95\98รชยณย  รชยด\80รซยฆยฌรญ\95\98รซ\8a\94 รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\9d\80 รฌ\9dยดรซยฏยธ รญ\95ยดรซ\8bยน **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**(รซ\98\90รซ\8a\94 **TLS รฌยข\85รซยฃ\8c รญ\94\84รซยก\9dรฌ\8b\9c**)รฌ\97\90รฌ\84\9c รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑ์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ **๋„คํŠธ์›Œํฌ ํ†ต์‹ **(์˜ˆ: HTTP ์š”์ฒญ)์„ ์ „๋‹ฌํ•˜๋Š” ๋‚ด๋ถ€ ๋„๊ตฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
+รซ\98\90รญ\95\9c รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รซยก\9c รฌ\9e\91รฌ\97\85รญ\95ย  รซ\95\8c, รฌ\9dยดรซยฅยผ รฌ\8b\9cรฌ\9e\91รญ\95\98รชยณย  รชยด\80รซยฆยฌรญ\95\98รซ\8a\94 รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\9d\80 รฌ\9dยดรซยฏยธ รญ\95ยดรซ\8bยน **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**(รซ\98\90รซ\8a\94 **TLS รฌยข\85รซยฃ\8c รญ\94\84รซยก\9dรฌ\8b\9c**)รฌ\97\90รฌ\84\9c รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ **๋„คํŠธ์›Œํฌ ํ†ต์‹ **(์˜ˆ: HTTP ์š”์ฒญ)์„ ์ „๋‹ฌํ•˜๋Š” ๋‚ด๋ถ€ ๋„๊ตฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ### ํ•˜๋‚˜์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ - ์—ฌ๋Ÿฌ ์›Œ์ปค ์ปจํ…Œ์ด๋„ˆ { #one-load-balancer-multiple-worker-containers }
 
-**Kubernetes** รชยฐ\99รฌ\9d\80 รซยถ\84รฌ\82ยฐ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88 รชยด\80รซยฆยฌ รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\97\90รฌ\84\9cรซ\8a\94 รซ\82ยดรซยถ\80 รซ\84ยครญ\8aยธรฌ\9b\8cรญ\82ยน รซยฉ\94รฌยปยครซ\8b\88รฌยฆ\98รฌ\9d\84 รญ\86ยตรญ\95ยด, รซยฉ\94รฌ\9dยธ **รญ\8fยฌรญ\8aยธ**รฌ\97\90รฌ\84\9c รซ\8c\80รชยธยฐรญ\95\98รซ\8a\94 รซ\8bยจรฌ\9dยผ **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รชยฐ\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑ์„ ์‹คํ–‰ํ•˜๋Š” **์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ**๋กœ ํ†ต์‹ (์š”์ฒญ)์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+**Kubernetes** รชยฐ\99รฌ\9d\80 รซยถ\84รฌ\82ยฐ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88 รชยด\80รซยฆยฌ รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\97\90รฌ\84\9cรซ\8a\94 รซ\82ยดรซยถ\80 รซ\84ยครญ\8aยธรฌ\9b\8cรญ\82ยน รซยฉ\94รฌยปยครซ\8b\88รฌยฆ\98รฌ\9d\84 รญ\86ยตรญ\95ยด, รซยฉ\94รฌ\9dยธ **รญ\8fยฌรญ\8aยธ**รฌ\97\90รฌ\84\9c รซ\8c\80รชยธยฐรญ\95\98รซ\8a\94 รซ\8bยจรฌ\9dยผ **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รชยฐ\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹คํ–‰ํ•˜๋Š” **์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ**๋กœ ํ†ต์‹ (์š”์ฒญ)์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รฌ\95ยฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณดํ†ต **ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ** ๊ฐ€์ง‘๋‹ˆ๋‹ค(์˜ˆ: FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” Uvicorn ํ”„๋กœ์„ธ์Šค). ๋ชจ๋‘ ๊ฐ™์€ ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” **๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ**์ด์ง€๋งŒ, ๊ฐ์ž ๊ณ ์œ ํ•œ ํ”„๋กœ์„ธ์Šค, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด CPU์˜ **์„œ๋กœ ๋‹ค๋ฅธ ์ฝ”์–ด** ๋˜๋Š” **์„œ๋กœ ๋‹ค๋ฅธ ๋จธ์‹ **์—์„œ **๋ณ‘๋ ฌํ™”**์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณดํ†ต **ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ** ๊ฐ€์ง‘๋‹ˆ๋‹ค(์˜ˆ: FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” Uvicorn ํ”„๋กœ์„ธ์Šค). ๋ชจ๋‘ ๊ฐ™์€ ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” **๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ**์ด์ง€๋งŒ, ๊ฐ์ž ๊ณ ์œ ํ•œ ํ”„๋กœ์„ธ์Šค, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด CPU์˜ **์„œ๋กœ ๋‹ค๋ฅธ ์ฝ”์–ด** ๋˜๋Š” **์„œ๋กœ ๋‹ค๋ฅธ ๋จธ์‹ **์—์„œ **๋ณ‘๋ ฌํ™”**์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รชยทยธรซยฆยฌรชยณย  **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รชยฐ\80 รฌ\9e\88รซ\8a\94 รซยถ\84รฌ\82ยฐ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88 รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\9d\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑรฌ\9d\84 รฌ\8bยครญ\96\89รญ\95\98รซ\8a\94 รชยฐ\81 รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รฌ\97\90 **รซยฒ\88รชยฐ\88รฌ\95\84รชยฐ\80รซยฉยฐ** รฌ\9a\94รฌยฒยญรฌ\9d\84 **รซยถ\84รฌ\82ยฐ**รญ\95ยฉรซ\8b\88รซ\8bยค. รซ\94ยฐรซ\9dยผรฌ\84\9c รชยฐ\81 รฌ\9a\94รฌยฒยญรฌ\9d\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑ์„ ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ **๋ณต์ œ๋œ ์ปจํ…Œ์ด๋„ˆ** ์ค‘ ํ•˜๋‚˜์—์„œ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รชยทยธรซยฆยฌรชยณย  **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รชยฐ\80 รฌ\9e\88รซ\8a\94 รซยถ\84รฌ\82ยฐ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88 รฌ\8b\9cรฌ\8aยครญ\85\9cรฌ\9d\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9d\84 รฌ\8bยครญ\96\89รญ\95\98รซ\8a\94 รชยฐ\81 รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รฌ\97\90 **รซยฒ\88รชยฐ\88รฌ\95\84รชยฐ\80รซยฉยฐ** รฌ\9a\94รฌยฒยญรฌ\9d\84 **รซยถ\84รฌ\82ยฐ**รญ\95ยฉรซ\8b\88รซ\8bยค. รซ\94ยฐรซ\9dยผรฌ\84\9c รชยฐ\81 รฌ\9a\94รฌยฒยญรฌ\9d\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ **๋ณต์ œ๋œ ์ปจํ…Œ์ด๋„ˆ** ์ค‘ ํ•˜๋‚˜์—์„œ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รซ\98\90รญ\95\9c รซยณยดรญ\86ยต รฌ\9dยด **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รซ\8a\94 รญ\81ยดรซ\9fยฌรฌ\8aยครญ\84ยฐ รซ\82ยด *รซ\8bยครซยฅยธ* รฌ\95ยฑ์œผ๋กœ ๊ฐ€๋Š” ์š”์ฒญ(์˜ˆ: ๋‹ค๋ฅธ ๋„๋ฉ”์ธ, ๋˜๋Š” ๋‹ค๋ฅธ URL ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ ์•„๋ž˜๋กœ ๊ฐ€๋Š” ์š”์ฒญ)๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ํ†ต์‹ ์„ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ *๊ทธ ๋‹ค๋ฅธ* ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รซ\98\90รญ\95\9c รซยณยดรญ\86ยต รฌ\9dยด **รซยก\9cรซ\93\9c รซยฐยธรซ\9fยฐรฌ\84\9c**รซ\8a\94 รญ\81ยดรซ\9fยฌรฌ\8aยครญ\84ยฐ รซ\82ยด *รซ\8bยครซยฅยธ* รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์œผ๋กœ ๊ฐ€๋Š” ์š”์ฒญ(์˜ˆ: ๋‹ค๋ฅธ ๋„๋ฉ”์ธ, ๋˜๋Š” ๋‹ค๋ฅธ URL ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ ์•„๋ž˜๋กœ ๊ฐ€๋Š” ์š”์ฒญ)๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ํ†ต์‹ ์„ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ *๊ทธ ๋‹ค๋ฅธ* ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ### ์ปจํ…Œ์ด๋„ˆ๋‹น ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค { #one-process-per-container }
 
@@ -566,7 +566,7 @@ Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์•„๋งˆ๋„ [Init Container](https://kuberne
 
 ### ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ { #single-container }
 
-**รซ\8bยจรฌ\9dยผ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88**รฌ\97\90รฌ\84\9c รฌ\97ยฌรซ\9fยฌ **รฌ\9b\8cรฌยปยค รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยค**(รซ\98\90รซ\8a\94 รซ\8bยจรฌ\9dยผ รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยค)รซยฅยผ รฌ\8b\9cรฌ\9e\91รญ\95\98รซ\8a\94 รซ\8bยจรฌ\88\9cรญ\95\9c รฌ\85\8bรฌ\97\85รฌ\9dยดรซ\9dยผรซยฉยด, รฌ\95ยฑ์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ง์ „์— ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹œ์ž‘ ์ „ ์‚ฌ์ „ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+**รซ\8bยจรฌ\9dยผ รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88**รฌ\97\90รฌ\84\9c รฌ\97ยฌรซ\9fยฌ **รฌ\9b\8cรฌยปยค รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยค**(รซ\98\90รซ\8a\94 รซ\8bยจรฌ\9dยผ รญ\94\84รซยก\9cรฌ\84ยธรฌ\8aยค)รซยฅยผ รฌ\8b\9cรฌ\9e\91รญ\95\98รซ\8a\94 รซ\8bยจรฌ\88\9cรญ\95\9c รฌ\85\8bรฌ\97\85รฌ\9dยดรซ\9dยผรซยฉยด, รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ง์ „์— ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹œ์ž‘ ์ „ ์‚ฌ์ „ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ### ๋ฒ ์ด์Šค ๋„์ปค ์ด๋ฏธ์ง€ { #base-docker-image }
 
@@ -582,7 +582,7 @@ Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์•„๋งˆ๋„ [Init Container](https://kuberne
 
 ์ด Docker ์ด๋ฏธ์ง€๋Š” Uvicorn์ด ์ฃฝ์€ ์›Œ์ปค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋˜ ์‹œ๊ธฐ์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Gunicorn๊ณผ Uvicorn์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๊ณ , Gunicorn์ด Uvicorn ์›Œ์ปค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํ•œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 
-ํ•˜์ง€๋งŒ ์ด์ œ Uvicorn(๊ทธ๋ฆฌ๊ณ  `fastapi` ๋ช…๋ น)์€ `--workers`๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ๋ฒ ์ด์Šค ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ ์–‘๋„ ์‚ฌ์‹ค์ƒ ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ˜…).
+ํ•˜์ง€๋งŒ ์ด์ œ Uvicorn(๊ทธ๋ฆฌ๊ณ  `fastapi` ๋ช…๋ น์–ด)์€ `--workers`๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ๋ฒ ์ด์Šค ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ ์–‘๋„ ์‚ฌ์‹ค์ƒ ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿ˜…).
 
 ///
 
@@ -600,7 +600,7 @@ Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ด๋Š” ์•„๋งˆ๋„ [Init Container](https://kuberne
 
 ## `uv`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋„์ปค ์ด๋ฏธ์ง€ { #docker-image-with-uv }
 
-ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด [uv](https://github.com/astral-sh/uv)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, [uv Docker guide](https://docs.astral.sh/uv/guides/integration/docker/)๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด [uv](https://github.com/astral-sh/uv)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, [uv Docker ๊ฐ€์ด๋“œ](https://docs.astral.sh/uv/guides/integration/docker/)๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ## ์š”์•ฝ { #recap }
 
index 06ac147cdc17a1aa43b04db33ebb4160e18975ec..1db7dd25c08767489798e394c41e7b932c57613b 100644 (file)
@@ -14,7 +14,7 @@ HTTPS๋Š” ๊ทธ๋ƒฅ โ€œ์ผœ์ ธ ์žˆ๊ฑฐ๋‚˜โ€ ์•„๋‹ˆ๋ฉด โ€œ๊บผ์ ธ ์žˆ๋Š”โ€ ๊ฒƒ์ด๋ผ
 
 ์ด์ œ **๊ฐœ๋ฐœ์ž ๊ด€์ **์—์„œ HTTPS๋ฅผ ์ƒ๊ฐํ•  ๋•Œ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•  ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:
 
-* HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, **์„œ๋ฒ„**๊ฐ€ **์ œ3์ž**๊ฐ€ ๋ฐœ๊ธ‰ํ•œ **"์ธ์ฆ์„œ(certificates)"**๋ฅผ **๋ณด์œ **ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
+* HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, **์„œ๋ฒ„**๊ฐ€ **์ œ3์ž**๊ฐ€ ์ƒ์„ฑํ•œ **"์ธ์ฆ์„œ(certificates)"**๋ฅผ **๋ณด์œ **ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
     * ์ด ์ธ์ฆ์„œ๋Š” ์‹ค์ œ๋กœ '์ƒ์„ฑ'๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ3์ž๋กœ๋ถ€ํ„ฐ **๋ฐœ๊ธ‰/ํš๋“**ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 * ์ธ์ฆ์„œ์—๋Š” **์œ ํšจ ๊ธฐ๊ฐ„**์ด ์žˆ์Šต๋‹ˆ๋‹ค.
     * ์ฆ‰, **๋งŒ๋ฃŒ**๋ฉ๋‹ˆ๋‹ค.
index b2a91bd9412d89d3b9181524aa0efd2d4ac59666..fbac8169f306b8d8d9e8cc3d3f24c1414446ff1f 100644 (file)
@@ -1,6 +1,6 @@
 # ์„œ๋ฒ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ { #run-a-server-manually }
 
-## `fastapi run` ๋ช…๋ น ์‚ฌ์šฉํ•˜๊ธฐ { #use-the-fastapi-run-command }
+## `fastapi run` ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜๊ธฐ { #use-the-fastapi-run-command }
 
 ์š”์•ฝํ•˜๋ฉด, `fastapi run`์„ ์‚ฌ์šฉํ•ด FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋น„์Šคํ•˜์„ธ์š”:
 
@@ -40,7 +40,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
 
 ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒƒ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž
 
-รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด รฌ\9dยด รซยช\85รซย ยนรฌ\9d\80 รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รซ\82\98 รฌ\84\9cรซยฒ\84 รซ\93ยฑรฌ\97\90รฌ\84\9c **FastAPI** รฌ\95ยฑ์„ ์‹œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รฌ\98\88รซยฅยผ รซ\93ยครฌ\96ยด รฌ\9dยด รซยช\85รซย ยนรฌ\96ยดรซ\8a\94 รฌยปยจรญ\85\8cรฌ\9dยดรซ\84\88รซ\82\98 รฌ\84\9cรซยฒ\84 รซ\93ยฑรฌ\97\90รฌ\84\9c **FastAPI** รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ## ASGI ์„œ๋ฒ„ { #asgi-servers }
 
@@ -48,7 +48,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
 
 FastAPI๋Š” <abbr title="Asynchronous Server Gateway Interface - ๋น„๋™๊ธฐ ์„œ๋ฒ„ ๊ฒŒ์ดํŠธ์›จ์ด ์ธํ„ฐํŽ˜์ด์Šค">ASGI</abbr>๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”, Python ์›น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ‘œ์ค€์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. FastAPI๋Š” ASGI ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
 
-์›๊ฒฉ ์„œ๋ฒ„ ๋จธ์‹ ์—์„œ **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋˜๋Š” ๋‹ค๋ฅธ ASGI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ•ต์‹ฌ ์š”์†Œ๋Š” **Uvicorn** ๊ฐ™์€ ASGI ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. `fastapi` ๋ช…๋ น์—๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ด๊ฒƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
+รฌ\9b\90รชยฒยฉ รฌ\84\9cรซยฒ\84 รซยจยธรฌ\8bย รฌ\97\90รฌ\84\9c **FastAPI** รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98(รซ\98\90รซ\8a\94 รซ\8bยครซยฅยธ ASGI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98)รฌ\9d\84 รฌ\8bยครญ\96\89รญ\95\98รชยธยฐ รฌ\9c\84รญ\95ยด รญ\95\84รฌ\9a\94รญ\95\9c รญ\95ยตรฌ\8bยฌ รฌ\9a\94รฌ\86\8cรซ\8a\94 **Uvicorn** รชยฐ\99รฌ\9d\80 ASGI รฌ\84\9cรซยฒ\84 รญ\94\84รซยก\9cรชยทยธรซ\9eยจรฌ\9e\85รซ\8b\88รซ\8bยค. `fastapi` รซยช\85รซย ยนรฌ\96ยดรฌ\97\90รซ\8a\94 รชยธยฐรซยณยธรฌ\9cยผรซยก\9c รฌ\9dยดรชยฒ\83รฌ\9dยด รญ\8fยฌรญ\95ยจรซ\90\98รฌ\96ยด รฌ\9e\88รฌ\8aยตรซ\8b\88รซ\8bยค.
 
 ๋‹ค์Œ์„ ํฌํ•จํ•ด ์—ฌ๋Ÿฌ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค:
 
@@ -69,7 +69,7 @@ FastAPI๋Š” <abbr title="Asynchronous Server Gateway Interface - ๋น„๋™๊ธฐ ์„œ๋ฒ„
 
 ## ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํ•˜๊ธฐ { #install-the-server-program }
 
-FastAPIรซยฅยผ รฌ\84ยครฌยน\98รญ\95\98รซยฉยด รญ\94\84รซยก\9cรซ\8d\95รฌ\85\98 รฌ\84\9cรซยฒ\84รฌ\9dยธ Uvicornรฌ\9dยด รญ\95ยจรชยป\98 รฌ\84ยครฌยน\98รซ\90\98รซยฉยฐ, `fastapi run` รซยช\85รซย ยนรฌ\9cยผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+FastAPIรซยฅยผ รฌ\84ยครฌยน\98รญ\95\98รซยฉยด รญ\94\84รซยก\9cรซ\8d\95รฌ\85\98 รฌ\84\9cรซยฒ\84รฌ\9dยธ Uvicornรฌ\9dยด รญ\95ยจรชยป\98 รฌ\84ยครฌยน\98รซ\90\98รซยฉยฐ, `fastapi run` รซยช\85รซย ยนรฌ\96ยด๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ํ•˜์ง€๋งŒ ASGI ์„œ๋ฒ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -115,7 +115,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 80
 
 /// note | ์ฐธ๊ณ 
 
-`uvicorn main:app` รซยช\85รซย ยนรฌ\9d\80 ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค:
+`uvicorn main:app` รซยช\85รซย ยนรฌ\96ยดรซ\8a\94 ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค:
 
 * `main`: ํŒŒ์ผ `main.py`(Python "module").
 * `app`: `main.py` ์•ˆ์—์„œ `app = FastAPI()` ๋ผ์ธ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด.
@@ -128,7 +128,7 @@ from main import app
 
 ///
 
-รชยฐ\81 ASGI รฌ\84\9cรซยฒ\84 รญ\94\84รซยก\9cรชยทยธรซ\9eยจรฌ\9d\98 รซ\8c\80รฌ\95\88รซ\8f\84 รซยน\84รฌ\8aยทรญ\95\9c รซยช\85รซย ยนรฌ\9d\84 ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ์ž์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
+รชยฐ\81 ASGI รฌ\84\9cรซยฒ\84 รญ\94\84รซยก\9cรชยทยธรซ\9eยจรฌ\9d\98 รซ\8c\80รฌ\95\88รซ\8f\84 รซยน\84รฌ\8aยทรญ\95\9c รซยช\85รซย ยนรฌ\96ยดรซยฅยผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ์ž์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
 
 /// warning | ๊ฒฝ๊ณ 
 
index 6a6069df2715ecf6ec88df4ac05c99b89be56a8b..a29d9bb221393c226de4a071dddcc075eddf3f2b 100644 (file)
@@ -1,5 +1,6 @@
 # ์—๋””ํ„ฐ ์ง€์› { #editor-support }
 
+
 ๊ณต์‹ [FastAPI ํ™•์žฅ](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)์€ FastAPI ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ•ํ™”ํ•ด ์ค๋‹ˆ๋‹ค. *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ํƒ์ƒ‰ ๋ฐ ์ด๋™, FastAPI Cloud ๋ฐฐํฌ, ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
 
 ํ™•์žฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ [GitHub ์ €์žฅ์†Œ](https://github.com/fastapi/fastapi-vscode)์˜ README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
index 5b55960c8b274fb858886cdfb5e18f5e0c04fbeb..d807f7f61c8e80ff037320e7f09e34e782664607 100644 (file)
@@ -1,5 +1,6 @@
 # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ { #environment-variables }
 
+
 /// tip | ํŒ
 
 ๋งŒ์•ฝ "ํ™˜๊ฒฝ ๋ณ€์ˆ˜"๊ฐ€ ๋ฌด์—‡์ด๊ณ , ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, ์ด ์ฑ•ํ„ฐ๋ฅผ ์Šคํ‚ตํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.
index 80242190b33a241cec70b892d1a8ab029d4e4a55..2733eadca081cd178a60b06647b0b19e126e7adc 100644 (file)
@@ -63,7 +63,7 @@ second_user_data = {
 my_second_user: User = User(**second_user_data)
 ```
 
-/// note
+/// note | ์ฐธ๊ณ 
 
 `**second_user_data`๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
 
@@ -172,8 +172,8 @@ FastAPI๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ์ง€๋งŒ, ๋งค์šฐ ๊ฐ•๋ ฅํ•œ <dfn title='๋˜ํ•œ 
 * HTTPX ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ.
 * **CORS**, GZip, ์ •์  ํŒŒ์ผ, ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต.
 * **์„ธ์…˜๊ณผ ์ฟ ํ‚ค** ์ง€์›.
-* 100% test coverage.
-* 100% type annotated codebase.
+* 100% ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€.
+* 100% ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค.
 
 ## Pydantic ๊ธฐ๋Šฅ { #pydantic-features }
 
@@ -198,4 +198,4 @@ FastAPI๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ์ง€๋งŒ, ๋งค์šฐ ๊ฐ•๋ ฅํ•œ <dfn title='๋˜ํ•œ 
     * ๊นŠ๊ฒŒ **์ค‘์ฒฉ๋œ JSON** ๊ฐ์ฒด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๋ชจ๋‘ ๊ฒ€์ฆํ•˜๊ณ  ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 * **ํ™•์žฅ ๊ฐ€๋Šฅ**:
     * Pydantic์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ฑฐ๋‚˜, validator decorator๊ฐ€ ๋ถ™์€ ๋ชจ๋ธ ๋ฉ”์„œ๋“œ๋กœ ๊ฒ€์ฆ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-* 100% test coverage.
+* 100% ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€.
index 4d1a3a0970fccbdc3bd0980d728c68011404b448..9e944d78ce1354dfc293cb28f61c7b4da18021a7 100644 (file)
@@ -1,5 +1,6 @@
 # ๋„์›€ { #help }
 
+
 FastAPI๋ฅผ ๋•๊ฑฐ๋‚˜ FastAPI์— ๋Œ€ํ•œ ๋„์›€์„ ๋ฐ›๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?
 
 ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋•๊ณ  ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
index 8322266f5bc64b1f38427d6eda88a0c09faa4092..56af01951f6ee43a5819a1445a8e40e77d7a6277 100644 (file)
@@ -2,7 +2,7 @@
 
 ์ถ”๊ฐ€์ ์ธ [Swagger UI ๋งค๊ฐœ๋ณ€์ˆ˜](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รชยตยฌรฌ\84ยฑรฌ\9d\84 รญ\95\98รซย ยครซยฉยด, `FastAPI()` รฌ\95ยฑ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋˜๋Š” `get_swagger_ui_html()` ํ•จ์ˆ˜์— `swagger_ui_parameters` ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.
+รชยตยฌรฌ\84ยฑรฌ\9d\84 รญ\95\98รซย ยครซยฉยด, `FastAPI()` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98 ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋˜๋Š” `get_swagger_ui_html()` ํ•จ์ˆ˜์— `swagger_ui_parameters` ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.
 
 `swagger_ui_parameters`๋Š” Swagger UI์— ์ง์ ‘ ์ „๋‹ฌ๋œ ๊ตฌ์„ฑ์„ ํฌํ•จํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
 
index 99138a737002b60da0572a8ed3c18952ae7e0743..45e3cf766971a08335ead50b71ebc36afb3c6385 100644 (file)
@@ -1,5 +1,6 @@
 # ์ปค์Šคํ…€ Request ๋ฐ APIRoute ํด๋ž˜์Šค { #custom-request-and-apiroute-class }
 
+
 ์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” `Request`์™€ `APIRoute` ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋กœ์ง์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ํŠนํžˆ, ์ด๋Š” middleware์— ์žˆ๋Š” ๋กœ์ง์˜ ์ข‹์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
index c4353d57d3ae922107fc3367a012f42edb5ded67..3e8a2ebb6d672afa9677a5fb82305e49dcca8875 100644 (file)
@@ -2,7 +2,7 @@
 
 **FastAPI**๋Š” **ASGI** ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ, ASGI์™€๋„ ํ˜ธํ™˜๋˜๋Š” ์–ด๋–ค **GraphQL** ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“  ๋งค์šฐ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ๋ฐ˜ FastAPI **๊ฒฝ๋กœ ์ฒ˜๋ฆฌ**์™€ GraphQL์„ ํ•จ๊ป˜ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ๋ฐ˜ FastAPI *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์™€ GraphQL์„ ํ•จ๊ป˜ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 /// tip | ํŒ
 
index d47f0bc415017f22aa3c4d3e37552a45d73ae451..86394f1bf472934e5a89a5c6ccc8efb446c4bcf7 100644 (file)
@@ -8,6 +8,8 @@ FastAPI 0.119.0 ๋ฒ„์ „์—์„œ๋Š” v2๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„
 
 FastAPI 0.126.0 ๋ฒ„์ „์—์„œ๋Š” Pydantic v1 ์ง€์›์„ ์ค‘๋‹จํ–ˆ์ง€๋งŒ, `pydantic.v1`์€ ์ž ์‹œ ๋™์•ˆ ๊ณ„์† ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.
 
+FastAPI 0.128.0 ๋ฒ„์ „์—์„œ๋Š” `pydantic.v1` ์ง€์›๋„ ์ค‘๋‹จํ–ˆ์œผ๋ฏ€๋กœ, FastAPI์˜ ์ตœ์‹  ๋ฒ„์ „์€ Pydantic v2๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
+
 /// warning | ๊ฒฝ๊ณ 
 
 Pydantic ํŒ€์€ ์ตœ์‹  Python ๋ฒ„์ „์—์„œ Pydantic v1 ์ง€์›์„ ์ค‘๋‹จํ–ˆ์œผ๋ฉฐ, ์‹œ์ž‘ ๋ฒ„์ „์€ **Python 3.14**์ž…๋‹ˆ๋‹ค.
@@ -54,6 +56,16 @@ Pydantic v2๋Š” Pydantic v1์˜ ๋ชจ๋“  ๊ฒƒ์„ ์„œ๋ธŒ๋ชจ๋“ˆ `pydantic.v1`๋กœ ํฌํ•จ
 
 ### v2 ์•ˆ์˜ Pydantic v1์— ๋Œ€ํ•œ FastAPI ์ง€์› { #fastapi-support-for-pydantic-v1-in-v2 }
 
+/// warning | ๊ฒฝ๊ณ 
+
+`pydantic.v1` ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ด FastAPI ์ง€์›์€ **FastAPI 0.119.0**์—์„œ ์ถ”๊ฐ€๋˜์—ˆ๊ณ  **FastAPI 0.128.0**์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Pydantic v2๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์œ„ํ•œ ์ž„์‹œ ๋„์›€ ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
+
+ํ˜„์žฌ ๋ฒ„์ „์˜ FastAPI์—์„œ๋Š” ์•ฑ์—์„œ `pydantic.v1` ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
+
+์ด ์„น์…˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ํ•ด๋‹น ์˜ค๋ž˜๋œ ๋ฒ„์ „์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ์ง€์›์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
+
+///
+
 FastAPI 0.119.0๋ถ€ํ„ฐ๋Š” v2๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด, Pydantic v2 ๋‚ด๋ถ€์˜ Pydantic v1์— ๋Œ€ํ•ด์„œ๋„ ๋ถ€๋ถ„์ ์ธ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ๋”ฐ๋ผ์„œ Pydantic์„ ์ตœ์‹  v2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ , import๋ฅผ `pydantic.v1` ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊พธ๋ฉด, ๋งŽ์€ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
@@ -122,6 +134,12 @@ Pydantic v1 ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ `Body`, `Query`, `Form` ๋“ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์šฉ FastAPI
 
 ### ๋‹จ๊ณ„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ { #migrate-in-steps }
 
+/// warning | ๊ฒฝ๊ณ 
+
+์•„๋ž˜์— ์„ค๋ช…๋œ ๊ฐ™์€ ์•ฑ์—์„œ Pydantic v1๊ณผ v2 ๋ชจ๋ธ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ **FastAPI 0.119.0๋ถ€ํ„ฐ 0.127.x๊นŒ์ง€**์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” **FastAPI 0.128.0**์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ, ์ตœ์‹  ๋ฒ„์ „์€ **Pydantic v2** ๋ชจ๋ธ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
+
+///
+
 /// tip | ํŒ
 
 ๋จผ์ € `bump-pydantic`๋กœ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”. ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ณ  ์ž˜ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ๋์ž…๋‹ˆ๋‹ค. โœจ
index 207381804916cb8563fba9c54ec4c23d918a3862..6e82a9e2624db7798fd9745198c369057ed327d9 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๋Š” ์ด์ „๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์ •ํ™•ํ•˜๊ณ  **์˜ฌ๋ฐ”๋ฅด๊ฒŒ** ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๐Ÿ˜Ž
 
index 33f34b416f070b6703d6574fa717fd00c2f4180a..f839c82ef93360fd2ef2364673b40cf3eb027f85 100644 (file)
@@ -125,7 +125,7 @@ FastAPI๋Š” ํ˜„๋Œ€์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์„ฑ๋Šฅ), ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ํžŒํŠธ
 
 <div class="only-github" markdown="1">
 
-"_[...] ์ €๋Š” ์š”์ฆ˜ **FastAPI**๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. [...] ์‚ฌ์‹ค ์šฐ๋ฆฌ ํŒ€์˜ **๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ML ์„œ๋น„์Šค** ์ „๋ถ€๋ฅผ ๋ฐ”๊ฟ€ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ์ค‘ ์ผ๋ถ€๋Š” ํ•ต์‹ฌ **Windows**์™€ ๋ช‡๋ช‡์˜ **Office** ์ œํ’ˆ๋“ค์ด ํ†ตํ•ฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค._"
+"_[...] ์ €๋Š” ์š”์ฆ˜ **FastAPI**๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. [...] ์‚ฌ์‹ค ์šฐ๋ฆฌ ํŒ€์˜ **๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ML ์„œ๋น„์Šค** ์ „๋ถ€์— ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ์ค‘ ์ผ๋ถ€๋Š” ํ•ต์‹ฌ **Windows** ์ œํ’ˆ๊ณผ ์ผ๋ถ€ **Office** ์ œํ’ˆ์— ํ†ตํ•ฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค._"
 
 <div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(ref)</small></a></div>
 
@@ -137,7 +137,7 @@ FastAPI๋Š” ํ˜„๋Œ€์ ์ด๊ณ , ๋น ๋ฅด๋ฉฐ(๊ณ ์„ฑ๋Šฅ), ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž… ํžŒํŠธ
 
 ---
 
-"_**Netflix**๋Š” ์šฐ๋ฆฌ์˜ ์˜คํ”ˆ ์†Œ์Šค ๋ฐฐํฌํŒ์ธ **์œ„๊ธฐ ๊ด€๋ฆฌ** ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐœํ‘œํ•  ์ˆ˜ ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค: ๋ฐ”๋กœ **Dispatch**์ž…๋‹ˆ๋‹ค! [**FastAPI**๋กœ ๋นŒ๋“œ]_"
+"_**Netflix**๋Š” ์šฐ๋ฆฌ์˜ **์œ„๊ธฐ ๊ด€๋ฆฌ** ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ธ **Dispatch**์˜ ์˜คํ”ˆ ์†Œ์Šค ๊ณต๊ฐœ๋ฅผ ๋ฐœํ‘œํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! [**FastAPI**๋กœ ๋นŒ๋“œ]_"
 
 <div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072"><small>(ref)</small></a></div>
 
@@ -192,7 +192,7 @@ $ pip install "fastapi[standard]"
 
 </div>
 
-**Note**: ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์—์„œ ๋™์ž‘ํ•˜๋„๋ก `"fastapi[standard]"`๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ ๋„ฃ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
+**์ฐธ๊ณ **: ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์—์„œ ๋™์ž‘ํ•˜๋„๋ก `"fastapi[standard]"`๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ ๋„ฃ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
 
 ## ์˜ˆ์ œ { #example }
 
@@ -237,9 +237,9 @@ async def read_item(item_id: int, q: str | None = None):
     return {"item_id": item_id, "q": q}
 ```
 
-**Note**:
+**์ฐธ๊ณ **:
 
-์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ["๊ธ‰ํ•˜์„ธ์š”?"](https://fastapi.tiangolo.com/ko/async/#in-a-hurry) ์„น์…˜์„ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค.
+์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๋ฌธ์„œ์˜ [`async`์™€ `await`](https://fastapi.tiangolo.com/ko/async/#in-a-hurry)์— ๊ด€ํ•œ _"๊ธ‰ํ•˜์„ธ์š”?"_ ์„น์…˜์„ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค.
 
 </details>
 
index 774b03a190e0571458c7ec3e3075267908044ef0..3a5a9b940ed7b0f6f3c5f5381f0e1eb94c77df3d 100644 (file)
@@ -1,5 +1,6 @@
 # Full Stack FastAPI ํ…œํ”Œ๋ฆฟ { #full-stack-fastapi-template }
 
+
 ํ…œํ”Œ๋ฆฟ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ์„ค์ •๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€๋งŒ, ์œ ์—ฐํ•˜๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋””์ž์ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน์„ฑ๋“ค์€ ์—ฌ๋Ÿฌ๋ถ„์ด ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์ˆ˜์ •, ์ ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ , ํ…œํ”Œ๋ฆฟ์ด ์™„๋ฒฝํ•œ ์‹œ์ž‘์ ์ด ๋˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๐Ÿ
 
 ๋งŽ์€ ์ดˆ๊ธฐ ์„ค์ •, ๋ณด์•ˆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์ผ๋ถ€ API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ๋ถ„์€ ์ด ํ…œํ”Œ๋ฆฟ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
index 10b74b228a56b4220228cfecc8c618ba02940d23..a0216cd5b3386ef155d7c8d300db6fc674684707 100644 (file)
@@ -124,7 +124,7 @@ John Doe
 
 ์ด๊ฒƒ์€ **FastAPI**์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์ฃผ์š” ์œ„์น˜์ž…๋‹ˆ๋‹ค.
 
-### Simple ํƒ€์ž… { #simple-types }
+### ๊ฐ„๋‹จํ•œ ํƒ€์ž… { #simple-types }
 
 `str`๋ฟ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํŒŒ์ด์ฌ ํ‘œ์ค€ ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -287,7 +287,7 @@ Pydantic ๊ณต์‹ ๋ฌธ์„œ์˜ ์˜ˆ์‹œ:
 
 /// note | ์ฐธ๊ณ 
 
-Pydantic์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๋ ค๋ฉด [๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”](https://docs.pydantic.dev/).
+๋” ์•Œ์•„๋ณด๋ ค๋ฉด [Pydantic ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”](https://docs.pydantic.dev/).
 
 ///
 
index f9528604748361c8a755acc59f610dfaaf2c259f..bb3637f75100e7ee749b688bd54cc5a700be0d54 100644 (file)
@@ -17,16 +17,16 @@ Flask๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ๋‹ค๋ฉด, ์ด๋Š” Flask์˜ Blueprints์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ
 ```
 .
 โ”œโ”€โ”€ app
-โ”‚ย ย  โ”œโ”€โ”€ __init__.py
-โ”‚ย ย  โ”œโ”€โ”€ main.py
-โ”‚ย ย  โ”œโ”€โ”€ dependencies.py
-โ”‚ย ย  โ””โ”€โ”€ routers
-โ”‚ย ย  โ”‚   โ”œโ”€โ”€ __init__.py
-โ”‚ย ย  โ”‚   โ”œโ”€โ”€ items.py
-โ”‚ย ย  โ”‚   โ””โ”€โ”€ users.py
-โ”‚ย ย  โ””โ”€โ”€ internal
-โ”‚ย ย      โ”œโ”€โ”€ __init__.py
-โ”‚ย ย      โ””โ”€โ”€ admin.py
+โ”‚   โ”œโ”€โ”€ __init__.py
+โ”‚   โ”œโ”€โ”€ main.py
+โ”‚   โ”œโ”€โ”€ dependencies.py
+โ”‚   โ””โ”€โ”€ routers
+โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
+โ”‚   โ”‚   โ”œโ”€โ”€ items.py
+โ”‚   โ”‚   โ””โ”€โ”€ users.py
+โ”‚   โ””โ”€โ”€ internal
+โ”‚       โ”œโ”€โ”€ __init__.py
+โ”‚       โ””โ”€โ”€ admin.py
 ```
 
 /// tip | ํŒ
@@ -75,11 +75,11 @@ from app.routers import items
 
 ์‚ฌ์šฉ์ž๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „์šฉ ํŒŒ์ผ์ด `/app/routers/users.py`์˜ submodule์ด๋ผ๊ณ  ํ•ด๋ด…์‹œ๋‹ค.
 
-์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์™€ ๊ด€๋ จ๋œ *path operations*๋ฅผ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌํ•ด ๋‘๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
+์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์™€ ๊ด€๋ จ๋œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌํ•ด ๋‘๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
 ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ ๊ฐ™์€ **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/์›น API์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค(๊ฐ™์€ "Python Package"์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค).
 
-`APIRouter`๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ๋ชจ๋“ˆ์˜ *path operations*๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+`APIRouter`๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ๋ชจ๋“ˆ์˜ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ### `APIRouter` importํ•˜๊ธฐ { #import-apirouter }
 
@@ -87,9 +87,9 @@ from app.routers import items
 
 {* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[1,3] title["app/routers/users.py"] *}
 
-### `APIRouter`๋กœ *path operations* ๋งŒ๋“ค๊ธฐ { #path-operations-with-apirouter }
+### `APIRouter`๋กœ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๋งŒ๋“ค๊ธฐ { #path-operations-with-apirouter }
 
-๊ทธ ๋‹ค์Œ ์ด๋ฅผ ์‚ฌ์šฉํ•ด *path operations*๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
+๊ทธ ๋‹ค์Œ ์ด๋ฅผ ์‚ฌ์šฉํ•ด *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
 
 `FastAPI` ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:
 
@@ -107,7 +107,7 @@ from app.routers import items
 
 ///
 
-รฌ\9dยดรฌย \9c รฌ\9dยด `APIRouter`รซยฅยผ รซยฉ\94รฌ\9dยธ `FastAPI` รฌ\95ยฑ์— ํฌํ•จ(include)ํ•  ๊ฒƒ์ด์ง€๋งŒ, ๋จผ์ € dependencies์™€ ๋‹ค๋ฅธ `APIRouter` ํ•˜๋‚˜๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
+รฌ\9dยดรฌย \9c รฌ\9dยด `APIRouter`รซยฅยผ รซยฉ\94รฌ\9dยธ `FastAPI` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์— ํฌํ•จ(include)ํ•  ๊ฒƒ์ด์ง€๋งŒ, ๋จผ์ € dependencies์™€ ๋‹ค๋ฅธ `APIRouter` ํ•˜๋‚˜๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
 ## Dependencies { #dependencies }
 
@@ -131,7 +131,7 @@ from app.routers import items
 
 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ "items"๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „์šฉ endpoint๋“ค๋„ `app/routers/items.py` ๋ชจ๋“ˆ์— ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.
 
-์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ์— ๋Œ€ํ•œ *path operations*๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:
+์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ์— ๋Œ€ํ•œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 * `/items/`
 * `/items/{item_id}`
@@ -140,18 +140,18 @@ from app.routers import items
 
 ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์กฐ๊ธˆ ๋” ๋˜‘๋˜‘ํ•˜๊ฒŒ, ์ฝ”๋“œ๋ฅผ ์•ฝ๊ฐ„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
 
-์ด ๋ชจ๋“ˆ์˜ ๋ชจ๋“  *path operations*์—๋Š” ๋‹ค์Œ์ด ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค:
+์ด ๋ชจ๋“ˆ์˜ ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—๋Š” ๋‹ค์Œ์ด ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค:
 
 * ๊ฒฝ๋กœ `prefix`: `/items`.
 * `tags`: (ํƒœ๊ทธ ํ•˜๋‚˜: `items`).
 * ์ถ”๊ฐ€ `responses`.
 * `dependencies`: ๋ชจ๋‘ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  `X-Token` dependency๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
 
-๋”ฐ๋ผ์„œ ๊ฐ *path operation*๋งˆ๋‹ค ๋งค๋ฒˆ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹ , `APIRouter`์— ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+๋”ฐ๋ผ์„œ ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋งˆ๋‹ค ๋งค๋ฒˆ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹ , `APIRouter`์— ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 {* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
 
-๊ฐ *path operation*์˜ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ `/`๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ:
+๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์˜ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ `/`๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ:
 
 ```Python hl_lines="1"
 @router.get("/{item_id}")
@@ -163,13 +163,13 @@ async def read_item(item_id: str):
 
 ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ prefix๋Š” `/items`์ž…๋‹ˆ๋‹ค.
 
-๋˜ํ•œ ์ด router์— ํฌํ•จ๋œ ๋ชจ๋“  *path operations*์— ์ ์šฉ๋  `tags` ๋ชฉ๋ก๊ณผ ์ถ”๊ฐ€ `responses`๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+๋˜ํ•œ ์ด router์— ํฌํ•จ๋œ ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์— ์ ์šฉ๋  `tags` ๋ชฉ๋ก๊ณผ ์ถ”๊ฐ€ `responses`๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-๊ทธ๋ฆฌ๊ณ  router์˜ ๋ชจ๋“  *path operations*์— ์ถ”๊ฐ€๋  `dependencies` ๋ชฉ๋ก๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๊ฒฝ๋กœ๋“ค๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์‹คํ–‰/ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
+๊ทธ๋ฆฌ๊ณ  router์˜ ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์— ์ถ”๊ฐ€๋  `dependencies` ๋ชฉ๋ก๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๊ฒฝ๋กœ๋“ค๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์‹คํ–‰/ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
 
 /// tip | ํŒ
 
-[*path operation decorator์˜ dependencies*](dependencies/dependencies-in-path-operation-decorators.md)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, *path operation function*์— ์–ด๋–ค ๊ฐ’๋„ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
+[*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ*์˜ dependencies](dependencies/dependencies-in-path-operation-decorators.md)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์— ์–ด๋–ค ๊ฐ’๋„ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
 ///
 
@@ -183,14 +183,14 @@ async def read_item(item_id: str):
 * ๋‹จ์ผ ๋ฌธ์ž์—ด `"items"`๋ฅผ ํฌํ•จํ•˜๋Š” ํƒœ๊ทธ ๋ชฉ๋ก์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
     * ์ด "tags"๋Š” ์ž๋™ ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ ์‹œ์Šคํ…œ(OpenAPI ์‚ฌ์šฉ)์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
 * ๋ชจ๋‘ ๋ฏธ๋ฆฌ ์ •์˜๋œ `responses`๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
-* ์ด ๋ชจ๋“  *path operations*๋Š” ์‹คํ–‰๋˜๊ธฐ ์ „์— `dependencies` ๋ชฉ๋ก์ด ํ‰๊ฐ€/์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
-    * ํŠน์ • *path operation*์— dependencies๋ฅผ ์ถ”๊ฐ€๋กœ ์„ ์–ธํ•˜๋ฉด **๊ทธ๊ฒƒ๋“ค๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค**.
-    * router dependencies๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๊ทธ ๋‹ค์Œ์— [decorator์˜ `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ dependencies๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
+* ์ด ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋Š” ์‹คํ–‰๋˜๊ธฐ ์ „์— `dependencies` ๋ชฉ๋ก์ด ํ‰๊ฐ€/์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
+    * ํŠน์ • *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์— dependencies๋ฅผ ์ถ”๊ฐ€๋กœ ์„ ์–ธํ•˜๋ฉด **๊ทธ๊ฒƒ๋“ค๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค**.
+    * router dependencies๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๊ทธ ๋‹ค์Œ์— [๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ dependencies๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
     * [`scopes`๊ฐ€ ์žˆ๋Š” `Security` dependencies](../advanced/security/oauth2-scopes.md)๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 /// tip | ํŒ
 
-`APIRouter`์— `dependencies`๋ฅผ ๋‘๋Š” ๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์ฒด *path operations* ๊ทธ๋ฃน์— ์ธ์ฆ์„ ์š”๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ์— ๊ฐœ๋ณ„์ ์œผ๋กœ dependencies๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
+`APIRouter`์— `dependencies`๋ฅผ ๋‘๋Š” ๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์ฒด *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๊ทธ๋ฃน์— ์ธ์ฆ์„ ์š”๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ์— ๊ฐœ๋ณ„์ ์œผ๋กœ dependencies๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
 
 ///
 
@@ -232,7 +232,7 @@ from .dependencies import get_token_header
 
 ํ•˜์ง€๋งŒ ๊ทธ ํŒŒ์ผ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dependencies๋Š” `app/dependencies.py` ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รฌ\9aยฐรซยฆยฌ รฌ\95ยฑ/ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋– ์˜ฌ๋ ค ๋ณด์„ธ์š”:
+รฌ\9aยฐรซยฆยฌ รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98/ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋– ์˜ฌ๋ ค ๋ณด์„ธ์š”:
 
 <img src="/img/tutorial/bigger-applications/package.drawio.svg">
 
@@ -271,13 +271,13 @@ from ...dependencies import get_token_header
 
 ์ด๋Š” `app/` ์œ„์ชฝ์˜ ์–ด๋–ค package(์ž์‹ ์˜ `__init__.py` ํŒŒ์ผ ๋“ฑ์„ ๊ฐ€์ง„)์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์˜ˆ์‹œ์—์„œ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๐Ÿšจ
 
-รฌ\9dยดรฌย \9c รฌ\96ยดรซ\96ยปรชยฒ\8c รซ\8f\99รฌ\9e\91รญ\95\98รซ\8a\94รฌยง\80 รฌ\95\8cรฌ\95\98รฌ\9cยผรซ\8b\88, รฌ\95ยฑ์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•˜๋“  ์ƒ๋Œ€ import๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“
+รฌ\9dยดรฌย \9c รฌ\96ยดรซ\96ยปรชยฒ\8c รซ\8f\99รฌ\9e\91รญ\95\98รซ\8a\94รฌยง\80 รฌ\95\8cรฌ\95\98รฌ\9cยผรซ\8b\88, รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•˜๋“  ์ƒ๋Œ€ import๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค“
 
 ### ์ปค์Šคํ…€ `tags`, `responses`, `dependencies` ์ถ”๊ฐ€ํ•˜๊ธฐ { #add-some-custom-tags-responses-and-dependencies }
 
-`APIRouter`์— ์ด๋ฏธ prefix `/items`์™€ `tags=["items"]`๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ *path operation*์— ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
+`APIRouter`์— ์ด๋ฏธ prefix `/items`์™€ `tags=["items"]`๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์— ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
-ํ•˜์ง€๋งŒ ํŠน์ • *path operation*์—๋งŒ ์ ์šฉ๋  _์ถ”๊ฐ€_ `tags`๋ฅผ ๋”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๊ทธ *path operation* ์ „์šฉ์˜ ์ถ”๊ฐ€ `responses`๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
+ํ•˜์ง€๋งŒ ํŠน์ • *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—๋งŒ ์ ์šฉ๋  _์ถ”๊ฐ€_ `tags`๋ฅผ ๋”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๊ทธ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ์ „์šฉ์˜ ์ถ”๊ฐ€ `responses`๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 {* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[30:31] title["app/routers/items.py"] *}
 
@@ -416,13 +416,13 @@ router๋ฅผ ํฌํ•จ(include)ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
 
 ์ด์ œ ์กฐ์ง์—์„œ `app/internal/admin.py` ํŒŒ์ผ์„ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.
 
-์—ฌ๊ธฐ์—๋Š” ์กฐ์ง์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๊ฐ„์— ๊ณต์œ ํ•˜๋Š” ๊ด€๋ฆฌ์ž์šฉ *path operations*๊ฐ€ ์žˆ๋Š” `APIRouter`๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
+์—ฌ๊ธฐ์—๋Š” ์กฐ์ง์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๊ฐ„์— ๊ณต์œ ํ•˜๋Š” ๊ด€๋ฆฌ์ž์šฉ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ ์žˆ๋Š” `APIRouter`๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ์ง ๋‚ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์™€ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์–ด `prefix`, `dependencies`, `tags` ๋“ฑ์„ `APIRouter`์— ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค:
 
 {* ../../docs_src/bigger_applications/app_an_py310/internal/admin.py hl[3] title["app/internal/admin.py"] *}
 
-ํ•˜์ง€๋งŒ `APIRouter`๋ฅผ ํฌํ•จํ•  ๋•Œ ์ปค์Šคํ…€ `prefix`๋ฅผ ์ง€์ •ํ•ด ๋ชจ๋“  *path operations*๊ฐ€ `/admin`์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ํ•˜๊ณ , ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ ๊ฐ€์ง„ `dependencies`๋กœ ๋ณดํ˜ธํ•˜๊ณ , `tags`์™€ `responses`๋„ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
+ํ•˜์ง€๋งŒ `APIRouter`๋ฅผ ํฌํ•จํ•  ๋•Œ ์ปค์Šคํ…€ `prefix`๋ฅผ ์ง€์ •ํ•ด ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๊ฐ€ `/admin`์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ํ•˜๊ณ , ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ ๊ฐ€์ง„ `dependencies`๋กœ ๋ณดํ˜ธํ•˜๊ณ , `tags`์™€ `responses`๋„ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
 
 ์›๋ž˜ `APIRouter`๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ `app.include_router()`์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ด๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
@@ -430,26 +430,26 @@ router๋ฅผ ํฌํ•จ(include)ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
 
 ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๋ž˜ `APIRouter`๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์กฐ์ง ๋‚ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋™์ผํ•œ `app/internal/admin.py` ํŒŒ์ผ์„ ๊ณ„์† ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รชยฒยฐรชยณยผรฌย \81รฌ\9cยผรซยก\9c รฌ\9aยฐรซยฆยฌ รฌ\95ยฑรฌ\97\90รฌ\84\9c `admin` รซยชยจรซ\93\88รฌ\9d\98 รชยฐ\81 *path operations*๋Š” ๋‹ค์Œ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:
+รชยฒยฐรชยณยผรฌย \81รฌ\9cยผรซยก\9c รฌ\9aยฐรซยฆยฌ รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\97\90รฌ\84\9c `admin` รซยชยจรซ\93\88รฌ\9d\98 รชยฐ\81 *รชยฒยฝรซยก\9c รฌยฒ\98รซยฆยฌ*๋Š” ๋‹ค์Œ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:
 
 * prefix `/admin`.
 * tag `admin`.
 * dependency `get_token_header`.
 * ์‘๋‹ต `418`. ๐Ÿต
 
-รญ\95\98รฌยง\80รซยง\8c รฌ\9dยดรซ\8a\94 รฌ\9aยฐรซยฆยฌ รฌ\95ยฑ์—์„œ ๊ทธ `APIRouter`์—๋งŒ ์˜ํ–ฅ์„ ์ฃผ๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
+รญ\95\98รฌยง\80รซยง\8c รฌ\9dยดรซ\8a\94 รฌ\9aยฐรซยฆยฌ รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์—์„œ ๊ทธ `APIRouter`์—๋งŒ ์˜ํ–ฅ์„ ์ฃผ๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
 ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋“ค์€ ๊ฐ™์€ `APIRouter`๋ฅผ ๋‹ค๋ฅธ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-### *path operation* ํฌํ•จํ•˜๊ธฐ { #include-a-path-operation }
+### *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ํฌํ•จํ•˜๊ธฐ { #include-a-path-operation }
 
-*path operations*๋ฅผ `FastAPI` ์•ฑ์— ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
+*๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ `FastAPI` ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด... ๊ทธ๋ƒฅ ํ•ด๋ด…๋‹ˆ๋‹ค ๐Ÿคท:
 
 {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *}
 
-๊ทธ๋ฆฌ๊ณ  `app.include_router()`๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  *path operations*์™€ ํ•จ๊ป˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
+๊ทธ๋ฆฌ๊ณ  `app.include_router()`๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์™€ ํ•จ๊ป˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
 
 /// note | ๋งค์šฐ ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€์‚ฌํ•ญ
 
@@ -459,9 +459,9 @@ router๋ฅผ ํฌํ•จ(include)ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
 
 `APIRouter`๋Š” "mount"๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
-์ด๋Š” OpenAPI ์Šคํ‚ค๋งˆ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ๊ทธ๋“ค์˜ *path operations*๋ฅผ ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
+์ด๋Š” OpenAPI ์Šคํ‚ค๋งˆ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ๊ทธ๋“ค์˜ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋ฅผ ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
 
-FastAPI๋Š” ์›๋ž˜์˜ router์™€ *path operations*๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ , ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OpenAPI๋ฅผ ์ƒ์„ฑํ•  ๋•Œ router์˜ prefix, dependencies, tags, responses ๋ฐ ๊ธฐํƒ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
+FastAPI๋Š” ์›๋ž˜์˜ router์™€ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ , ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  OpenAPI๋ฅผ ์ƒ์„ฑํ•  ๋•Œ router์˜ prefix, dependencies, tags, responses ๋ฐ ๊ธฐํƒ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
 
 ///
 
@@ -480,7 +480,7 @@ entrypoint = "app.main:app"
 from app.main import app
 ```
 
-รฌ\9dยดรซย \87รชยฒ\8c รญ\95\98รซยฉยด `fastapi` รซยช\85รซย ยนรฌ\96ยดรชยฐ\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑ์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รฌ\9dยดรซย \87รชยฒ\8c รญ\95\98รซยฉยด `fastapi` รซยช\85รซย ยนรฌ\96ยดรชยฐ\80 รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 /// Note | ์ฐธ๊ณ 
 
@@ -498,7 +498,7 @@ $ fastapi dev app/main.py
 
 ## ์ž๋™ API ๋ฌธ์„œ ํ™•์ธํ•˜๊ธฐ { #check-the-automatic-api-docs }
 
-รฌ\9dยดรฌย \9c รฌ\95ยฑ์„ ์‹คํ–‰ํ•˜์„ธ์š”:
+รฌ\9dยดรฌย \9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์‹คํ–‰ํ•˜์„ธ์š”:
 
 <div class="termy">
 
@@ -532,16 +532,16 @@ $ fastapi dev
 router.include_router(other_router)
 ```
 
-`router`รซยฅยผ `FastAPI` รฌ\95ยฑรฌ\97\90 รญ\8fยฌรญ\95ยจรญ\95\98รชยธยฐ รฌย \84รฌ\9dยดรซ\93ย  รญ\9b\84รซ\93ย , รฌ\96ยดรซ\8a\90 รฌ\8b\9cรฌย \90รฌ\97\90 รญ\95ยดรซ\8f\84 รซ\90ยฉรซ\8b\88รซ\8bยค. FastAPIรซ\8a\94 รซ\9dยผรฌ\9aยฐรญ\8c\85รชยณยผ OpenAPIรฌ\97\90 `other_router`รฌ\9d\98 *path operations*๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
+`router`รซยฅยผ `FastAPI` รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\97\90 รญ\8fยฌรญ\95ยจรญ\95\98รชยธยฐ รฌย \84รฌ\9dยดรซ\93ย  รญ\9b\84รซ\93ย , รฌ\96ยดรซ\8a\90 รฌ\8b\9cรฌย \90รฌ\97\90 รญ\95ยดรซ\8f\84 รซ\90ยฉรซ\8b\88รซ\8bยค. FastAPIรซ\8a\94 รซ\9dยผรฌ\9aยฐรญ\8c\85รชยณยผ OpenAPIรฌ\97\90 `other_router`รฌ\9d\98 *รชยฒยฝรซยก\9c รฌยฒ\98รซยฆยฌ*๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
 
-๋‚˜์ค‘์— router๋“ค์— ์ถ”๊ฐ€๋œ *path operations*๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ˆ˜ํ–‰ํ•œ ํฌํ•จ์„ ํ†ตํ•ด์„œ๋„ ๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
+๋‚˜์ค‘์— router๋“ค์— ์ถ”๊ฐ€๋œ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ˆ˜ํ–‰ํ•œ ํฌํ•จ์„ ํ†ตํ•ด์„œ๋„ ๋ณด์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
 
 /// warning | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
 
 router๋ฅผ ํฌํ•จํ•œ ๋’ค์— `router.routes`๋ฅผ ์ง์ ‘ ๋ณ€ํ˜•ํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•˜์„ธ์š”. FastAPI๋Š” router ํฌํ•จ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์›๋ž˜ router์™€ ๊ทธ routes๋Š” ๋ผ์šฐํŒ…๊ณผ OpenAPI ์ƒ์„ฑ์˜ ์ผ๋ถ€๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-๊ฒฝ๋กœ์™€ router๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” path operation ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ `.include_router()` ๊ฐ™์€ ๋ฌธ์„œํ™”๋œ API๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
+๊ฒฝ๋กœ์™€ router๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ `.include_router()` ๊ฐ™์€ ๋ฌธ์„œํ™”๋œ API๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
 
-`router.routes`๋Š” ์ตœ์ข… *path operations*์˜ ํ‰ํƒ„ํ™”๋œ ๋ชฉ๋ก์ด ์•„๋‹ˆ๋ผ, route ์ •์˜์™€ ํฌํ•จ๋œ router๋ฅผ ๋‹ด๋Š” ํ•˜์œ„ ์ˆ˜์ค€์˜ ํŠธ๋ฆฌ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์—ฌ๊ธฐ์— ์˜์กดํ•˜์ง€ ๋งˆ์„ธ์š”.
+`router.routes`๋Š” ์ตœ์ข… *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์˜ ํ‰ํƒ„ํ™”๋œ ๋ชฉ๋ก์ด ์•„๋‹ˆ๋ผ, route ์ •์˜์™€ ํฌํ•จ๋œ router๋ฅผ ๋‹ด๋Š” ํ•˜์œ„ ์ˆ˜์ค€์˜ ํŠธ๋ฆฌ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์—ฌ๊ธฐ์— ์˜์กดํ•˜์ง€ ๋งˆ์„ธ์š”.
 
 ///
index e6c70d179c19c99e120990cdf768a9a96b423b1c..7ca6305c361a533678f7bc1ad10945fae9717f71 100644 (file)
@@ -182,7 +182,7 @@ Pydantic ๋ชจ๋ธ ๋Œ€์‹  `dict`๋กœ ์ง์ ‘ ์ž‘์—…ํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํŽธ์ง‘
 
 ๋˜ํ•œ ํ‚ค๋Š” ์–ด๋–ค ํƒ€์ž…์ด๊ณ  ๊ฐ’์€ ๋‹ค๋ฅธ ํƒ€์ž…์ธ `dict`๋กœ ๋ณธ๋ฌธ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รฌ\9dยดรซย \87รชยฒ\8c รญ\95\98รซยฉยด (Pydantic รซยชยจรซ\8dยธรฌ\9d\84 รฌ\82ยฌรฌ\9aยฉรญ\95\98รซ\8a\94 รชยฒยฝรฌ\9aยฐรฌยฒ\98รซ\9fยผ) ์œ ํšจํ•œ ํ•„๋“œ/์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ๋ฏธ๋ฆฌ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
+รฌ\9dยดรซย \87รชยฒ\8c รญ\95\98รซยฉยด (Pydantic รซยชยจรซ\8dยธรฌ\9d\84 รฌ\82ยฌรฌ\9aยฉรญ\95\98รซ\8a\94 รชยฒยฝรฌ\9aยฐรฌ\99\80 รซ\8bยฌรซยฆยฌ) ์œ ํšจํ•œ ํ•„๋“œ/์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ๋ฏธ๋ฆฌ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
 
 ์•„์ง ๋ชจ๋ฅด๋Š” ํ‚ค๋ฅผ ๋ฐ›์œผ๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
 
index e5a670baf4fe49675db968e95d79b20aec02cfd1..dde07080740ffea1720014e58c8618f2611e8e35 100644 (file)
@@ -10,7 +10,7 @@
 
 /// note | ์ฐธ๊ณ 
 
-๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด, (์ข€ ๋” ๋ณดํŽธ์ ์ธ) `POST`, `PUT`, `DELETE` ํ˜น์€ `PATCH` ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
+๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด, `POST` (๊ฐ€์žฅ ์ผ๋ฐ˜์ ), `PUT`, `DELETE` ํ˜น์€ `PATCH` ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
 
 `GET` ์š”์ฒญ์— ๋ณธ๋ฌธ์„ ๋‹ด์•„ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ๋ช…์„ธ์„œ์— ์ •์˜๋˜์ง€ ์•Š์€ ํ–‰๋™์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ด ๋ฐฉ์‹์€ ์•„์ฃผ ๋ณต์žกํ•œ/๊ทนํ•œ์˜ ์‚ฌ์šฉ ์ƒํ™ฉ์—์„œ๋งŒ FastAPI์— ์˜ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.
 
@@ -88,7 +88,7 @@
 
 ## ํŽธ์ง‘๊ธฐ ์ง€์› { #editor-support }
 
-ํŽธ์ง‘๊ธฐ์—์„œ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ํƒ€์ž… ํžŒํŠธ์™€ ์™„์„ฑ์„ ์–ด๋””์„œ๋‚˜ (๋งŒ์•ฝ Pydantic model ๋Œ€์‹ ์— `dict`์„ ๋ฐ›์„ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค) ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
+ํŽธ์ง‘๊ธฐ์—์„œ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ํƒ€์ž… ํžŒํŠธ์™€ ์™„์„ฑ์„ ์–ด๋””์„œ๋‚˜ (๋งŒ์•ฝ Pydantic ๋ชจ๋ธ ๋Œ€์‹ ์— `dict`์„ ๋ฐ›์„ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค) ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 <img src="/img/tutorial/body/image03.png">
 
 
 **๋ณธ๋ฌธ**, **๊ฒฝ๋กœ** ๊ทธ๋ฆฌ๊ณ  **์ฟผ๋ฆฌ** ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชจ๋‘ ๋™์‹œ์— ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-**FastAPI**๋Š” ๊ฐ๊ฐ์„ ์ธ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
+**FastAPI**๋Š” ๊ฐ๊ฐ์„ ์ธ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์—์„œ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
 {* ../../docs_src/body/tutorial004_py310.py hl[16] *}
 
 ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ์„ ๋”ฐ๋ผ์„œ ์ธ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:
 
 * ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ **๊ฒฝ๋กœ**์—๋„ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ด๋Š” ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
-* ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ (`int`, `float`, `str`, `bool` ๋“ฑ๊ณผ ๊ฐ™์€) **์œ ์ผํ•œ ํƒ€์ž…**์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด, **์ฟผ๋ฆฌ** ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
+* ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ (`int`, `float`, `str`, `bool` ๋“ฑ๊ณผ ๊ฐ™์€) **๋‹จ์ผ ํƒ€์ž…**์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด, **์ฟผ๋ฆฌ** ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 * ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ **Pydantic ๋ชจ๋ธ** ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋ฉด, ์š”์ฒญ **๋ณธ๋ฌธ**์œผ๋กœ ํ•ด์„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
 /// note | ์ฐธ๊ณ 
@@ -163,4 +163,4 @@ FastAPI๋Š” `q`์˜ ๊ฐ’์ด ํ•„์š”์—†์Œ์„ ๊ธฐ๋ณธ ๊ฐ’ `= None` ๋•Œ๋ฌธ์— ์•Œ๊ฒŒ 
 
 ## Pydantic์—†์ด { #without-pydantic }
 
-๋งŒ์•ฝ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, **Body** ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body) ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
+๋งŒ์•ฝ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, **Body** ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [Body - ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜: ๋ณธ๋ฌธ์˜ ๋‹จ์ผ ๊ฐ’](body-multiple-params.md#singular-values-in-body) ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
index f437286b25bc993f5fa5bfd3f14d4c552fbb154d..c3d06c0b8a507fd288125417e2e4fb46a1293660 100644 (file)
@@ -59,7 +59,7 @@ Python์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ์˜ ๋‚ด๋ถ€ ๋ณ€์ˆ˜ `__name__`์€ 
 ```Python
 from myapp import app
 
-# Some more code
+# ์ถ”๊ฐ€ ์ฝ”๋“œ
 ```
 
 ์ด ๊ฒฝ์šฐ `myapp.py` ๋‚ด๋ถ€์˜ ์ž๋™ ๋ณ€์ˆ˜ `__name__`์—๋Š” ๊ฐ’์ด `"__main__"`์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
@@ -99,7 +99,7 @@ from myapp import app
 
 ---
 
-Pycharm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
+PyCharm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
 
 * "Run" ๋ฉ”๋‰ด๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
 * "Debug..." ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
index 61bb47d9da8c3fb3f06ba4d30ee695fdf68f91b8..67405ff6c2b58620c859417aed92d788e18c4da5 100644 (file)
@@ -4,7 +4,7 @@ FastAPI๋Š” <dfn title='๋•Œ๋กœ๋Š” "exit code", "cleanup code", "teardown code", "
 
 ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด `return` ๋Œ€์‹  `yield`๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ถ”๊ฐ€๋กœ ์‹คํ–‰ํ•  ๋‹จ๊ณ„ (์ฝ”๋“œ)๋ฅผ ๊ทธ ๋’ค์— ์ž‘์„ฑํ•˜์„ธ์š”.
 
-/// tip
+/// tip | ํŒ
 
 ๊ฐ ์˜์กด์„ฑ๋งˆ๋‹ค `yield`๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
@@ -39,7 +39,7 @@ yield๋œ ๊ฐ’์€ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๋ฐ ๋‹ค๋ฅธ ์˜์กด์„ฑ๋“ค์— ์ฃผ์ž…๋˜๋Š” ๊ฐ’ ์ž…
 
 {* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *}
 
-/// tip
+/// tip | ํŒ
 
 `async` ํ•จ์ˆ˜์™€ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -55,7 +55,7 @@ yield๋œ ๊ฐ’์€ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๋ฐ ๋‹ค๋ฅธ ์˜์กด์„ฑ๋“ค์— ์ฃผ์ž…๋˜๋Š” ๊ฐ’ ์ž…
 
 ๋”ฐ๋ผ์„œ, ์˜์กด์„ฑ ๋‚ด์—์„œ `except SomeException`์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รซยง\88รฌยฐยฌรชยฐ\80รฌยง\80รซยก\9c, `finally`รซยฅยผ รฌ\82ยฌรฌ\9aยฉรญ\95\98รฌ\97ยฌ รฌ\98\88รฌ\99ยธ รซยฐ\9cรฌ\83\9d รฌ\97ยฌรซยถ\80รฌ\99\80 รชยด\80รชยณ\84 รฌ\97\86รฌ\9dยด รฌยข\85รซยฃ\8c รซ\8bยจรชยณ\84รชยน\8c ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รซยง\88รฌยฐยฌรชยฐ\80รฌยง\80รซยก\9c, `finally`รซยฅยผ รฌ\82ยฌรฌ\9aยฉรญ\95\98รฌ\97ยฌ รฌ\98\88รฌ\99ยธ รซยฐ\9cรฌ\83\9d รฌ\97ยฌรซยถ\80รฌ\99\80 รชยด\80รชยณ\84 รฌ\97\86รฌ\9dยด รฌยข\85รซยฃ\8c รซ\8bยจรชยณ\84รชยฐ\80 ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 {* ../../docs_src/dependencies/tutorial007_py310.py hl[3,5] *}
 
@@ -87,7 +87,7 @@ yield๋œ ๊ฐ’์€ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๋ฐ ๋‹ค๋ฅธ ์˜์กด์„ฑ๋“ค์— ์ฃผ์ž…๋˜๋Š” ๊ฐ’ ์ž…
 
 /// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
 
-ํŒŒ์ด์ฌ์˜ [Context Managers](https://docs.python.org/3/library/contextlib.html) ๋•๋ถ„์— ์ด ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
+ํŒŒ์ด์ฌ์˜ [์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž](https://docs.python.org/3/library/contextlib.html) ๋•๋ถ„์— ์ด ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
 
 **FastAPI**๋Š” ์ด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
 
@@ -101,7 +101,7 @@ yield๋œ ๊ฐ’์€ *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ* ๋ฐ ๋‹ค๋ฅธ ์˜์กด์„ฑ๋“ค์— ์ฃผ์ž…๋˜๋Š” ๊ฐ’ ์ž…
 
 ์˜ˆ๋ฅผ ๋“ค์–ด, `HTTPException` ๊ฐ™์€ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-/// tip
+/// tip | ํŒ
 
 ์ด๋Š” ๋‹ค์†Œ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์ด๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜* ๋“ฑ ๋‚˜๋จธ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ (`HTTPException` ํฌํ•จ)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 
@@ -170,7 +170,7 @@ participant tasks as Background tasks
     end
 ```
 
-/// note
+/// note | ์ฐธ๊ณ 
 
 ํด๋ผ์ด์–ธํŠธ์—๋Š” **ํ•˜๋‚˜์˜ ์‘๋‹ต**๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜ ์‘๋‹ต ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜๋„ ์žˆ๊ณ , *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—์„œ ์ƒ์„ฑ๋œ ์‘๋‹ต์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
 
@@ -178,7 +178,7 @@ participant tasks as Background tasks
 
 ///
 
-/// tip
+/// tip | ํŒ
 
 *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜*์˜ ์ฝ”๋“œ์—์„œ ์–ด๋–ค ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด `HTTPException`์„ ํฌํ•จํ•ด `yield`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์˜ˆ์™ธ(๋˜๋Š” ์ƒˆ ์˜ˆ์™ธ)๋ฅผ `yield`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ์—์„œ ๋‹ค์‹œ ๋ฐœ์ƒ์‹œ์ผœ, ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
@@ -234,6 +234,7 @@ participant operation as Path Operation
 `yield`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃจ๊ณ  ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์ „ํ•ด ์™”์Šต๋‹ˆ๋‹ค.
 
 FastAPI์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์—์„œ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ณ ๊ธ‰ ๊ฐ€์ด๋“œ์˜ [๊ณ ๊ธ‰ ์˜์กด์„ฑ - `yield`, `HTTPException`, `except` ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks)์—์„œ ๋” ์ž์„ธํžˆ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+
 ## ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž { #context-managers }
 
 ### "์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž"๋ž€ { #what-are-context-managers }
@@ -256,7 +257,7 @@ with open("./somefile.txt") as f:
 
 ### `yield`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ์—์„œ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉํ•˜๊ธฐ { #using-context-managers-in-dependencies-with-yield }
 
-/// warning
+/// warning | ๊ฒฝ๊ณ 
 
 ์ด๊ฒƒ์€ ์–ด๋А ์ •๋„ "๊ณ ๊ธ‰" ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
 
@@ -271,7 +272,7 @@ Python์—์„œ๋Š” [๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ: `__enter__()`์™€ `__exit__()`๊ฐ€ ์žˆ๋Š” 
 
 {* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
 
-/// tip
+/// tip | ํŒ
 
 ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
 
index da62a399273a094c4615f6b7b136229890f9dc7a..6583cd63b7463299bd0925737357eb3b005c4c7b 100644 (file)
@@ -1,5 +1,6 @@
 # ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ž๋ฃŒํ˜• { #extra-data-types }
 
+
 ์ง€๊ธˆ๊นŒ์ง€ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
 
 * `int`
index 157549f92fc48cf3a6a2ec187e145f33390e47bb..c33abc181fa5993e9ad37141418ac81d67aff3fe 100644 (file)
@@ -8,7 +8,7 @@
 * **์ถœ๋ ฅ ๋ชจ๋ธ**์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
 * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ**์€ ์•„๋งˆ๋„ ํ•ด์‹œ ์ฒ˜๋ฆฌ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
-/// danger
+/// danger | ์œ„ํ—˜
 
 ์ ˆ๋Œ€ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์ €์žฅํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•ญ์ƒ ์ดํ›„์— ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ "์•ˆ์ „ํ•œ ํ•ด์‹œ(secure hash)"๋กœ ์ €์žฅํ•˜์„ธ์š”.
 
@@ -132,7 +132,7 @@ UserInDB(
 )
 ```
 
-/// warning
+/// warning | ๊ฒฝ๊ณ 
 
 ์ถ”๊ฐ€์ ์œผ๋กœ ์ œ๊ณต๋œ ํ•จ์ˆ˜ `fake_password_hasher`์™€ `fake_save_user`๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‹œ์—ฐํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ์ผ ๋ฟ์ด๋ฉฐ, ์‹ค์ œ ๋ณด์•ˆ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
@@ -164,7 +164,7 @@ OpenAPI์—์„œ๋Š” ์ด๋ฅผ `anyOf`๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
 
 ์ด๋ฅผ ์œ„ํ•ด ํ‘œ์ค€ Python ํƒ€์ž… ํžŒํŠธ์ธ [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
-/// note
+/// note | ์ฐธ๊ณ 
 
 [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions)์„ ์ •์˜ํ•  ๋•Œ๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ๋จผ์ € ํฌํ•จํ•˜๊ณ , ๋œ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ๊ทธ ๋’ค์— ๋‚˜์—ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” `Union[PlaneItem, CarItem]`์—์„œ ๋” ๊ตฌ์ฒด์ ์ธ `PlaneItem`์ด `CarItem`๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
 
@@ -208,4 +208,4 @@ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ‚ค์™€ ๊ฐ’์˜ ํƒ€์ž…๋งŒ ์„ ์–ธํ•˜์—ฌ ํ‰
 
 ์—ฌ๋Ÿฌ Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ ๊ฒฝ์šฐ์— ๋งž๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ์ƒ์†ํ•˜์„ธ์š”.
 
-์—”ํ„ฐํ‹ฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ "์ƒํƒœ"๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์—”ํ„ฐํ‹ฐ๋‹น ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž "์—”ํ„ฐํ‹ฐ"๊ฐ€ `password`, `password_hash`, ๊ทธ๋ฆฌ๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ง์ž…๋‹ˆ๋‹ค.
+์—”ํ„ฐํ‹ฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ "์ƒํƒœ"๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์—”ํ„ฐํ‹ฐ๋‹น ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, **์‚ฌ์šฉ์ž** "์—”ํ„ฐํ‹ฐ"๊ฐ€ `password`, `password_hash`, ๊ทธ๋ฆฌ๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ง์ž…๋‹ˆ๋‹ค.
index db68497e2743178c2c24a9f8a1c6cb84dd2d581e..7aca4a13b64983e91a198d97db4e9d0ecc9f2faf 100644 (file)
@@ -54,7 +54,7 @@ $ <font color="#4E9A06">fastapi</font> dev
 INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
 
-รญ\95ยดรซ\8bยน รฌยค\84รฌ\9d\80 รซยก\9cรฌยปยฌ รซยจยธรฌ\8bย รฌ\97\90รฌ\84\9c รฌ\95ยฑ์ด ์„œ๋น„์Šค๋˜๋Š” URL์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
+รญ\95ยดรซ\8bยน รฌยค\84รฌ\9d\80 รซยก\9cรฌยปยฌ รซยจยธรฌ\8bย รฌ\97\90รฌ\84\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์„œ๋น„์Šค๋˜๋Š” URL์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
 
 ### ํ™•์ธํ•˜๊ธฐ { #check-it }
 
@@ -143,16 +143,16 @@ OpenAPI ์Šคํ‚ค๋งˆ๋Š” ํฌํ•จ๋œ ๋‘ ๊ฐœ์˜ ๋Œ€ํ™”ํ˜• ๋ฌธ์„œ ์‹œ์Šคํ…œ์„ ์ œ๊ณต
 
 API์™€ ํ†ต์‹ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ(ํ”„๋ก ํŠธ์—”๋“œ, ๋ชจ๋ฐ”์ผ, IoT ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ)๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-### `pyproject.toml`รฌ\97\90 รฌ\95ยฑ `entrypoint` ๊ตฌ์„ฑํ•˜๊ธฐ { #configure-the-app-entrypoint-in-pyproject-toml }
+### `pyproject.toml`รฌ\97\90 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98 `entrypoint` ๊ตฌ์„ฑํ•˜๊ธฐ { #configure-the-app-entrypoint-in-pyproject-toml }
 
-รซ\8bยครฌ\9d\8cรชยณยผ รชยฐ\99รฌ\9dยด `pyproject.toml` รญ\8c\8cรฌ\9dยผรฌ\97\90รฌ\84\9c รฌ\95ยฑ์ด ์œ„์น˜ํ•œ ๊ณณ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
+รซ\8bยครฌ\9d\8cรชยณยผ รชยฐ\99รฌ\9dยด `pyproject.toml` รญ\8c\8cรฌ\9dยผรฌ\97\90รฌ\84\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์œ„์น˜ํ•œ ๊ณณ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 ```toml
 [tool.fastapi]
 entrypoint = "main:app"
 ```
 
-รญ\95ยดรซ\8bยน `entrypoint`รซ\8a\94 `fastapi` รซยช\85รซย ยนรฌ\96ยดรฌ\97\90 รซ\8bยครฌ\9d\8cรชยณยผ รชยฐ\99รฌ\9dยด รฌ\95ยฑ์„ ์ž„ํฌํŠธํ•˜๋ผ๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค:
+รญ\95ยดรซ\8bยน `entrypoint`รซ\8a\94 `fastapi` รซยช\85รซย ยนรฌ\96ยดรฌ\97\90 รซ\8bยครฌ\9d\8cรชยณยผ รชยฐ\99รฌ\9dยด รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ์ž„ํฌํŠธํ•˜๋ผ๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค:
 
 ```python
 from main import app
@@ -182,7 +182,7 @@ from backend.main import app
 
 ### `fastapi dev`๋ฅผ ๊ฒฝ๋กœ ๋˜๋Š” `--entrypoint` CLI ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
 
-`fastapi dev` ๋ช…๋ น์–ด์— ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉํ•  FastAPI app ๊ฐ์ฒด๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค:
+`fastapi dev` ๋ช…๋ น์–ด์— ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉํ•  FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค:
 
 ```console
 $ fastapi dev main.py
@@ -198,9 +198,9 @@ $ fastapi dev --entrypoint main:app
 
 ๋˜ํ•œ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด [VS Code ํ™•์žฅ](../editor-support.md)์ด๋‚˜ [FastAPI Cloud](https://fastapicloud.com)๊ฐ€ ์ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, `pyproject.toml`์˜ `entrypoint`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
 
-### รฌ\95ยฑ ๋ฐฐํฌํ•˜๊ธฐ(์„ ํƒ ์‚ฌํ•ญ) { #deploy-your-app-optional }
+### รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98 ๋ฐฐํฌํ•˜๊ธฐ(์„ ํƒ ์‚ฌํ•ญ) { #deploy-your-app-optional }
 
-รฌ\84ย รญ\83\9dรฌย \81รฌ\9cยผรซยก\9c FastAPI รฌ\95ยฑรฌ\9d\84 [FastAPI Cloud](https://fastapicloud.com)รฌ\97\90 รซ\8bยจ รญ\95\9c รซยฒ\88รฌ\9d\98 รซยช\85รซย ยนรฌ\9cยผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
+รฌ\84ย รญ\83\9dรฌย \81รฌ\9cยผรซยก\9c FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9d\84 [FastAPI Cloud](https://fastapicloud.com)รฌ\97\90 รซ\8bยจ รญ\95\9c รซยฒ\88รฌ\9d\98 รซยช\85รซย ยนรฌ\96ยด๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
 
 <div class="termy">
 
@@ -218,7 +218,7 @@ Deploying to FastAPI Cloud...
 
 CLI๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ ค ์ธ์ฆ ๊ณผ์ •์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
 
-รฌ\9dยดรชยฒ\8c รฌย \84รซยถ\80รฌ\9e\85รซ\8b\88รซ\8bยค! รฌ\9dยดรฌย \9c รญ\95ยดรซ\8bยน URLรฌ\97\90รฌ\84\9c รฌ\95ยฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ
+รฌ\9dยดรชยฒ\8c รฌย \84รซยถ\80รฌ\9e\85รซ\8b\88รซ\8bยค! รฌ\9dยดรฌย \9c รญ\95ยดรซ\8bยน URLรฌ\97\90รฌ\84\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ
 
 ## ๋‹จ๊ณ„๋ณ„ ์š”์•ฝ { #recap-step-by-step }
 
@@ -261,6 +261,7 @@ https://example.com/items/foo
 ```
 /items/foo
 ```
+
 /// note | ์ฐธ๊ณ 
 
 "๊ฒฝ๋กœ"๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ "์—”๋“œํฌ์ธํŠธ" ๋˜๋Š” "๋ผ์šฐํŠธ"๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.
@@ -392,7 +393,7 @@ JSON์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ ๋ชจ๋ธ๋“ค(ORM ๋“ฑ์„ ํฌํ•จํ•ด์„œ)
 
 ### 6 ๋‹จ๊ณ„: ๋ฐฐํฌํ•˜๊ธฐ { #step-6-deploy-it }
 
-รญ\95\9c รซยฒ\88รฌ\9d\98 รซยช\85รซย ยนรฌ\9cยผรซยก\9c **[FastAPI Cloud](https://fastapicloud.com)**รฌ\97\90 รฌ\95ยฑ์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค: `fastapi deploy`. ๐ŸŽ‰
+รญ\95\9c รซยฒ\88รฌ\9d\98 รซยช\85รซย ยนรฌ\96ยดรซยก\9c **[FastAPI Cloud](https://fastapicloud.com)**รฌ\97\90 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค: `fastapi deploy`. ๐ŸŽ‰
 
 #### FastAPI Cloud ์†Œ๊ฐœ { #about-fastapi-cloud }
 
@@ -400,15 +401,15 @@ JSON์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ ๋ชจ๋ธ๋“ค(ORM ๋“ฑ์„ ํฌํ•จํ•ด์„œ)
 
 ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ API๋ฅผ **๋นŒ๋“œ**, **๋ฐฐํฌ**, **์ ‘๊ทผ**ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
 
-FastAPIรซยก\9c รฌ\95ยฑ์„ ๋นŒ๋“œํ•  ๋•Œ์˜ ๋™์ผํ•œ **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜**์„ ํด๋ผ์šฐ๋“œ์— **๋ฐฐํฌ**ํ•  ๋•Œ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
+FastAPIรซยก\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ๋นŒ๋“œํ•  ๋•Œ์˜ ๋™์ผํ•œ **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜**์„ ํด๋ผ์šฐ๋“œ์— **๋ฐฐํฌ**ํ•  ๋•Œ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
 
 FastAPI Cloud๋Š” *FastAPI์™€ ์นœ๊ตฌ๋“ค* ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ์Šคํฐ์„œ์ด์ž ์ž๊ธˆ ์ œ๊ณต์ž์ž…๋‹ˆ๋‹ค. โœจ
 
 #### ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์— ๋ฐฐํฌํ•˜๊ธฐ { #deploy-to-other-cloud-providers }
 
-FastAPIรซ\8a\94 รฌ\98ยครญ\94\88 รฌ\86\8cรฌ\8aยครฌ\9dยดรซยฉยฐ รญ\91\9cรฌยค\80รฌ\9d\84 รชยธยฐรซยฐ\98รฌ\9cยผรซยก\9c รญ\95ยฉรซ\8b\88รซ\8bยค. รฌ\84ย รญ\83\9dรญ\95\9c รฌ\96ยดรซ\96ยค รญ\81ยดรซ\9dยผรฌ\9aยฐรซ\93\9c รฌย \9cรชยณยตรฌ\97\85รฌยฒยดรฌ\97\90รซ\8f\84 FastAPI รฌ\95ยฑ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+FastAPIรซ\8a\94 รฌ\98ยครญ\94\88 รฌ\86\8cรฌ\8aยครฌ\9dยดรซยฉยฐ รญ\91\9cรฌยค\80รฌ\9d\84 รชยธยฐรซยฐ\98รฌ\9cยผรซยก\9c รญ\95ยฉรซ\8b\88รซ\8bยค. รฌ\84ย รญ\83\9dรญ\95\9c รฌ\96ยดรซ\96ยค รญ\81ยดรซ\9dยผรฌ\9aยฐรซ\93\9c รฌย \9cรชยณยตรฌ\97\85รฌยฒยดรฌ\97\90รซ\8f\84 FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-รญ\81ยดรซ\9dยผรฌ\9aยฐรซ\93\9c รฌย \9cรชยณยตรฌ\97\85รฌยฒยดรฌ\9d\98 รชยฐ\80รฌ\9dยดรซ\93\9cรซยฅยผ รซ\94ยฐรซ\9dยผ FastAPI รฌ\95ยฑ์„ ๋ฐฐํฌํ•˜์„ธ์š”. ๐Ÿค“
+รญ\81ยดรซ\9dยผรฌ\9aยฐรซ\93\9c รฌย \9cรชยณยตรฌ\97\85รฌยฒยดรฌ\9d\98 รชยฐ\80รฌ\9dยดรซ\93\9cรซยฅยผ รซ\94ยฐรซ\9dยผ FastAPI รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์„ ๋ฐฐํฌํ•˜์„ธ์š”. ๐Ÿค“
 
 ## ์š”์•ฝ { #recap }
 
@@ -416,5 +417,5 @@ FastAPI๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์–ด
 * `app` ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ.
 * (`@app.get("/")`์ฒ˜๋Ÿผ) **๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ** ์ž‘์„ฑ.
 * (์œ„์— ์žˆ๋Š” `def root(): ...`์ฒ˜๋Ÿผ) **๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜** ์ž‘์„ฑ.
-* `fastapi dev` รซยช\85รซย ยนรฌ\9cยผ๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰.
-* รฌ\84ย รญ\83\9dรฌย \81รฌ\9cยผรซยก\9c `fastapi deploy`รซยก\9c รฌ\95ยฑ ๋ฐฐํฌ.
+* `fastapi dev` รซยช\85รซย ยนรฌ\96ยด๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰.
+* รฌ\84ย รญ\83\9dรฌย \81รฌ\9cยผรซยก\9c `fastapi deploy`รซยก\9c รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98 ๋ฐฐํฌ.
index efee108ef1ebf80a5aab9075f200328d44dd5da5..94c4c948a7e5c51b88e89365cefd9f363d14c23a 100644 (file)
@@ -1,5 +1,6 @@
 # ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ { #handling-errors }
 
+
 API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ์˜ค๋ฅ˜๋ฅผ ์•Œ๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ €์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ผ ์ˆ˜๋„ ์žˆ๊ณ , IoT ์žฅ์น˜์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
index 7f8c3747258ccfbf85656854cdf64f7579afe932..c4303ed6297ff5fd18392cdb2b3e828a713bcee0 100644 (file)
@@ -1,5 +1,6 @@
 # ์ž์Šต์„œ - ์‚ฌ์šฉ์ž ์•ˆ๋‚ด์„œ { #tutorial-user-guide }
 
+
 ์ด ์ž์Šต์„œ๋Š” **FastAPI**์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
 
 ๊ฐ ์„น์…˜์€ ์ด์ „ ์„น์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ, ์ฃผ์ œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์–ด ํŠน์ • API ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์›ํ•˜๋Š” ์„น์…˜์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
index 4461f2bc48c98f26803df7a7a4197f557144595d..7c2f4d154ee063bae4f550094c74b1b818862cb3 100644 (file)
@@ -11,7 +11,7 @@ OpenAPI ๋ช…์„ธ ๋ฐ ์ž๋™ํ™”๋œ API ๋ฌธ์„œ UI์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์Œ ํ•„๋“œ๋ฅผ 
 | `title` | `str` | API์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. |
 | `summary` | `str` | API์— ๋Œ€ํ•œ ์งง์€ ์š”์•ฝ์ž…๋‹ˆ๋‹ค. <small>OpenAPI 3.1.0, FastAPI 0.99.0๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.</small> |
 | `description` | `str` | API์— ๋Œ€ํ•œ ์งง์€ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ๋งˆํฌ๋‹ค์šด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |
-| `version` | `string` | API์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. OpenAPI์˜ ๋ฒ„์ „์ด ์•„๋‹Œ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ: `2.5.0`. |
+| `version` | `str` | API์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. OpenAPI์˜ ๋ฒ„์ „์ด ์•„๋‹Œ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ: `2.5.0`. |
 | `terms_of_service` | `str` | API ์ด์šฉ ์•ฝ๊ด€์˜ URL์ž…๋‹ˆ๋‹ค. ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ URL ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. |
 | `contact` | `dict` | ๋…ธ์ถœ๋œ API์— ๋Œ€ํ•œ ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <details><summary><code>contact</code> ํ•„๋“œ</summary><table><thead><tr><th>๋งค๊ฐœ๋ณ€์ˆ˜</th><th>ํƒ€์ž…</th><th>์„ค๋ช…</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>์—ฐ๋ฝ์ฒ˜ ์ธ๋ฌผ/์กฐ์ง์˜ ์‹๋ณ„๋ช…์ž…๋‹ˆ๋‹ค.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด URL์ž…๋‹ˆ๋‹ค. URL ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>์—ฐ๋ฝ์ฒ˜ ์ธ๋ฌผ/์กฐ์ง์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</td></tr></tbody></table></details> |
 | `license_info` | `dict` | ๋…ธ์ถœ๋œ API์˜ ๋ผ์ด์„ ์Šค ์ •๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <details><summary><code>license_info</code> ํ•„๋“œ</summary><table><thead><tr><th>๋งค๊ฐœ๋ณ€์ˆ˜</th><th>ํƒ€์ž…</th><th>์„ค๋ช…</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>ํ•„์ˆ˜</strong> (<code>license_info</code>๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ). API์— ์‚ฌ์šฉ๋œ ๋ผ์ด์„ ์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>API์— ๋Œ€ํ•œ [SPDX](https://spdx.org/licenses/) ๋ผ์ด์„ ์Šค ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. <code>identifier</code> ํ•„๋“œ๋Š” <code>url</code> ํ•„๋“œ์™€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ž…๋‹ˆ๋‹ค. <small>OpenAPI 3.1.0, FastAPI 0.99.0๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>API์— ์‚ฌ์šฉ๋œ ๋ผ์ด์„ ์Šค์˜ URL์ž…๋‹ˆ๋‹ค. URL ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</td></tr></tbody></table></details> |
@@ -26,7 +26,7 @@ OpenAPI ๋ช…์„ธ ๋ฐ ์ž๋™ํ™”๋œ API ๋ฌธ์„œ UI์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์Œ ํ•„๋“œ๋ฅผ 
 
 ///
 
-์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์„œ ์ž๋™ํ™”(๋กœ ์ƒ์„ฑ๋œ) API ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค:
+์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ API ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค:
 
 <img src="/img/tutorial/metadata/image01.png">
 
index a92b04c9d72b4f8f156372a9067b11bf9cfed5d7..bf6f01cfff779e9e7d9462356cb415fb3a9f529e 100644 (file)
@@ -1,5 +1,6 @@
 # ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ์„ค์ • { #path-operation-configuration }
 
+
 *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ*๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 /// warning | ๊ฒฝ๊ณ 
index d4acff151dbf76c066182d5b3387c1b1441c1669..3c55cac61b7dd6448a730627e260db9301e8a19b 100644 (file)
@@ -29,7 +29,7 @@ FastAPI๋Š” `q`์˜ ๊ธฐ๋ณธ๊ฐ’์ด `= None`์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜๊ฐ€ ์•„๋‹˜์„ ์••
 
 {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 FastAPI๋Š” 0.95.0 ๋ฒ„์ „์—์„œ `Annotated` ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๊ณ (๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๊ถŒ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค).
 
@@ -382,7 +382,7 @@ Pydantic์—๋Š” [BeforeValidator](https://docs.pydantic.dev/latest/concepts/valid
 
 {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
 
-/// info | ์ •๋ณด
+/// note | ์ฐธ๊ณ 
 
 ์ด๋Š” Pydantic 2 ์ด์ƒ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Ž
 
index 8004b2dde1c779af153f7a538e7d43379176c65d..8bd97f6b8b170c2580cd24b42a123fa1699a03f8 100644 (file)
@@ -1,5 +1,6 @@
 # ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ { #query-parameters }
 
+
 ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด "์ฟผ๋ฆฌ" ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž๋™ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.
 
 {* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
index bca580b67b4236f3988b3b27b11bf58f33d0c0e7..b190a517afb48174aafe1208ffbe1e414232c2ca 100644 (file)
@@ -151,11 +151,11 @@ HTML์˜ ํผ๋“ค(`<form></form>`)์ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์€
 
 ๊ทธ๋“ค์€ "ํผ ๋ฐ์ดํ„ฐ"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก๋œ ๋™์ผํ•œ "ํผ ํ•„๋“œ"์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
 
-์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด , `bytes` ์˜ `List` ๋˜๋Š” `UploadFile` ๋ฅผ ์„ ์–ธํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค:
+์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด `bytes` ๋˜๋Š” `UploadFile`์˜ `list`๋ฅผ ์„ ์–ธํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค:
 
 {* ../../docs_src/request_files/tutorial002_an_py310.py hl[10,15] *}
 
-์„ ์–ธํ•œ๋Œ€๋กœ, `bytes` ์˜ `list` ๋˜๋Š” `UploadFile` ๋“ค์„ ์ „์†ก๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
+์„ ์–ธํ•œ ๋Œ€๋กœ, `bytes` ๋˜๋Š” `UploadFile`์˜ `list`๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
 
 /// note | ๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ
 
index 2bc678801a47f53dc25bb3da99bcf2752b3455ed..4f678baa79dd6625dcc43362b94d666f22d60f50 100644 (file)
@@ -1,5 +1,6 @@
 # ํผ ๋ฐ์ดํ„ฐ { #form-data }
 
+
 JSON ๋Œ€์‹  ํผ ํ•„๋“œ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ `Form`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 /// note | ์ฐธ๊ณ 
index bc966916f6dde40a165cf113d40294d5b5cf286c..f8d46b945cdd7c4aa89ba28f21cab33e3752516f 100644 (file)
@@ -1,5 +1,6 @@
 # ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ { #response-status-code }
 
+
 ์‘๋‹ต ๋ชจ๋ธ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์–ด๋–ค *๊ฒฝ๋กœ ์ฒ˜๋ฆฌ*์—์„œ๋“  `status_code` ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์— ์‚ฌ์šฉํ•  HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:
 
 * `@app.get()`
index 9326ba032273e248bb12497924a0d0dfe0a65051..039bee079fd638f5b479bdd7ab963782b24baffd 100644 (file)
@@ -1,6 +1,6 @@
 # ์š”์ฒญ ์˜ˆ์ œ ๋ฐ์ดํ„ฐ ์„ ์–ธ { #declare-request-example-data }
 
-รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ยฑ์ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜ˆ์ œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
+รฌ\97ยฌรซ\9fยฌรซยถ\84รฌ\9d\98 รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜ˆ์ œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์—ฌ๊ธฐ ์ด๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
index 0c197adf953de059b50b2b6a4898e777db801473..d8050968d795d76d1d05de022192fa22f15f5803 100644 (file)
@@ -1,5 +1,6 @@
 # ๋ณด์•ˆ - ์ฒซ ๋‹จ๊ณ„ { #security-first-steps }
 
+
 ์–ด๋–ค ๋„๋ฉ”์ธ์— **backend** API๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
 ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— **frontend**๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ๊ฐ™์€ ๋„๋ฉ”์ธ์˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์žˆ๊ฑฐ๋‚˜(๋˜๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).
index 0c8e5c60f7a0facc6d3f46b28cf45d71b6444fd3..4ff6ab4d216e98a5508c68f2d5c2d7c94bf37266 100644 (file)
@@ -14,7 +14,7 @@
 
 Pydantic์„ ์‚ฌ์šฉํ•ด ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ, ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์–ด๋””์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
 
-{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}
+{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
 
 ## `get_current_user` ์˜์กด์„ฑ ์ƒ์„ฑํ•˜๊ธฐ { #create-a-get-current-user-dependency }
 
index d079294680b80761cfc20d54ea493f39289e2c9b..f0b0176e0183fa882cccc67f4000f250fd7218ee 100644 (file)
@@ -1,5 +1,6 @@
 # ํŒจ์Šค์›Œ๋“œ(ํ•ด์‹ฑ ํฌํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OAuth2, JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” Bearer { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
 
+
 ๋ชจ๋“  ๋ณด์•ˆ ํ๋ฆ„์„ ๊ตฌ์„ฑํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ œ <abbr title="JSON Web Tokens - JSON ์›น ํ† ํฐ">JWT</abbr> ํ† ํฐ๊ณผ ์•ˆ์ „ํ•œ ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.
 
 ์ด ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŒจ์Šค์›Œ๋“œ ํ•ด์‹œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
index a487b7230ed02c7b304262e60e579e49dc1e16ca..5901f2d0910f7f19ee1a0512ba4ccfc1a412ac79 100644 (file)
@@ -6,7 +6,7 @@
 
 **FastAPI** ๋ณด์•ˆ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `username` ๋ฐ `password`๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
-OAuth2๋Š” (์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”) "ํŒจ์Šค์›Œ๋“œ ํ”Œ๋กœ์šฐ"์„ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ/์œ ์ €๊ฐ€ `username` ๋ฐ `password` ํ•„๋“œ๋ฅผ ํผ ๋ฐ์ดํ„ฐ๋กœ ๋ณด๋‚ด์•ผ ํ•จ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
+OAuth2๋Š” (์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”) "ํŒจ์Šค์›Œ๋“œ ํ”Œ๋กœ์šฐ"๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ/์œ ์ €๊ฐ€ `username` ๋ฐ `password` ํ•„๋“œ๋ฅผ ํผ ๋ฐ์ดํ„ฐ๋กœ ๋ณด๋‚ด์•ผ ํ•จ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
 
 ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์–‘์—๋Š” ํ•„๋“œ์˜ ์ด๋ฆ„์„ ๊ทธ๋ ‡๊ฒŒ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ `user-name` ๋˜๋Š” `email`์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
@@ -104,7 +104,7 @@ OAuth2 ์‚ฌ์–‘์€ ์‹ค์ œ๋กœ `password`๋ผ๋Š” ๊ณ ์ • ๊ฐ’์ด ์žˆ๋Š” `grant_type` 
 
 ### ํŒจ์Šค์›Œ๋“œ ํ™•์ธํ•˜๊ธฐ { #check-the-password }
 
-์ด ์‹œ์ ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ํ™•์ธํ–ˆ์ง€๋งŒ ์•”ํ˜ธ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
+์ด ์‹œ์ ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋Š” ์žˆ์ง€๋งŒ, ์•„์ง ํŒจ์Šค์›Œ๋“œ๋Š” ํ™•์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
 
 ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ Pydantic `UserInDB` ๋ชจ๋ธ์— ๋„ฃ๊ฒ ์Šต๋‹ˆ๋‹ค.
 
@@ -146,7 +146,7 @@ UserInDB(
 
 /// note | ์ฐธ๊ณ 
 
-`**user_dict`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ [**์ถ”๊ฐ€ ๋ชจ๋ธ** ๋ฌธ์„œ](../extra-models.md#about-user-in-dict)๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด์„ธ์š”.
+`**user_dict`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ [**์ถ”๊ฐ€ ๋ชจ๋ธ** ๋ฌธ์„œ](../extra-models.md#about-user-in-model-dump)๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด์„ธ์š”.
 
 ///
 
index b046d14b530a824b85251f25382bc0df1fd60e33..6a48e3076925e4bc499cd7bb916406447e556dd7 100644 (file)
@@ -1,5 +1,6 @@
 # SQL (๊ด€๊ณ„ํ˜•) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค { #sql-relational-databases }
 
+
 **FastAPI**์—์„œ SQL(๊ด€๊ณ„ํ˜•) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„์ด ์›ํ•˜๋Š” **์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ ** ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 ์—ฌ๊ธฐ์„œ๋Š” [SQLModel](https://sqlmodel.tiangolo.com/)์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
index d4c6f6c2d4738488c9bcf2e82a6a11fcb259fffb..b6f5bb93876a42d245d47433545fd2bccc2b5823 100644 (file)
@@ -2,6 +2,14 @@
 
 `StaticFiles`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ •์  ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
+/// tip | ํŒ
+
+ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋Œ€์‹  `app.frontend()`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [ํ”„๋ก ํŠธ์—”๋“œ](frontend.md)์—์„œ ํ™•์ธํ•˜์„ธ์š”.
+
+`app.frontend()`๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ `StaticFiles`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
+
+///
+
 ## `StaticFiles` ์‚ฌ์šฉ { #use-staticfiles }
 
 * `StaticFiles`๋ฅผ ์ž„ํฌํŠธํ•ฉ๋‹ˆ๋‹ค.
index 7d0dbc6bcfeb9395c481fc34caef067163308dcc..d6c627fb6054224fb990565b4b6161f9a220c2c9 100644 (file)
@@ -62,7 +62,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์™ธ์—๋„ ํ…Œ์ŠคํŠธ์—์„œ
 
 ๊ทธ๋ฆฌ๊ณ  **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
-### **FastAPI** app ํŒŒ์ผ { #fastapi-app-file }
+### **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ { #fastapi-app-file }
 
 [๋” ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜](bigger-applications.md)์— ๋ฌ˜์‚ฌ๋œ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.
 
@@ -73,7 +73,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์™ธ์—๋„ ํ…Œ์ŠคํŠธ์—์„œ
 โ”‚ย ย  โ””โ”€โ”€ main.py
 ```
 
-`main.py` ํŒŒ์ผ ์•ˆ์— **FastAPI** app รฌ\9d\84 รซยง\8cรซ\93ยครฌ\97\88รฌ\8aยตรซ\8b\88รซ\8bยค:
+`main.py` ํŒŒ์ผ ์•ˆ์— **FastAPI** รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98รฌ\9dยด รฌ\9e\88รฌ\8aยตรซ\8b\88รซ\8bยค:
 
 
 {* ../../docs_src/app_testing/app_a_py310/main.py *}
@@ -101,7 +101,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์™ธ์—๋„ ํ…Œ์ŠคํŠธ์—์„œ
 
 ์ด์ œ ์œ„์˜ ์˜ˆ์‹œ๋ฅผ ํ™•์žฅํ•˜๊ณ  ๋” ๋งŽ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์„ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
-### ํ™•์žฅ๋œ **FastAPI** app ํŒŒ์ผ { #extended-fastapi-app-file }
+### ํ™•์žฅ๋œ **FastAPI** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ { #extended-fastapi-app-file }
 
 ์ด์ „๊ณผ ๊ฐ™์€ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
@@ -113,7 +113,7 @@ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์™ธ์—๋„ ํ…Œ์ŠคํŠธ์—์„œ
 โ”‚ย ย  โ””โ”€โ”€ test_main.py
 ```
 
-รฌ\9dยดรฌย \9c **FastAPI** รฌ\95ยฑ์ด ์žˆ๋Š” `main.py` ํŒŒ์ผ์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ **๊ฒฝ๋กœ ์ฒ˜๋ฆฌ**๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
+รฌ\9dยดรฌย \9c **FastAPI** รฌ\95ย รญ\94\8cรซยฆยฌรฌยผ\80รฌ\9dยดรฌ\85\98์ด ์žˆ๋Š” `main.py` ํŒŒ์ผ์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ **๊ฒฝ๋กœ ์ฒ˜๋ฆฌ**๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.
 
 ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” `GET` ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
index d75ee80174eea90eec41dc0687df00a852caaabf..d2bf72ab83956a8b98d80da1da2e9bcbb505b837 100644 (file)
@@ -1,5 +1,6 @@
 # ๊ฐ€์ƒ ํ™˜๊ฒฝ { #virtual-environments }
 
+
 Python ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…ํ•  ๋•Œ๋Š” **๊ฐ€์ƒ ํ™˜๊ฒฝ**(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜)์„ ์‚ฌ์šฉํ•ด ๊ฐ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์„ค์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
 
 /// note | ์ฐธ๊ณ