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.6GB

uv ๋„์ž… ์ค€๋น„ ๊ณผ์ •

  1. Python ๋ฒ„์ „ ํ™•์ธ:
python --version # Python 3.12.0	
  1. Poetry ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ:
poetry env remove python
rmdir /S /Q .venv
  1. ํ”„๋กœ์ ํŠธ ๋ฐฑ์—… ๋ฐ ๋ธŒ๋žœ์ง€ ๋ถ„๋ฆฌ:
xcopy /E /I /H "woorinara-chatbot-api" "woorinara-chatbot-api-poetry-backup"
git checkout -b migrate/uv
  1. 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% ๊ฐ์†Œ)

์ฒด๊ฐ ํšจ๊ณผ ์š”์•ฝ

  1. ๋ฐฐํฌ ์†๋„ ๋‹จ์ถ•
    • GitHub Actions, AWS CodeBuild ๋“ฑ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ฐ์†Œ
    • DockerHub/ECR push/pull ์†๋„ ํ–ฅ์ƒ ๋ฐฐํฌ ์‹œ๊ฐ„ ์ ˆ์•ฝ
  2. ๋น„์šฉ ์ ˆ๊ฐ
    • CI ์„œ๋ฒ„ ์‹œ๊ฐ„ ๋‹จ์ถ• ๋นŒ๋“œ ๋น„์šฉ ๊ฐ์†Œ
    • Registry ์ €์žฅ์†Œ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ
    • ์ „์†ก ๋น„์šฉ ์ ˆ๊ฐ (ํŠนํžˆ cross-region ๋ฐฐํฌ ์‹œ)
  3. ๋ณด์•ˆ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ํšจ์œจ ํ–ฅ์ƒ
    • --no-dev, --no-cache, slim ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ ๋ฒกํ„ฐ ๊ฐ์†Œ
    • ๋‹จ์ผ ๊ธฐ๋Šฅ ์ค‘์‹ฌ ์ด๋ฏธ์ง€ ๋ฌธ์ œ ๋””๋ฒ„๊น… ๋ฐ ๋กค๋ฐฑ ์šฉ์ด
  4. **Cold Start ๊ฐ์†Œ (Lambda, Cloud Run ๋“ฑ)
์ด๋ฏธ์ง€ ํฌ๊ธฐCold Start ํ‰๊ท  ์‹œ๊ฐ„
2.6GB3~5์ดˆ ์ด์ƒ
1.0GB1~2์ดˆ ์ด๋‚ด
<500MB๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„
  1. ๊ฐœ๋ฐœ ๋ฐ˜๋ณต ์†๋„ ๊ฐœ์„ 
    • ๋กœ์ปฌ์—์„œ Docker ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์†๋„ ํ–ฅ์ƒ
    • ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ, ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

๊ฒฐ๋ก 

Poetry๋„ ํ›Œ๋ฅญํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ด์ง€๋งŒ, Docker ์ค‘์‹ฌ์˜ ์„œ๋น„์Šค ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” uv๊ฐ€ ๋ณด์—ฌ์ฃผ๋Š” ์†๋„์™€ ํšจ์œจ์„ฑ์ด ์••๋„์ ์ด๋‹ค. ํŠนํžˆ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์ค„๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ๊ฐ€๋ฒผ์›Œ์ง€๋ฉด, ๋ฐฐํฌ๋งŒ ๋นจ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด ์„œ๋น„์Šค ์šด์˜์˜ ๋ฆฌ๋“ฌ์ด ๊ฐ€๋ฒผ์›Œ์ง„๋‹ค. ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด, ๊ทธ ์ดํ›„ ์ˆ˜์‹ญ ๋ฒˆ์˜ ๋ฐฐํฌ๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๋” ์•ˆ์ •์ ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.