committed by
GitHub
1 changed files with 180 additions and 0 deletions
@ -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**์ ๋ํด ๋ฐฐ์๋ณด์ธ์. ์ด๋ฌํ ํด์๋ ๋ค๋ฅธ **๋ฐฐํฌ ๊ฐ๋
**๋ค์ ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. โจ |
Loadingโฆ
Reference in new issue