# UV를 활용한 파이썬 개발 워크플로우 혁신하기

> Clean Markdown view of GeekNews topic #21865. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=21865](https://news.hada.io/topic?id=21865)
- GeekNews Markdown: [https://news.hada.io/topic/21865.md](https://news.hada.io/topic/21865.md)
- Type: news
- Author: [darjeeling](https://news.hada.io/@darjeeling)
- Published: 2025-07-07T15:19:40+09:00
- Updated: 2025-07-07T15:19:40+09:00
- Original source: [youtube.com](https://www.youtube.com/watch?v=TiBIjouDGuI)
- Points: 30
- Comments: 4

## Summary

**uv**와 **just**를 결합하면, **파이썬 개발 환경**에서 의존성 관리와 반복 작업 실행을 획기적으로 **자동화**하고 **표준화**할 수 있습니다. uv는 **pyproject.toml**, **uv.lock**을 기반으로 빠르고 견고하게 패키지 및 개발 워크플로우를 관리하며, just는 Makefile보다 현대적인 방식으로 각종 커맨드를 손쉽게 정의해 협업의 일관성을 높입니다. 또한 **.env 파일**과 **uvx, direnv** 등 확장 기능 활용 시, 개발자들은 복잡한 환경 설정 부담 없이 업무에 집중할 수 있는 매우 신뢰도 높은 환경을 구축할 수 있습니다.

## Topic Body

##### "uv: Making Python Local Workflows FAST and BORING in 2025" 영상 요약  
  
이 영상은 Python 패키징 도구 **uv** 를 사용하여 로컬 개발 워크플로우를 빠르고 효율적으로 만드는 방법에 대한 두 번째 파트입니다. 주요 요점은 다음과 같습니다.  
  
###### 1. `uv` 핵심 명령어 활용  
- **`uv run`**: `pyproject.toml`에 정의되고 `uv.lock` 파일에 고정된 의존성을 사용하여 가상 환경 내에서 `pytest`나 `fastapi` 같은 명령어를 실행합니다.  
- **`uv add`**: 새로운 의존성을 `pyproject.toml`에 추가하고 `uv.lock` 파일을 자동으로 업데이트합니다.  
- **`uv run --with`**: 프로젝트의 핵심 의존성에 추가하지 않고 `pdbpp`와 같은 개발용 헬퍼 모듈을 일시적으로 주입하여 사용할 수 있습니다.  
- **`uv lock --upgrade`**: 의존성 잠금 파일을 매우 빠른 속도로 업데이트합니다. `uv run`은 실행 시 자동으로 변경된 잠금 파일을 감지하고 환경을 동기화합니다.  
  
###### 2. `just`를 이용한 워크플로우 표준화  
- `uv`에는 `hatch`나 `pdm`처럼 사용자 정의 명령어를 정의하는 기능이 내장되어 있지 않습니다.  
- 영상에서는 `Makefile`의 단점(플랫폼 종속성, 비표준 문법 등)을 지적하며, 대안으로 Rust로 작성된 명령어 실행기(**`just`**)를 강력히 추천합니다.  
- `justfile`을 사용하여 다음과 같은 반복적인 작업을 레시피(recipe)로 표준화합니다.  
    - `test`: 테스트 실행 (인자 전달 가능)  
    - `cov`: 테스트 커버리지 확인  
    - `serve`: 개발 서버 실행  
    - `checkall`: 린트, 타입 체크 등 모든 검사를 한 번에 실행  
  
###### 3. `just`와 `uv`의 연동  
- **`.env` 파일**: `just`는 `.env` 파일을 읽어 환경 변수를 설정할 수 있습니다. 이를 이용해 `uv run`에 `--with` 인자를 동적으로 추가하거나 서버 포트를 변경하는 등 유연한 워크플로우를 구성할 수 있습니다.  
- **`uvx` (uv tool run)**: `pipx`처럼 프로젝트와 독립적으로 PyPI 패키지를 실행하는 명령어입니다. `just` 레시피 안에서 `httpie` 같은 도구를 프로젝트 의존성에 추가하지 않고 사용할 수 있습니다.  
  
###### 4. 가상 환경 직접 관리 (선택적 워크플로우)  
- `uv run`을 통하지 않고 전통적인 방식으로 가상 환경(`.venv`)을 활성화해서 사용하려는 개발자를 위한 방법입니다.  
- **`uv sync`**: `uv.lock` 파일과 `.venv` 폴더의 상태를 동기화합니다. (의존성 설치 및 불필요한 패키지 제거)  
- **`direnv`**: 특정 디렉터리에 들어갈 때 `.envrc` 스크립트를 자동으로 실행해주는 셸 도구입니다. 이를 활용하여 디렉터리 진입 시 자동으로 `uv sync`를 실행하고 가상 환경을 활성화할 수 있습니다.  
  
###### 결론  
`uv`의 속도와 `just`, `direnv` 같은 도구를 결합하면, 의존성 관리 및 명령어 실행을 자동화하고 표준화하여 개발자가 핵심 로직에 더 집중할 수 있는 **"빠르고 지루한(boring)"**, 즉 매우 안정적이고 예측 가능한 개발 환경을 구축할 수 있습니다.

## Comments



### Comment 41212

- Author: gracefullight
- Created: 2025-07-10T18:02:37+09:00
- Points: 1

https://github.com/gracefullight/py-starter 쓰려고 템플릿하나 만들어놨어요.

### Comment 41092

- Author: aabb2467
- Created: 2025-07-08T12:38:54+09:00
- Points: 1

poethepoet을 사용하면 pyproject.toml 안에 태스크를 정의해서 사용이 가능해서 전 just 대신 사용합니다.

### Comment 41211

- Author: gracefullight
- Created: 2025-07-10T18:01:28+09:00
- Points: 1
- Parent comment: 41092
- Depth: 1

감사요.

### Comment 41125

- Author: dkmin
- Created: 2025-07-09T08:48:58+09:00
- Points: 2
- Parent comment: 41092
- Depth: 1

감사합니다. https://poethepoet.natn.io/
