TrotRanking
IT Engineering

파이썬(Python) 의존성 지옥 탈출: 가상환경(venv) 기반 시스템 전역 오염 방지 모범 사례

김민준 · IT 시스템 엔지니어
파이썬(Python) 프로그래밍 언어의 딥러닝과 데이터 사이언스 모듈 생태계는 엄청난 확장성을 자랑하지만, 동시에 구조적인 결함 하나를 안고 있습니다. 여러 종류의 토이 프로젝트나 각기 다른 깃허브 오픈소스를 로컬 컴퓨터 환경 내에서 이리저리 클론받아 만지다 보면 필연적으로 시스템 전반 범위(Global Area)에 무분별하게 버전이 상이한 수십 종류의 `pip` 라이브러리들이 적체된다는 것입니다. 이렇게 글로벌 공간에 무질서하게 누적된 패키지들은 각 패키지 간의 암묵적인 내부 하위 의존성 버전을 서서히 침식하다가, 어느 날 기존에 잘 운영되던 백엔드 웹 스크립트를 재실행하는 순간 갑자기 런타임 오류가 발생하며 프로그램이 뻗어버리는 최악의 대참사, 바로 '의존성 지옥(Dependency Hell)'이라는 치명타 현상을 촉발하게 됩니다. 저도 초창기 시절 아무 생각 없이 로컬 맥(Mac) OS 글로벌 환경에 `pip install -r requirements.txt`를 때려 넣었다가 수많은 텐서플로우 컴파일 에러를 겪고 운영체제 전체를 포맷으로 날려버려야 했던 식은땀 나는 시스템 장애 트라우마를 겪은 바 있습니다. 이 모든 구조적 패키지 비극을 원천적인 수준에서 시스템 차단하기 위해서는 글로벌 영역을 결백한 백지 상태로 영구 타겟팅하고, 프로젝트 폴더 단위별로 완전히 갈라파고스화(고립)된 샌드박스 세계관을 창조해 주는 내장 모듈 `venv` (Virtual Environment) 활용 파이프라인의 체화가 필수적입니다. 무조건 새로운 프로젝트 폴더 디렉토리를 생성하면 최우선 절차로 터미널에 `python -m venv venv_` 명령어를 타격하는 것을 기계적인 숨 쉬기처럼 습관화해야 합니다. 첫 번째 `venv`는 파이썬 3 버전에 내장 설치되어 있는 가상환경 코어 모듈을 가리키는 것이며, 뒤에 붙은 `venv_`는 환경 설정 로직 파일들의 정보가 담겨서 생겨날 프로젝트 내부 로컬 타겟 폴더의 명칭을 의미합니다. 이 명령어 하나가 실행되면 해당 프로젝트 경로 내부에만 종속적으로 적용되는 별개의 자체 독립 파이썬 코어 실행 파일과 고립된 상태의 독립 빈 껍데기 pip 환경 패키징 디렉토리가 새롭게 창조되어 마운트됩니다. 가상환경을 생성하는 것 자체만으로는 방어를 이뤄낼 수 없습니다. 이 샌드박스 내부로 콘솔 권한을 진입시키는 활성화(Activation) 트리거 조작이 필수불가결합니다. 맥 환경에서는 터미널에 `source venv_/bin/activate`를 발동하고, 윈도우 환경에서는 `.\venv_\Scripts\activate` 명령어를 호출함으로써 터미널이 로컬 가상 환경을 바라보도록 스위칭시킵니다. 활성화에 성공하면 쉘 프로토타입 프롬프트 맨 좌측 접두사에 `(venv_)`라는 환경 맵핑 태그가 영롱하게 붙게 되며, 이 순간부터 여러분이 해당 터미널 콘솔 안에서 수만 개의 `pip install django numpy` 따위 무거운 모듈 패키지 설치 폭격을 아무리 무자비하게 진행한다고 한들 시스템 공용 글로벌 리눅스 폴더에는 단 1바이트의 쓰레기 캐시 오염 파일도 침투하지 않게 됩니다. 오직 해당 프로젝트가 들어 있는 해당 로컬 가상 공간 디렉토리 폴더 내에서만 패키지가 안전하고 조용히 종속 설치 및 배양될 뿐입니다. 필요 없는 프로젝트가 되어 환경을 폐기해야 할 때는 머리 아프게 삭제 명령어를 칠 필요조차 없습니다. 활성화 콘솔 터미널을 과감하게 `deactivate` 시켜 폐쇄하고 그 프로젝트 로컬 최상단 폴더 하나만 운영체제 휴지통에 넣고 삭제해버리면 설치되었던 거대한 라이브러리 생태계 묶음이 운영체제 코어의 뒤끝 오염 없이 완벽하고 통쾌하게 흔적도 없이 삭제 정화됩니다. 최근에는 여기에 그치지 않고 라이브러리 간 스파게티 트리 의존성 버전 록(Lock) 파일을 한 치의 오차 없이 하드코딩으로 세심하게 픽스해 관리해 주는 'Poetry'나 'Conda'같은 차세대 고급 서드파티 매니저들도 현업에서 활발히 채택되는 추세입니다. 하지만 가장 가볍고 추가 설치 비용이 들지 않는 기본 `venv`야말로 파이썬 아키텍처 생태계를 다루는 소프트웨어 엔지니어 생존의 가장 기저 철학이자, 개발 기기의 쾌적한 런타임 호흡을 무한정 연장시켜주는 절대 불변의 모범 아키텍처입니다.