[프로젝트]/수어 연구소

왜 가상환경이 필요할까?

우당탕탕 개발 일지 2026. 5. 2. 02:17
728x90

안녕하세요. 우당탕탕 개발일지 입니다.

개발 중 자세한 기록이 중요하다고 생각해 개발이 거의 끝난 시점이지만 그동안의 고민과 질문을 기록하려고 합니다. 틀린 부분 있으면 댓글 남겨주시면 반영 하겠습니다. 

 

 

1. 가상 환경 개념 

 

가상환경: 하나의 컴퓨터 안에 “프로젝트별 전용 작업 공간”을 만드는 것.

https://wikidocs.net/267778

 

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.웹 개발에서는 어떨까? 

 

 

https://wikidocs.net/175092

 

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
 

이렇게 하면 팀원 컴퓨터나 서버에서도 같은 환경으로 실행하기 쉬워지기 떄문입니다.