안녕하세요. 우당탕탕 개발일지 입니다.
개발 중 자세한 기록이 중요하다고 생각해 개발이 거의 끝난 시점이지만 그동안의 고민과 질문을 기록하려고 합니다. 틀린 부분 있으면 댓글 남겨주시면 반영 하겠습니다.
1. 가상 환경 개념
가상환경: 하나의 컴퓨터 안에 “프로젝트별 전용 작업 공간”을 만드는 것.
04_01. 파이썬 가상환경을 만들어 사용하는 이유
파이썬 가상환경(virtual environment)은 프로젝트마다 독립된 파이썬 실행 환경을 제공하기 위한 도구입니다. 가상환경은 프로젝트 간의 의존성 충돌을 방지하고, 관리 …
wikidocs.net

| 구분 | 가상 환경 | Docker | VM(가상머신) |
| 분리 범위 | Python | 앱 + 일부 OS | 전체 OS |
| OS 공유 | O | O (커널 공유) | X |
| 무게 | 매우 가벼움 | 중간 | 무거움 |
| 속도 | 매우 빠름 | 빠름 | 느림 |
| 용도 | 개발 | 배포 | 완전 격리 |
2. 왜 가상환경을 사용할까요?
2-1 충돌을 방지하기 위해서
사실 제 프로젝트에서 이것 때문에 필수적으로 필요했습니다.
MediaPipe,PyTorch 는 각각 필요로 하는 numpy 버전이 달라서 충돌이 일어나 한 프로젝트 내에서 2개의 가상환경을 써줬습니다. mediapipe인 경우 numpy 1.23이하를 권장하고 pytorch는 1.24 이상이 필요하다.
예를 들어:
- 프로젝트 A → numpy 1.20
- 프로젝트 B → numpy 1.26
같은 컴퓨터에 같이 설치하면 충돌나기 때문에
A 환경 / B 환경을 분리해서 각각 설치.
2-2 프로젝트 재현성을 높이기 위해서 =협업을 위해
**재현성 : 다른 컴퓨터에서도 내 프로젝트가 똑같이 실행되는 성질.
프로젝트에 적용하는 방법 )
requirements.txt 을 만들고 아래와 같이 라이브러리,프레임워크의 버전을 적어줍니다.
fastapi==0.110.0
mediapipe==0.10.9
numpy==1.23.5
torch==2.1.0
opencv-python==4.8.1.78
팀원은 터미널에서 명령어로 동일한 환경을 만들 수 있습니자!
pip install -r requirements.txt
내 컴퓨터는 되는데 다른 사람 컴퓨터에서 안되는 경우가 재현성이 안맞는 상황입니다.
"제 컴퓨터에서는 되는데.."
"너 컴퓨터를 고객한테 쓰게 할 수는 없잖아"
이런 밈이 있었는데 그 생각이 드네요..
https://oneroomtable.com/entry/why-use-virtualenv?category=892290
개발을 할 때 가상환경을 설치하는 이유?
개발 환경을 세팅할 때 가장 먼저 듣는 말 중 하나는 "가상환경부터 만들자"입니다. 특히 Python, Node.js처럼 다양한 외부 라이브러리와 버전 관리가 중요한 언어에서는 가상환경이 거의 필수입니
oneroomtable.com
이 블로그가 추가적인 내용을 담고 있습니다!
3. 가상환경 종류
저는 venv와 conda만 사용해봤습니다.
| 구분 | venv | virtualenv | conda | pipenv | poetry |
| 분리 범위 | Python 패키지 환경 | Python 패키지 환경 | Python + 패키지 + 일부 시스템 라이브러리 | Python 패키지 + 의존성 관리 | Python 패키지 + 의존성/패키징 관리 |
| Python 내장 여부 | 내장 | 별도 설치 | 별도 설치 | 별도 설치 | 별도 설치 |
| 주요 목적 | 기본 가상환경 생성 | venv보다 확장된 가상환경 생성 | 데이터/AI 환경 관리 | 가상환경과 패키지 관리를 통합 | 의존성 잠금, 패키징, 배포 관리 |
| 패키지 설치 | pip | pip | conda, pip | pipenv install | poetry add |
| 버전 고정 | requirements.txt | requirements.txt | environment.yml | Pipfile.lock | poetry.lock |
| 장점 | 가볍고 공식 표준, 사용법 단순 | venv보다 빠르거나 호환성 좋을 수 있음 | NumPy, CUDA, OpenCV 같은 복잡한 의존성 관리에 강함 | 가상환경 생성과 패키지 관리를 같이 해줌 | 의존성 관리가 정교하고 협업에 좋음 |
| 단점 | Python 외 시스템 라이브러리 관리는 약함 | 요즘은 venv로 충분한 경우 많음 | 무겁고 conda 생태계 이해 필요 | 최근에는 사용 빈도 감소 | 처음 배우기에는 venv보다 복잡함 |
| 적합한 상황 | 일반 Python, FastAPI, 간단한 ML 프로젝트 |
구버전 Python 지원, 특수 환경 | AI/데이터 분석, CUDA, 과학 계산 | 작은 앱에서 환경+패키지 통합 관리 | 실무 패키지 개발, 의존성 엄격 관리 |
| 관리 예시 | fastapi, numpy, mediapipe, torch, opencv-python, sqlalchemy | django, flask, requests, pandas, pytest | python=3.10, numpy, scipy, opencv, pytorch, cudatoolkit, ffmpeg, mkl | requests, flask, pytest, sqlalchemy, python-dotenv | fastapi, uvicorn, pydantic, sqlalchemy, pytest, black, ruff |
4.웹 개발에서는 어떨까?
1-01 필자가 생각하는 FastAPI란?
FastAPI는 API를 만들기 위한 파이썬 웹 프레임워크이다. FastAPI는 이름에 걸맞게 빠른 속도를 자랑한다. > API(Application Programing In…
wikidocs.net
Docker는 venv보다 더 큰 범위의 가상환경이라고 보면 됩니다.
venv는 Python 패키지만 분리하지만, Docker는 실행 환경 전체를 묶습니다.
Docker
├── OS 기반 이미지
├── Python 버전
├── FastAPI 코드
├── requirements.txt
├── 실행 명령어
└── 포트 설정
FastAPI 프로젝트에서는 보통 이렇게 나눕니다.
docker-compose
├── backend 컨테이너
│ └── FastAPI + uvicorn
│
├── db 컨테이너
│ └── MySQL / PostgreSQL
│
└── frontend 컨테이너
└── React / Vite
이렇게 하면 팀원 컴퓨터나 서버에서도 같은 환경으로 실행하기 쉬워지기 떄문입니다.
'[프로젝트] > 수어 연구소' 카테고리의 다른 글
| [수어 연구소]로컬과 웹상의 모델 인식 차이 개선 (0) | 2026.05.08 |
|---|---|
| [수어 연구소] 백엔드 디버깅 -HTTP상태코드 (0) | 2026.04.22 |
| [수어 연구소]Can’t automatically merge 해결방법 (0) | 2026.04.22 |
| [수어 연구소] 웹 백엔드 디버딩 : DB 저장 안될때 (0) | 2026.04.20 |