]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Korean translation for `docs/ko/docs/deployment/server-workers.md` (#4935)
authorgyudoza <jujumilk3@gmail.com>
Mon, 22 Jan 2024 19:49:13 +0000 (04:49 +0900)
committerGitHub <noreply@github.com>
Mon, 22 Jan 2024 19:49:13 +0000 (14:49 -0500)
docs/ko/docs/deployment/server-workers.md [new file with mode: 0644]

diff --git a/docs/ko/docs/deployment/server-workers.md b/docs/ko/docs/deployment/server-workers.md
new file mode 100644 (file)
index 0000000..5653c55
--- /dev/null
@@ -0,0 +1,180 @@
+# μ„œλ²„ μ›Œμ»€ - κ΅¬λ‹ˆμ½˜κ³Ό μœ λΉ„μ½˜
+
+μ „λ‹¨κ³„μ—μ„œμ˜ λ°°ν¬ κ°œλ…λ“€μ„ λ‹€μ‹œ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€:
+
+* λ³΄μ•ˆ - HTTPS
+* μ„œλ²„ μ‹œμž‘κ³Ό λ™μ‹œμ— μ‹€ν–‰ν•˜κΈ°
+* μž¬μ‹œμž‘
+* **볡제본 (μ‹€ν–‰ μ€‘인 ν”„λ‘œμ„ΈμŠ€μ˜ μˆ«μž)**
+* λ©”λͺ¨λ¦¬
+* μ‹œμž‘ν•˜κΈ° μ „μ˜ μ—¬λŸ¬ λ‹¨κ³„λ“€
+
+μ§€κΈˆκΉŒμ§€ λ¬Έμ„œμ˜ λͺ¨λ“  νŠœν† λ¦¬μ–Όμ„ μ°Έκ³ ν•˜μ—¬ **단일 ν”„λ‘œμ„ΈμŠ€**둜 Uvicornκ³Ό κ°™μ€ **μ„œλ²„ ν”„λ‘œκ·Έλž¨**을 μ‹€ν–‰ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.
+
+μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ°°ν¬ν•  λ•Œ **닀쀑 μ½”μ–΄**λ₯Ό ν™œμš©ν•˜κ³  λ” λ§Žμ€ μš”청을 μ²˜λ¦¬ν•  μˆ˜ μžˆλ„둝 **ν”„λ‘œμ„ΈμŠ€ λ³΅μ œλ³Έ**이 ν•„μš”ν•©λ‹ˆλ‹€.
+
+μ „ κ³Όμ •μ΄μ—ˆλ˜ [배포 κ°œλ…λ“€](./concepts.md){.internal-link target=_blank}μ—μ„œ λ³Έ κ²ƒμ²˜λŸΌ μ—¬λŸ¬κ°€μ§€ λ°©λ²•이 μ‘΄μž¬ν•©λ‹ˆλ‹€.
+
+μ§€κΈˆλΆ€ν„° <a href="https://gunicorn.org/" class="external-link" target="_blank">**κ΅¬λ‹ˆμ½˜**</a>을 **μœ λΉ„μ½˜ μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€**와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” λ°©λ²•을 μ•Œλ €λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
+
+!!! μ •보
+    λ§Œμ•½ λ„컀와 μΏ λ²„λ„€ν‹°μŠ€ κ°™μ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ λ‹€μŒ μ±•ν„° [FastAPI와 μ»¨ν…Œμ΄λ„ˆ - λ„컀](./docker.md){.internal-link target=_blank}μ—μ„œ λ” λ§Žμ€ μ •보λ₯Ό μ–»μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+    νŠΉνžˆ, μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ μ‹€ν–‰ν•  λ•ŒλŠ” κ΅¬λ‹ˆμ½˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  λŒ€μ‹  μ»¨ν…Œμ΄λ„ˆλ‹Ή ν•˜λ‚˜μ˜ μœ λΉ„μ½˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€. μ΄ μž₯의 λ’·λΆ€λΆ„μ—μ„œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.
+
+## κ΅¬λ‹ˆμ½˜κ³Ό μœ λΉ„μ½˜ μ›Œμ»€
+
+**Gunicorn**은 **WSGI ν‘œμ€€**을 μ£Όλ‘œ μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μž…λ‹ˆλ‹€. μ΄κ²ƒμ€ κ΅¬λ‹ˆμ½˜μ΄ ν”ŒλΌμŠ€ν¬μ™€ μŸκ³ μ™€ κ°™μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•  μˆ˜ μžˆλ‹€λŠ” κ²ƒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. κ΅¬λ‹ˆμ½˜ μžμ²΄λŠ” μ΅œμ‹  **<a href="https://asgi.readthedocs.io/en/latest/" class="external-link" target="_blank">ASGI ν‘œμ€€</a>**을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— FastAPI와 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
+
+ν•˜μ§€λ§Œ κ΅¬λ‹ˆμ½˜μ€ **ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬μž**역할을 ν•˜κ³  μ‚¬μš©μžμ—κ²Œ νŠΉμ • **μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€ ν΄λž˜μŠ€**λ₯Ό μ•Œλ €μ€λ‹ˆλ‹€. κ·ΈλŸ° λ‹€μŒ κ΅¬λ‹ˆμ½˜μ€ ν•΄λ‹Ή ν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜λ‚˜ μ΄μƒμ˜ **μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€**λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.
+
+그리고 **μœ λΉ„μ½˜**은 **κ΅¬λ‹ˆμ½˜κ³Ό ν˜Έν™˜λ˜λŠ” μ›Œμ»€ ν΄λž˜μŠ€**κ°€ μžˆμŠ΅λ‹ˆλ‹€.
+
+이 μ‘°ν•©μ„ μ‚¬μš©ν•˜μ—¬ κ΅¬λ‹ˆμ½˜μ€ **ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬μž** μ—­ν• μ„ ν•˜λ©° **포트**와 **IP**λ₯Ό κ΄€μ°°ν•˜κ³ , **μœ λΉ„μ½˜ ν΄λž˜μŠ€**λ₯Ό μ‹€ν–‰ν•˜λŠ” μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€λ‘œ ν†΅μ‹  μ •보λ₯Ό **전솑**ν•©λ‹ˆλ‹€.
+
+그리고 λ‚˜μ„œ κ΅¬λ‹ˆμ½˜κ³Ό ν˜Έν™˜λ˜λŠ” **μœ λΉ„μ½˜ μ›Œμ»€** ν΄λž˜μŠ€λŠ” κ΅¬λ‹ˆμ½˜μ΄ λ³΄λ‚Έ λ°μ΄ν„°λ₯Ό FastAPIμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ ASGI ν‘œμ€€μœΌλ‘œ λ³€ν™˜ν•˜λŠ” μΌμ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
+
+## κ΅¬λ‹ˆμ½˜κ³Ό μœ λΉ„μ½˜ μ„€μΉ˜ν•˜κΈ°
+
+<div class="termy">
+
+```console
+$ pip install "uvicorn[standard]" gunicorn
+
+---> 100%
+```
+
+</div>
+
+이 λͺ…λ Ήμ–΄λŠ” μœ λΉ„μ½˜ `standard` μΆ”κ°€ νŒ¨ν‚€μ§€(쒋은 μ„±λŠ₯을 μœ„ν•œ)와 κ΅¬λ‹ˆμ½˜μ„ μ„€μΉ˜ν•  κ²ƒμž…λ‹ˆλ‹€.
+
+## κ΅¬λ‹ˆμ½˜μ„ μœ λΉ„μ½˜ μ›Œμ»€μ™€ ν•¨κ»˜ μ‹€ν–‰ν•˜κΈ°
+
+μ„€μΉ˜ ν›„ κ΅¬λ‹ˆμ½˜ μ‹€ν–‰ν•˜κΈ°:
+
+<div class="termy">
+
+```console
+$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
+
+[19499] [INFO] Starting gunicorn 20.1.0
+[19499] [INFO] Listening at: http://0.0.0.0:80 (19499)
+[19499] [INFO] Using worker: uvicorn.workers.UvicornWorker
+[19511] [INFO] Booting worker with pid: 19511
+[19513] [INFO] Booting worker with pid: 19513
+[19514] [INFO] Booting worker with pid: 19514
+[19515] [INFO] Booting worker with pid: 19515
+[19511] [INFO] Started server process [19511]
+[19511] [INFO] Waiting for application startup.
+[19511] [INFO] Application startup complete.
+[19513] [INFO] Started server process [19513]
+[19513] [INFO] Waiting for application startup.
+[19513] [INFO] Application startup complete.
+[19514] [INFO] Started server process [19514]
+[19514] [INFO] Waiting for application startup.
+[19514] [INFO] Application startup complete.
+[19515] [INFO] Started server process [19515]
+[19515] [INFO] Waiting for application startup.
+[19515] [INFO] Application startup complete.
+```
+
+</div>
+
+각 μ˜΅μ…˜μ΄ λ¬΄μ—‡μ„ μ˜λ―Έν•˜λŠ”μ§€ μ‚΄νŽ΄λ΄…μ‹œλ‹€:
+
+* μ΄κ²ƒμ€ μœ λΉ„μ½˜κ³Ό λ˜‘같은 λ¬Έλ²•μž…λ‹ˆλ‹€. `main`은 νŒŒμ΄μ¬ λͺ¨λ“ˆ λ„€μž„ "`main`"을 μ˜λ―Έν•˜λ―€λ‘œ `main.py`νŒŒμΌμ„ λœ»ν•©λ‹ˆλ‹€. κ·Έλ¦¬κ³  `app`은 **FastAPI** μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ“€μ–΄ μžˆλŠ” λ³€μˆ˜μ˜ μ΄λ¦„μž…λ‹ˆλ‹€.
+    * `main:app`이 νŒŒμ΄μ¬μ˜ `import` λ¬Έλ²•κ³Ό ν‘μ‚¬ν•œ λ©΄μ΄ μžˆλ‹€λŠ” κ±Έ μ•Œ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+        ```Python
+        from main import app
+        ```
+
+    * κ³§, `main:app`μ•ˆμ— μžˆλŠ” μ½œλ‘ μ˜ μ˜λ―ΈλŠ” νŒŒμ΄μ¬μ—μ„œ `from main import app`μ—μ„œμ˜ `import`와 κ°™μŠ΅λ‹ˆλ‹€.
+* `--workers`: μ‚¬μš©ν•  μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€μ˜ κ°œμˆ˜μ΄λ©° μˆ«μžλ§ŒνΌμ˜ μœ λΉ„μ½˜ μ›Œμ»€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. μ΄ μ˜ˆμ œμ—μ„œλŠ” 4개의 μ›Œμ»€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
+* `--worker-class`: μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ κ΅¬λ‹ˆμ½˜κ³Ό ν˜Έν™˜λ˜λŠ” μ›Œμ»€ν΄λž˜μŠ€.
+    * μ΄λŸ°μ‹μœΌλ‘œ κ΅¬λ‹ˆμ½˜μ΄ importν•˜μ—¬ μ‚¬μš©ν•  μˆ˜ μžˆλŠ” ν΄λž˜μŠ€λ₯Ό μ „λ‹¬ν•΄μ€λ‹ˆλ‹€:
+
+        ```Python
+        import uvicorn.workers.UvicornWorker
+        ```
+
+* `--bind`: κ΅¬λ‹ˆμ½˜μ΄ κ΄€μ°°ν•  IP와 ν¬νŠΈλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ½œλ‘  (`:`)을 μ‚¬μš©ν•˜μ—¬ IP와 ν¬νŠΈλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.
+    * λ§Œμ•½μ— `--bind 0.0.0.0:80` (κ΅¬λ‹ˆμ½˜ μ˜΅μ…˜) λŒ€μ‹  μœ λΉ„μ½˜μ„ μ§μ ‘ μ‹€ν–‰ν•˜κ³  μ‹Άλ‹€λ©΄ `--host 0.0.0.0`κ³Ό `--port 80`을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
+
+좜λ ₯μ—μ„œ κ° ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ **PID** (process ID)λ₯Ό ν™•인할 μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. (λ‹¨μˆœν•œ μˆ«μžμž…λ‹ˆλ‹€)
+
+좜λ ₯ λ‚΄μš©:
+
+* κ΅¬λ‹ˆμ½˜ **ν”„λ‘œμ„ΈμŠ€ λ§€λ‹ˆμ €**λŠ” PID `19499`둜 μ‹€ν–‰λ©λ‹ˆλ‹€. (직접 μ‹€ν–‰ν•  κ²½μš° μˆ«μžκ°€ λ‹€λ₯Ό μˆ˜ μžˆμŠ΅λ‹ˆλ‹€)
+* λ‹€μŒμœΌλ‘œ `Listening at: http://0.0.0.0:80`을 μ‹œμž‘ν•©λ‹ˆλ‹€.
+* κ·ΈλŸ° λ‹€μŒ μ‚¬μš©ν•΄μ•Όν•  `uvicorn.workers.UvicornWorker`의 μ›Œμ»€ν΄λž˜μŠ€λ₯Ό νƒμ§€ν•©λ‹ˆλ‹€.
+* κ·Έλ¦¬κ³  PID `19511`, `19513`, `19514`, κ·Έλ¦¬κ³  `19515`λ₯Ό κ°€μ§„ **4개의 μ›Œμ»€**λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
+
+
+λ˜ν•œ κ΅¬λ‹ˆμ½˜μ€ μ›Œμ»€μ˜ μˆ˜λ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ **죽은 ν”„λ‘œμ„ΈμŠ€**λ₯Ό κ΄€λ¦¬ν•˜κ³  **μž¬μ‹œμž‘**ν•˜λŠ” μž‘업을 μ±…μž„μ§‘λ‹ˆλ‹€. μ΄κ²ƒμ€ μ΄λ²ˆ μž₯ μƒλ‹¨ λͺ©λ‘μ˜ **μž¬μ‹œμž‘** κ°œλ…μ„ λΆ€λΆ„μ μœΌλ‘œ λ„μ™€μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.
+
+κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  ν•„μš”ν•  κ²½μš° μ™ΈλΆ€μ—μ„œ **κ΅¬λ‹ˆμ½˜μ„ μž¬μ‹œμž‘**ν•˜κ³ , ν˜Ήμ€ **μ„œλ²„λ₯Ό μ‹œμž‘ν•  λ•Œ μ‹€ν–‰**ν•  μˆ˜ μžˆλ„둝 ν•˜κ³  μ‹Άμ–΄ν•  κ²ƒμž…λ‹ˆλ‹€.
+
+## μœ λΉ„μ½˜κ³Ό μ›Œμ»€
+
+μœ λΉ„μ½˜μ€ λͺ‡ κ°œμ˜ **μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€**와 ν•¨κ»˜ μ‹€ν–‰ν•  μˆ˜ μžˆλŠ” μ„ νƒμ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.
+
+κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³ , μœ λΉ„μ½˜μ€ μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€λ£¨λŠ” λ°μ— μžˆμ–΄μ„œ κ΅¬λ‹ˆμ½˜λ³΄λ‹€ λ” μ œν•œμ μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ΄ μˆ˜μ€€(파이썬 μˆ˜μ€€)의 ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬μžλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ κ΅¬λ‹ˆμ½˜μ„ ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬μžλ‘œ μ‚¬μš©ν•˜λŠ” κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€.
+
+보톡 μ΄λ ‡κ²Œ μ‹€ν–‰ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€:
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
+<font color="#A6E22E">INFO</font>:     Uvicorn running on <b>http://0.0.0.0:8080</b> (Press CTRL+C to quit)
+<font color="#A6E22E">INFO</font>:     Started parent process [<font color="#A1EFE4"><b>27365</b></font>]
+<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27368</font>]
+<font color="#A6E22E">INFO</font>:     Waiting for application startup.
+<font color="#A6E22E">INFO</font>:     Application startup complete.
+<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27369</font>]
+<font color="#A6E22E">INFO</font>:     Waiting for application startup.
+<font color="#A6E22E">INFO</font>:     Application startup complete.
+<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27370</font>]
+<font color="#A6E22E">INFO</font>:     Waiting for application startup.
+<font color="#A6E22E">INFO</font>:     Application startup complete.
+<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27367</font>]
+<font color="#A6E22E">INFO</font>:     Waiting for application startup.
+<font color="#A6E22E">INFO</font>:     Application startup complete.
+```
+
+</div>
+
+μƒˆλ‘œμš΄ μ˜΅μ…˜μΈ `--workers`은 μœ λΉ„μ½˜μ—κ²Œ 4개의 μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν•œλ‹€κ³  μ•Œλ €μ€λ‹ˆλ‹€.
+
+각 ν”„λ‘œμ„ΈμŠ€μ˜ **PID**λ₯Ό ν™•인할 μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. `27365`λŠ” μƒμœ„ ν”„λ‘œμ„ΈμŠ€(**ν”„λ‘œμ„ΈμŠ€ λ§€λ‹ˆμ €**), κ·Έλ¦¬κ³  κ°κ°μ˜ μ›Œμ»€ν”„λ‘œμ„ΈμŠ€λŠ” `27368`, `27369`, `27370`, κ·Έλ¦¬κ³  `27367`μž…λ‹ˆλ‹€.
+
+## λ°°ν¬ κ°œλ…λ“€
+
+μ—¬κΈ°μ—μ„œλŠ” **μœ λΉ„μ½˜ μ›Œμ»€ ν”„λ‘œμ„ΈμŠ€**λ₯Ό κ΄€λ¦¬ν•˜λŠ” **κ΅¬λ‹ˆμ½˜**(λ˜λŠ” μœ λΉ„μ½˜)을 μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ **병렬화**ν•˜κ³ , CPU **λ©€ν‹° μ½”μ–΄**의 μž₯점을 ν™œμš©ν•˜κ³ , **더 λ§Žμ€ μš”μ²­**을 μ²˜λ¦¬ν•  μˆ˜ μžˆλŠ” λ°©λ²•을 μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
+
+μ›Œμ»€λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμ€ λ°°ν¬ κ°œλ… λͺ©λ‘μ—μ„œ μ£Όλ‘œ **볡제본** λΆ€λΆ„κ³Ό **μž¬μ‹œμž‘**에 μ•½κ°„ λ„움이 λ˜μ§€λ§Œ λ‹€λ₯Έ λ°°ν¬ κ°œλ…λ“€λ„ λ‹€λ£¨μ–΄μ•Ό ν•©λ‹ˆλ‹€:
+
+* **λ³΄μ•ˆ - HTTPS**
+* **μ„œλ²„ μ‹œμž‘κ³Ό λ™μ‹œμ— μ‹€ν–‰ν•˜κΈ°**
+* ***μž¬μ‹œμž‘***
+* λ³΅μ œλ³Έ (μ‹€ν–‰ μ€‘인 ν”„λ‘œμ„ΈμŠ€μ˜ μˆ«μž)
+* **λ©”λͺ¨λ¦¬**
+* **μ‹œμž‘ν•˜κΈ° μ „μ˜ μ—¬λŸ¬ λ‹¨κ³„λ“€**
+
+
+## μ»¨ν…Œμ΄λ„ˆμ™€ λ„컀
+
+λ‹€μŒ μž₯인 [FastAPI와 μ»¨ν…Œμ΄λ„ˆ - λ„컀](./docker.md){.internal-link target=_blank}μ—μ„œ λ‹€λ₯Έ **배포 κ°œλ…λ“€**을 λ‹€λ£¨λŠ” μ „λž΅λ“€μ„ μ•Œλ €λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
+
+λ˜ν•œ κ°„λ‹¨ν•œ μΌ€μ΄μŠ€μ—μ„œ μ‚¬μš©ν•  μˆ˜ μžˆλŠ”, **κ΅¬λ‹ˆμ½˜κ³Ό μœ λΉ„μ½˜ μ›Œμ»€**κ°€ ν¬ν•¨λΌ μžˆλŠ” **곡식 λ„컀 μ΄λ―Έμ§€**와 ν•¨κ»˜ λͺ‡ κ°€μ§€ κΈ°λ³Έ κ΅¬μ„±μ„ λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.
+
+그리고 λ‹¨μΌ μœ λΉ„μ½˜ ν”„λ‘œμ„ΈμŠ€(κ΅¬λ‹ˆμ½˜ μ—†μ΄)λ₯Ό μ‹€ν–‰ν•  μˆ˜ μžˆλ„둝 **μ‚¬μš©μž μžμ‹ μ˜ μ΄λ―Έμ§€λ₯Ό μ²˜μŒλΆ€ν„° κ΅¬μΆ•**ν•˜λŠ” λ°©λ²•도 λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” κ°„λ‹¨ν•œ κ³Όμ •이며, **μΏ λ²„λ„€ν‹°μŠ€**와 κ°™μ€ λΆ„μ‚° μ»¨ν…Œμ΄λ„ˆ κ΄€λ¦¬ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•  λ•Œ μˆ˜ν–‰ν•  μž‘μ—…μž…λ‹ˆλ‹€.
+
+## μš”μ•½
+
+당신은 **κ΅¬λ‹ˆμ½˜**(λ˜λŠ” μœ λΉ„μ½˜)을 μœ λΉ„μ½˜ μ›Œμ»€μ™€ ν•¨κ»˜ ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬μžλ‘œ μ‚¬μš©ν•˜μ—¬ **λ©€ν‹°-μ½”μ–΄ CPU**λ₯Ό ν™œμš©ν•˜λŠ” **λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λ₯Ό λ³‘λ ¬λ‘œ μ‹€ν–‰**ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+λ‹€λ₯Έ λ°°ν¬ κ°œλ…μ„ μ§μ ‘ λ‹€λ£¨λ©΄μ„œ **μžμ‹ λ§Œμ˜ λ°°ν¬ μ‹œμŠ€ν…œ**을 κ΅¬μ„±ν•˜λŠ” κ²½μš° μ΄λŸ¬ν•œ λ„ꡬ와 κ°œλ…λ“€μ„ ν™œμš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
+
+λ‹€μŒ μž₯μ—μ„œ μ»¨ν…Œμ΄λ„ˆ(예: λ„컀 λ° μΏ λ²„λ„€ν‹°μŠ€)와 ν•¨κ»˜ν•˜λŠ” **FastAPI**에 λŒ€ν•΄ λ°°μ›Œλ³΄μ„Έμš”. μ΄λŸ¬ν•œ νˆ΄μ—λŠ” λ‹€λ₯Έ **배포 κ°œλ…**듀을 κ°„λ‹¨νžˆ ν•΄κ²°ν•  μˆ˜ μžˆλŠ” λ°©λ²•이 μžˆμŠ΅λ‹ˆλ‹€. βœ¨