|
|
@ -4,7 +4,7 @@ FastAPI ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ๋ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ๋ฒ์ **๋ฆฌ |
|
|
|
|
|
|
|
๋ฆฌ๋
์ค ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์๋ **๋ณด์**, **๋ฐ๋ณต ๊ฐ๋ฅ์ฑ**, **๋จ์ํจ** ๋ฑ์ ์ฅ์ ์ด ์์ต๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
์๊ฐ์ ์ซ๊ธฐ๊ณ ์๊ณ ์ด๋ฏธ ์ด๋ฐ๊ฒ๋ค์ ์๊ณ ์๋ค๋ฉด [`Dockerfile`๐](#build-a-docker-image-for-fastapi)๋ก ์ ํํ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
<details> |
|
|
@ -130,7 +130,7 @@ Successfully installed fastapi pydantic uvicorn |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
!!! ์ ๋ณด |
|
|
|
!!! info "์ ๋ณด" |
|
|
|
ํจํค์ง ์ข
์์ฑ์ ์ ์ํ๊ณ ์ค์นํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๊ณผ ๋๊ตฌ๋ ๋ค์ํฉ๋๋ค. |
|
|
|
|
|
|
|
๋์ค์ ์๋ ์ธ์
์์ Poetry๋ฅผ ์ฌ์ฉํ ์์๋ฅผ ๋ณด์ด๊ฒ ์ต๋๋ค. ๐ |
|
|
@ -222,7 +222,7 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
ํ๋ก๊ทธ๋จ์ด `/code`์์ ์์ํ๊ณ ๊ทธ ์์ `./app` ๋๋ ํฐ๋ฆฌ๊ฐ ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ํจ๊ป ๋ค์ด์๊ธฐ ๋๋ฌธ์, **Uvicorn**์ ์ด๋ฅผ ๋ณด๊ณ `app`์ `app.main`์ผ๋ก๋ถํฐ **๋ถ๋ฌ ์ฌ** ๊ฒ์
๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
๊ฐ ์ฝ๋ ๋ผ์ธ์ ์ฝ๋์ ์ซ์ ๋ฒ๋ธ์ ํด๋ฆญํ์ฌ ๋ฆฌ๋ทฐํ ์ ์์ต๋๋ค. ๐ |
|
|
|
|
|
|
|
์ด์ ์ฌ๋ฌ๋ถ์ ๋ค์๊ณผ ๊ฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์
๋๋ค: |
|
|
@ -293,7 +293,7 @@ $ docker build -t myimage . |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
๋งจ ๋์ ์๋ `.` ์ ์ฃผ๋ชฉํฉ์๋ค. ์ด๋ `./`์ ๋๋ฑํ๋ฉฐ, ๋์ปค์๊ฒ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ ค์ค๋๋ค. |
|
|
|
|
|
|
|
์ด ๊ฒฝ์ฐ์๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ(`.`)์ ๊ฐ์ต๋๋ค. |
|
|
@ -394,7 +394,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
**HTTPS**์ **์ธ์ฆ์**์ **์๋** ์ทจ๋์ ๋ค๋ฃจ๋ ๊ฒ์ ๋ค๋ฅธ ์ปจํ
์ด๋๊ฐ ๋ ์ ์๋๋ฐ, ์๋ฅผ ๋ค์ด <a href="https://traefik.io/" class="external-link" target="_blank">Traefik</a>์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
Traefik์ ๋์ปค, ์ฟ ๋ฒ๋คํฐ์ค, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋๊ตฌ์ ํตํฉ๋์ด ์์ด ์ฌ๋ฌ๋ถ์ ์ปจํ
์ด๋๋ฅผ ํฌํจํ๋ HTTPS๋ฅผ ์
์
ํ๊ณ ์ค์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ฝ์ต๋๋ค. |
|
|
|
|
|
|
|
๋์์ ์ผ๋ก, HTTPS๋ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ์ํด ์๋น์ค์ ์ผํ์ผ๋ก ๋ค๋ฃจ์ด์ง ์๋ ์์ต๋๋ค (์ด๋๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฌ์ ํ ์ปจํ
์ด๋์์ ์คํ๋ ๊ฒ์
๋๋ค). |
|
|
@ -423,7 +423,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
์ด ์์๊ฐ ์์ฒญ๋ค์ **๋ก๋**๋ฅผ ์ฝ์ด๋ค์ด๊ณ ๊ฐ ์์ปค์๊ฒ (๋ฐ๋ผ๊ฑด๋) **๊ท ํ์ ์ผ๋ก** ๋ถ๋ฐฐํ๋ค๋ฉด, ์ด ์์๋ ์ผ๋ฐ์ ์ผ๋ก **๋ก๋ ๋ฐธ๋ฐ์**๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
HTTPS๋ฅผ ์ํด ์ฌ์ฉ๋ **TLS ์ข
๋ฃ ํ๋ก์** ์์ ๋ํ **๋ก๋ ๋ฐธ๋ฐ์**๊ฐ ๋ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
๋ํ ์ปจํ
์ด๋๋ก ์์
ํ ๋, ์ปจํ
์ด๋๋ฅผ ์์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ์์คํ
์ ์ด๋ฏธ ํด๋น **๋ก๋ ๋ฐธ๋ฐ์**๋ก ๋ถํฐ ์ฌ๋ฌ๋ถ์ ์ฑ์ ํด๋นํ๋ ์ปจํ
์ด๋๋ก **๋คํธ์ํฌ ํต์ **(์๋ฅผ ๋ค์ด, HTTP ์์ฒญ)์ ์ ์กํ๋ ๋ด๋ถ์ ์ธ ๋๊ตฌ๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์
๋๋ค (์ฌ๊ธฐ์๋ ๋ก๋ ๋ฐธ๋ฐ์๋ **TLS ์ข
๋ฃ ํ๋ก์**์ผ ์ ์์ต๋๋ค). |
|
|
@ -503,7 +503,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
๋ง์ฝ ์ฌ๋ฌ๋ถ์ด **์ฌ๋ฌ๊ฐ์ ์ปจํ
์ด๋**๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์๋ง๋ ๊ฐ๊ฐ์ ์ปจํ
์ด๋๋ **ํ๋์ ํ๋ก์ธ์ค**๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์
๋๋ค(์๋ฅผ ๋ค์ด, **์ฟ ๋ฒ๋คํฐ์ค** ํด๋ฌ์คํฐ์์). ๊ทธ๋ฌ๋ฉด ์ฌ๋ฌ๋ถ์ ๋ณต์ ๋ ์์ปค ์ปจํ
์ด๋๋ฅผ ์คํํ๊ธฐ **์ด์ ์**, ํ๋์ ์ปจํ
์ด๋์ ์๋ **์ด์ ์ ๋จ๊ณ๋ค์** ์ํํ๋ ๋จ์ผ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๋ **๋ณ๋์ ์ปจํ
์ด๋๋ค**์ ๊ฐ์ง๊ณ ์ถ์ ๊ฒ์
๋๋ค. |
|
|
|
|
|
|
|
!!! ์ ๋ณด |
|
|
|
!!! info "์ ๋ณด" |
|
|
|
๋ง์ฝ ์ฌ๋ฌ๋ถ์ด ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์๋ง๋ ์ด๋ <a href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" class="external-link" target="_blank">Init Container</a>์ผ ๊ฒ์
๋๋ค. |
|
|
|
|
|
|
|
๋ง์ฝ ์ฌ๋ฌ๋ถ์ ์ด์ฉ ์ฌ๋ก์์ ์ด์ ๋จ๊ณ๋ค์ **๋ณ๋ ฌ์ ์ผ๋ก ์ฌ๋ฌ๋ฒ** ์ํํ๋๋ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด (์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ์ ์คํํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ค๋น๋์๋์ง ํ์ธ๋ง ํ๋ ๊ฒฝ์ฐ), ๋ฉ์ธ ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ธฐ ์ ์ ์ด ๋จ๊ณ๋ค์ ๊ฐ ์ปจํ
์ด๋์ ๋ฃ์ ์ ์์ต๋๋ค. |
|
|
@ -520,7 +520,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
* <a href="https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker" class="external-link" target="_blank">tiangolo/uvicorn-gunicorn-fastapi</a>. |
|
|
|
|
|
|
|
!!! ๊ฒฝ๊ณ |
|
|
|
!!! warning "๊ฒฝ๊ณ " |
|
|
|
์ฌ๋ฌ๋ถ์ด ์ด ๋ฒ ์ด์ค ์ด๋ฏธ์ง ๋๋ ๋ค๋ฅธ ์ ์ฌํ ์ด๋ฏธ์ง๋ฅผ ํ์๋ก ํ์ง **์์** ๋์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ, [์์์ ์ค๋ช
๋ ๊ฒ์ฒ๋ผ: FastAPI๋ฅผ ์ํ ๋์ปค ์ด๋ฏธ์ง ๋น๋ํ๊ธฐ](#build-a-docker-image-for-fastapi) ์ฒ์๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
์ด ์ด๋ฏธ์ง๋ ๊ฐ๋ฅํ CPU ์ฝ์ด์ ๊ธฐ๋ฐํ **๋ช๊ฐ์ ์์ปค ํ๋ก์ธ์ค**๋ฅผ ์ค์ ํ๋ **์๋-ํ๋** ๋ฉ์ปค๋์ฆ์ ํฌํจํ๊ณ ์์ต๋๋ค. |
|
|
@ -529,7 +529,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด <a href="https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker#pre_start_path" class="external-link" target="_blank">**์์ํ๊ธฐ ์ ์ฌ์ ๋จ๊ณ**</a>๋ฅผ ์คํํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
๋ชจ๋ ์ค์ ๊ณผ ์ต์
์ ๋ณด๋ ค๋ฉด, ๋์ปค ์ด๋ฏธ์ง ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค: <a href="https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker" class="external-link" target="_blank">tiangolo/uvicorn-gunicorn-fastapi</a>. |
|
|
|
|
|
|
|
### ๊ณต์ ๋์ปค ์ด๋ฏธ์ง์ ์๋ ํ๋ก์ธ์ค ๊ฐ์ |
|
|
@ -657,7 +657,7 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] |
|
|
|
|
|
|
|
11. `uvicorn` ์ปค๋งจ๋๋ฅผ ์คํํ์ฌ, `app.main`์์ ๋ถ๋ฌ์จ `app` ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค. |
|
|
|
|
|
|
|
!!! ํ |
|
|
|
!!! tip "ํ" |
|
|
|
๋ฒ๋ธ ์ซ์๋ฅผ ํด๋ฆญํด ๊ฐ ์ค์ด ํ๋ ์ผ์ ์์๋ณผ ์ ์์ต๋๋ค. |
|
|
|
|
|
|
|
**๋์ปค ์คํ
์ด์ง**๋ `Dockefile`์ ์ผ๋ถ๋ก์ ๋์ค์ ์ฌ์ฉํ๊ธฐ ์ํ ํ์ผ๋ค์ ์์ฑํ๊ธฐ ์ํ **์ผ์์ ์ธ ์ปจํ
์ด๋ ์ด๋ฏธ์ง**๋ก ์๋ํฉ๋๋ค. |
|
|
|