Poetry uv ๋ง์ด๊ทธ๋ ์ด์ ์ผ๋ก ์ป์ ๊ฒ๋ค
๋ ๋น ๋ฅด๊ฒ, ๋ ๊ฐ๋ณ๊ฒ, ๋ ์์ ํ๊ฒ
ํ์ฌ ์ด์ ์ค์ธ woorinara-chatbot ํ๋ก์ ํธ๋ Python ํจํค์ง ๋งค๋์ ๋ก Poetry๋ฅผ ์ฌ์ฉ ์ค์ด๋ค. ๋ฌผ๋ก ํฐ ๋ฌธ์ ์์ด ๋์๊ฐ๊ณ ์์ง๋ง, ์ต๊ทผ uv์ ์ค์น ์๋๋ฅผ ๊ฒฝํํ๊ณ ๋๋ ๊ตณ์ด Poetry๋ฅผ ๊ณ ์งํ ์ด์ ๊ฐ ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ฒฐ๊ตญ Poetry uv๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ์ง์ ์งํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋น๋ ์๊ฐ, ์ด๋ฏธ์ง ์ฉ๋, ๋ฐฐํฌ ์๋์์ ๋์ ๋๋ ๊ฐ์ ์ด ์์๋ค.
์ uv์ธ๊ฐ?
| ๊ธฐ๋ฅ | ์ฅ์ |
|---|---|
| Rust ๊ธฐ๋ฐ | ๋ณ๋ ฌ ์ฒ๋ฆฌ + ์๋์ ์ธ ์ค์น ์๋ |
| PEP 582 ์ง์ | .venv ์์ด ์๋ ๊ฐ๋ฅ (ํ๋ก์ ํธ ๋ด ํจํค์ง ๊ด๋ฆฌ) |
| Docker ์นํ์ | ์ฌ๋ฆผํ ์ด๋ฏธ์ง + ๋น ๋ฅธ ๋น๋ ์๋ |
| Poetry lock ์ง์ | ๊ธฐ์กด ํ๋ก์ ํธ ๋ง์ด๊ทธ๋ ์ด์ ๋ถ๋ด โ |
๊ธฐ์กด Docker build ์ํฉ
poetry install ๊ธฐ๋ฐ์ผ๋ก Docker ๋น๋ ์:
- Build Time: 322.6์ด
- Image Size: 2.6GB
docker build -t chatbot-api-test .
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
chatbot-api-test latest f70127f83f39 4 minutes ago 2.6GBuv ๋์ ์ค๋น ๊ณผ์
- Python ๋ฒ์ ํ์ธ:
python --version # Python 3.12.0 - Poetry ๊ฐ์ํ๊ฒฝ ์ ๊ฑฐ:
poetry env remove python
rmdir /S /Q .venv- ํ๋ก์ ํธ ๋ฐฑ์ ๋ฐ ๋ธ๋์ง ๋ถ๋ฆฌ:
xcopy /E /I /H "woorinara-chatbot-api" "woorinara-chatbot-api-poetry-backup"
git checkout -b migrate/uv- uv ์ค์น ๋ฐ ์ด๊ธฐํ:
pip install uv
uv init # pyproject.toml, uv.lock ์์ฑ
uv sync # ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํจํค์ง ์ค์นDockerfile ์ต์ ํ (Poetry uv)
FROM python:3.12-slim
WORKDIR /app
RUN pip install --no-cache-dir uv
COPY pyproject.toml uv.lock* ./
RUN uv sync --frozen --no-dev
COPY ./app ./app
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 /lambda-adapter /opt/extensions/lambda-adapter
ENV PORT=8000
ENV PATH="/app/.venv/bin:$PATH"
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "--host=0.0.0.0", "--port=8000", "app.main:app"]๋ง์ด๊ทธ๋ ์ด์ ๊ฒฐ๊ณผ
- Build Time: 87.6์ด (๊ธฐ์กด ๋๋น 73% ๊ฐ์)
- Image Size: 1.01GB (๊ธฐ์กด ๋๋น 61% ๊ฐ์)

์ฒด๊ฐ ํจ๊ณผ ์์ฝ
- ๋ฐฐํฌ ์๋ ๋จ์ถ
- GitHub Actions, AWS CodeBuild ๋ฑ์์ ํ์ดํ๋ผ์ธ ์คํ ์๊ฐ ๊ฐ์
- DockerHub/ECR push/pull ์๋ ํฅ์ ๋ฐฐํฌ ์๊ฐ ์ ์ฝ
- ๋น์ฉ ์ ๊ฐ
- CI ์๋ฒ ์๊ฐ ๋จ์ถ ๋น๋ ๋น์ฉ ๊ฐ์
- Registry ์ ์ฅ์ ์ฌ์ฉ๋ ๊ฐ์
- ์ ์ก ๋น์ฉ ์ ๊ฐ (ํนํ cross-region ๋ฐฐํฌ ์)
- ๋ณด์์ฑ ๋ฐ ์ ์ง๋ณด์ ํจ์จ ํฅ์
--no-dev,--no-cache,slim๊ธฐ๋ฐ ๊ณต๊ฒฉ ๋ฒกํฐ ๊ฐ์- ๋จ์ผ ๊ธฐ๋ฅ ์ค์ฌ ์ด๋ฏธ์ง ๋ฌธ์ ๋๋ฒ๊น ๋ฐ ๋กค๋ฐฑ ์ฉ์ด
- **Cold Start ๊ฐ์ (Lambda, Cloud Run ๋ฑ)
| ์ด๋ฏธ์ง ํฌ๊ธฐ | Cold Start ํ๊ท ์๊ฐ |
|---|---|
| 2.6GB | 3~5์ด ์ด์ |
| 1.0GB | 1~2์ด ์ด๋ด |
| <500MB | ๊ฑฐ์ ์ค์๊ฐ |
- ๊ฐ๋ฐ ๋ฐ๋ณต ์๋ ๊ฐ์
- ๋ก์ปฌ์์ Docker ๋น๋ ๋ฐ ํ ์คํธ ์๋ ํฅ์
- ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ, ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
๊ฒฐ๋ก
Poetry๋ ํ๋ฅญํ ํจํค์ง ๋งค๋์ ์ด์ง๋ง, Docker ์ค์ฌ์ ์๋น์ค ์ด์ ํ๊ฒฝ์์๋ uv๊ฐ ๋ณด์ฌ์ฃผ๋ ์๋์ ํจ์จ์ฑ์ด ์๋์ ์ด๋ค. ํนํ ๋น๋ ์๊ฐ์ด ์ค๊ณ ์ด๋ฏธ์ง๊ฐ ๊ฐ๋ฒผ์์ง๋ฉด, ๋ฐฐํฌ๋ง ๋นจ๋ผ์ง๋ ๊ฒ์ด ์๋๋ผ ์ ์ฒด ์๋น์ค ์ด์์ ๋ฆฌ๋ฌ์ด ๊ฐ๋ฒผ์์ง๋ค. ์๊ฐ์ ํฌ์ํด์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ฉด, ๊ทธ ์ดํ ์์ญ ๋ฒ์ ๋ฐฐํฌ๊ฐ ๋ ๋น ๋ฅด๊ณ ๋ ์์ ์ ์ผ๋ก ์งํ๋๋ค.