데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Python Poetry 대신 UV를 써보면서 느낀 점들

      victor 25.04.29
      6,844 7 5
      DEVOTEE 요약
      UV는 기존 패키지 매니저들보다 다소 빠르고 간결하며, Python 버전 관리나 가상 환경 설정을 직관적으로 지원하는 매력적인 도구입니다. 실제 성능 비교에서 “극적인 차이”를 보이진 않았지만, 복잡한 의존성 관리나 대규모 패키지 설치 상황에서는 장점이 두드러질 가능성이 있습니다. 다만 아직 실험적인 부분과 일부 기능 부족이 존재하므로, 일반적인 프로젝트 전환보다는 신규 프로젝트에서 시험 도입해보는 것이 더 적합한 접근입니다.
      DEVOTEE 추천 블로그

      UV는 정말 빠를까? 그리고 얼마나 실용적일까?

      기존 프로젝트에서는 poetry를 패키지 매니저로 도입해 사용하고 있었지만, uv가 “빠르다”는 이야기를 듣고 테스트해보지 않을 이유가 없었습니다.

      실제로 성능 차이를 체감할 수 있을지 궁금했기 때문입니다.


      FastAPI는 정말 Flask보다 빠를까?

      잠깐 주제를 벗어나지만, 속도에 대한 이야기를 하다 보면 예전에 경험했던 FastAPI 도입 사례를 빼놓을 수 없습니다.


      과거 저희 팀은 백엔드에 큰 트래픽이 없는 구조였기 때문에 초기에는 Flask로 REST API 서버를 구성했습니다.

      그러다 FastAPI가 “속도가 빠르다”는 장점으로 각광받기 시작하면서 관심을 가지게 되었고, 실제로 FastAPI로의 전환을 시도해보았습니다.


      물론, 단순히 “빠르다”는 이유만으로 프레임워크를 바꾸는 건 위험하다고 판단해 간단한 벤치마크 테스트를 진행했는데요.

      테스트 결과, FastAPI가 약간 더 빠른 듯 보이긴 했지만, 기대만큼의 큰 차이는 아니었습니다.


      특히 실제 운영 환경에서 기존 Flask API를 FastAPI로 마이그레이션해보면서 그 차이는 더욱 미미하게 느껴졌습니다.

      대부분의 API가 DB에 접근하는 구조였기 때문에 IO가 병목이 되는 상황에서는 FastAPI든 Flask든 성능 차이가 거의 없었습니다.


      이러한 의문은 저만의 생각은 아니었고, 커뮤니티에서도 비슷한 피드백들이 많았습니다.

      FastAPI가 처음에는 “가장 빠른 프레임워크”로 소개되었지만, 현재는 슬쩍 “빠른 프레임워크 중 하나”라는 표현으로 바뀐 것도 인상 깊은 변화였습니다.


      그럼에도 불구하고 FastAPI는 pydantic과의 연계로 명확한 파라미터 검증을 제공하고, 문서화가 자동으로 이루어지는 등 속도 외에도 많은 장점을 가진 프레임워크라는 점은 분명합니다.

      이런 경험이 있었기 때문에, uv에 대해서도 단순히 “빠르다”는 인상만으로는 판단하지 않고 실제로 테스트를 해보기로 했습니다.


      UV는 실제로 얼마나 빠를까?

      간단한 실험으로 numpy, beautifulsoup4 두 개의 패키지를 설치하는 데 걸리는 시간을 비교해 보았습니다.

      격리된 환경에서의 공정한 비교를 위해 Docker를 활용하였으며, 사전 준비로 패키지 매니저(pip, poetry, pdm, uv)는 미리 설치해둔 상태에서 진행했습니다.


      참고: pyenv만 사용할 경우 캐싱 이슈가 발생할 수 있어 Docker 컨테이너 내에서 테스트를 수행했습니다.


      단순 시간 비교 결과

      pip
      real	0m35.306s
      user	3m28.635s
      sys	0m7.015s
      
      poetry
      real	0m33.513s
      user	3m25.798s
      sys	0m6.447s
      
      pdm
      real	0m35.996s
      user	3m27.335s
      sys	0m6.854s
      
      uv
      real	0m31.549s
      user	3m23.507s
      sys	0m6.904s

      위 결과에서 알 수 있듯, uv가 다른 툴들보다 다소 빠르긴 했지만 “극적인 차이”까지는 아니었습니다.

      이는 패키지 자체의 빌드 지연 등 외부 요인에 영향을 받은 결과로 보입니다.

      만약 수십 개의 패키지를 설치하거나 복잡한 의존성 그래프가 있는 경우에는 uv의 장점이 더 뚜렷하게 드러날 수 있을 것으로 예상됩니다.


      다만 유의할 점은, uv 측의 주장처럼 10~100배 빠르다는 수치는 특정 조건에서의 최대 성능 기준이지, 항상 그런 건 아니라는 점입니다.

      결국 도구의 도입 여부는 실제 사용 환경에서의 유의미한 개선이 있는지를 중심으로 판단해야 합니다.


      UV를 실제로 써보니

      기존에 poetry로 운영 중이던 프로젝트를 잠깐 uv로 전환해보면서 가장 인상 깊었던 점은 간결함이었습니다.

      poetry도 자체적으로 가상 환경 생성을 지원하지만 다소 우회적인 설정이 필요한 반면,

      uv는 프로젝트 내 .venv 디렉토리를 명확하게 관리하며, uv sync, uv run 명령어를 통해 직관적인 워크플로우를 제공합니다.


      또한, pyenv 없이도 Python 버전 관리를 자체적으로 지원한다는 점은 poetry 사용자 입장에서 상당히 매력적이었습니다.

      굳이 두 개의 툴을 복잡하게 병행하지 않아도 되는 점에서 이점이 있습니다.


      지금 당장 도입해도 될까?

      uv는 분명 매력적인 툴입니다. GitHub 스타 수만 보더라도 uv는 약 51.1k로 poetry(약 33.1k)보다 더 빠르게 성장 중입니다.

      이 추세라면 커뮤니티 표준으로 자리잡는 것도 시간문제일 것입니다.

      다만, 몇 가지 보완이 필요한 부분도 존재합니다. 예를 들어, 패키지 일괄 업그레이드 기능의 부재, pyproject.toml과 requirements.txt 간의 혼란스러운 역할 구분 등 입니다.


      현재 버전이 0.6.16이라는 점을 고려하면, 이러한 이슈들도 머지않아 빠르게 개선될 가능성이 높다고 생각합니다.

      따라서 기존 프로젝트의 전체 마이그레이션보다는 신규 프로젝트에 시범적으로 도입해보는 방식이 현명한 접근일 수 있습니다.


      UV 기본 사용법

      다른 블로그에도 기본 사용법들이 잘 나와있지만 제가 사용했던 명령들을 정리하는 차원에서 간단하게 소개하고 글을 마무리 하겠습니다.

      uv 설치

      curl -LsSf https://astral.sh/uv/install.sh | sh

      uv upgrade

      uv는 자체적으로 tool update 명령을 제공하여, 지속적으로 최신 버전으로 도구를 관리할 수 있도록 지원합니다.

      uv self update

      python 설치

      uv python install 명령으로 필요한 버전을 간편하게 설치 할 수 있습니다.

      uv python install 3.12 3.13 3.14

      설치된 파이썬 목록 보기

      uv python list
      uv python list --all-versions


      프로젝트 생성하기

      아래와 같이 신규 프로젝트를 생성할 수 있습니다. 프로젝트 생성 시 특정 버전을 명시해서 생성하는 것도 가능합니다.

      uv init hello-world
      uv init -p 3.14 hello-world

      패키지 설치

      패키지 설치는 uv pip install 명령으로 설치할 수 있지만 uv pip install 명령으로 설치하면 pyproject.toml에는 설치된 패키지가 등록되지 않습니다.

      uv add [패키지 이름]

      가상 환경 설정하기

      가상환경을 설정하는 방법에서 확인해야할 것은 uv venv와 uv python pin 명령입니다.

      uv venv로 가상환경을 설정하면 .venv 디렉토리를 기본으로 가상환경을 설정하지만, uv init으로 생성된 .python-version 파일과는 별개입니다.

      uv venv는 가상환경 생성에 초점이 있는 명령이고 uv python pin은 버전 변경, 고정에 목적이 있습니다.

      uv venv --python 3.13
      uv python pin 3.13


      FastAPI 실행하기

      FastAPI 백엔드 실행을 위해 아래와 같이 프로젝트를 구성해보았습니다.

      uv init --python 3.12 fastapi_test
      cd fastapi_test
      uv add fastapi
      uv add fastapi --extra standard

      uv add fastapi로 기본 설치를 하면 아래와 같은 의존성 패키지들이 함께 설치 됩니다.

      $ uv add fastapi                   
      Resolved 11 packages in 348ms
      Installed 10 packages in 69ms
       + annotated-types==0.7.0
       + anyio==4.9.0
       + fastapi==0.115.12
       + idna==3.10
       + pydantic==2.11.3
       + pydantic-core==2.33.1
       + sniffio==1.3.1
       + starlette==0.46.2
       + typing-extensions==4.13.2
       + typing-inspection==0.4.0					

      다음은 extra 옵션으로 standard를 주었을 때 함께 설치되는 패키지 목록입니다.

      pip으로 패키지를 설치하는 경우 pip install "fastapi[standard]"같이 설치하는 명령을 아래와 같이 실행할 수 있습니다.

      $ uv add fastapi --extra standard                                              
      Resolved 37 packages in 237ms
      Installed 25 packages in 117ms
       + certifi==2025.1.31
       + click==8.1.8
       + dnspython==2.7.0
       + email-validator==2.2.0
       + fastapi-cli==0.0.7
       + h11==0.14.0
       + httpcore==1.0.8
       + httptools==0.6.4
       + httpx==0.28.1
       + jinja2==3.1.6
       + markdown-it-py==3.0.0
       + markupsafe==3.0.2
       + mdurl==0.1.2
       + pygments==2.19.1
       + python-dotenv==1.1.0
       + python-multipart==0.0.20
       + pyyaml==6.0.2
       + rich==14.0.0
       + rich-toolkit==0.14.1
       + shellingham==1.5.4
       + typer==0.15.2
       + uvicorn==0.34.1
       + uvloop==0.21.0
       + watchfiles==1.0.5
       + websockets==15.0.1`

      실행

      uv run fastapi dev main.py


      기존 Poetry 프로젝트 마이그레이션 하기

      pdm, poetry, uv는 모두 pyproject.toml 파일을 기반으로 동작하지만, 각 도구마다 참조 방식이나 구성 규칙에 차이가 있습니다.

      poetry로 생성된 pyproject.toml을 uv에서 사용할 수 있도록 변환하려면 아래 명령어를 실행하면 됩니다:

      uvx migrate-to-uv


      마무리하며

      uv는 단순히 “빠른 패키지 매니저”를 넘어, Python 패키지 관리의 흐름을 다시 정의하려는 시도를 하고 있는 흥미로운 도구입니다.

      아직은 실험적이지만, 성장 속도와 커뮤니티의 반응을 보면 가까운 미래에 Python 생태계의 주류 도구로 자리매김할 가능성이 높습니다.


      관심이 있으시다면 작은 프로젝트에서 먼저 도입해보시고, 자신만의 평가를 내려보시는 것을 추천드립니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      victor 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기