Skip to main content

Command Palette

Search for a command to run...

250827

Published
3 min readView as Markdown

Python 개발 환경 완벽 가이드: 최종 정리본 🚀

이 문서는 파이썬 개발 환경을 구성하는 다양한 도구들의 역할과 상호작용, 그리고 현대적인 개발 워크플로우를 처음부터 끝까지 체계적으로 정리한 종합 가이드입니다.

1. 근본적인 질문: 왜 이렇게 복잡할까? 🤔

파이썬 개발 환경 설정의 모든 복잡성은 두 가지 핵심 문제를 해결하기 위해 존재합니다.

  • 버전 충돌: 프로젝트 A는 파이썬 3.9, 프로젝트 B는 파이썬 3.12가 필요한 상황.

  • 의존성 충돌: 프로젝트 A는 라이브러리 X의 1.0 버전, 프로젝트 B는 2.0 버전이 필요한 상황.

이 문제들을 해결하기 위해 우리는 '격리된(isolated)' 환경을 구축하는 것을 목표로 삼습니다.


2. 두 가지 핵심 전략: 모듈형 vs. 올인원

격리된 환경을 구축하는 방식은 크게 두 가지로 나뉩니다.

전략

모듈형 (Modular)

올인원 (All-in-One)

철학

각 역할에 가장 뛰어난 전문 도구들을 조합하여 사용

하나의 강력한 도구로 모든 것을 통합 관리

주요 도구

pyenv + uv (또는 pip/venv)

Anaconda / conda

추천 대상

백엔드, 웹 등 범용 소프트웨어 개발자

데이터 과학, 머신러닝, 연구자

장점

가볍고 유연하며, 업계 표준에 가까움

설치가 간편하고, 복잡한 과학 패키지 관리에 탁월함


3. 도구별 상세 분석 및 역할

🔷 모듈형 생태계 (백엔드 개발자 추천)

각 도구가 명확한 역할을 분담하여 협업하는 방식입니다.

  • Homebrew: 시스템 설치 관리자 🧰

    • 역할: pyenv, uv 등 macOS에 필요한 '관리 도구' 자체를 설치합니다.

    • 예시: brew install pyenv, brew install uv

  • pyenv: 파이썬 버전 전문가 🧑‍🏫

    • 역할: 다양한 파이썬 버전(3.9, 3.10, 3.12 등)을 설치하고 전환합니다.

    • 예시: pyenv install 3.12.0, pyenv local 3.12.0

  • uv: 프로젝트 환경 및 패키지 관리자

    • 역할: 프로젝트 폴더 내에 가상 환경(.venv)을 만들고, 해당 환경에 필요한 패키지를 초고속으로 설치/관리합니다. (venvpip의 역할을 통합)

    • 예시: uv venv, uv pip install fastapi

🔷 올인원 생태계 (데이터 과학자 추천)

conda라는 단일 명령어로 모든 것을 관리하는 방식입니다.

  • Anaconda: The Distribution 📦

    • 정의: 파이썬, conda 관리 도구, 수백 개의 데이터 과학 패키지를 모두 포함한 하나의 거대한 '설치 상품'입니다. brew install --cask anaconda로 설치한 것이 바로 이것입니다.
  • conda: The Manager 🛠️

    • 정의: 아나콘다라는 상품 안에 포함된 핵심 명령어 도구입니다.

    • 역할: 파이썬 버전, 가상 환경, 패키지(비-파이썬 의존성 포함)를 모두 관리합니다.

    • 핵심 가치: 복잡한 비-파이썬 의존성을 가진 과학 계산용 패키지들을 안정적으로 설치하는 데 압도적으로 유리합니다.

    • 예시: conda create -n myenv python=3.12, conda activate myenv, conda install numpy


4. Jupyter와 환경의 상호작용: 최종 이해 모델

Jupyter Notebook은 단순히 코드를 실행하는 프로그램이 아니라, **UI(프론트엔드)**와 **실행 엔진(백엔드)**이 분리된 정교한 클라이언트-서버 구조를 가집니다.

① 주피터 서버 프로세스: 중앙 관제탑 🗼

  • 실행: 터미널에서 jupyter notebook을 실행하면, 보통 (base) 환경에 속한 하나의 주피터 서버 프로세스가 시작됩니다.

  • 역할: 이 서버는 웹 브라우저에 UI를 띄워주고, 파일 시스템을 관리하며, 코드 실행 요청을 어떤 엔진에 보낼지 결정하는 중앙 관제탑 역할을 합니다.

② 환경: 부품 창고 🏭

  • 정의: 특정 버전의 파이썬과 라이브러리들이 설치된, 가만히 있는 파일들의 집합입니다. (예: (base), py312)

  • 터미널에서의 활성화: conda activate py312는 현재 터미널 세션의 PATH 환경 변수를 변경하여, 해당 터미널이 py312라는 '부품 창고'를 바라보게 하는 임시적인 조치입니다. 주피터 서버는 이 변화를 알지 못합니다.

③ 커널: 교체 가능한 두뇌 🧠

  • 정의: 특정 환경(py312 등)의 '부품(파이썬 실행 파일)'을 이용하여, 코드를 실제로 실행하고 상태를 기억하는 **독립된 실행 엔진(프로세스)**입니다.

  • ipykernel: Jupyter의 표준 실행 엔진 프로그램입니다. conda install ipykernel은 이 '두뇌 부품'을 특정 환경에 설치하는 과정입니다.

  • 커널 등록의 기술적 의미:

    • python -m ipykernel install --user ... 명령어는, py312 환경의 파이썬 실행 파일 절대 경로가 담긴 kernel.json 설정 파일을 생성하는 작업입니다.

    • 이 설정 파일은 주피터 서버가 항상 감시하는 특정 경로에 저장됩니다.

    • 주피터 서버는 이 파일을 읽고, 비로소 py312라는 새로운 '두뇌'의 존재와 위치를 알게 됩니다.

④ 최종 워크플로우

  1. 중앙 관제탑(주피터 서버)은 항상 (base) 환경에서 한 번만 실행합니다. (jupyter notebook)

  2. 프로젝트마다 필요한 **부품 창고(환경)**를 만듭니다. (conda create -n py312 ...)

  3. 각 부품 창고에 두뇌 부품(ipykernel)을 설치하고, 이 부품의 정보를 **관제탑에 등록(ipykernel install)**합니다.

  4. 이제 사용자는 관제탑이 제공하는 UI 안에서, 마우스 클릭만으로 여러 프로젝트의 **두뇌(커널)**를 자유롭게 교체하며 작업할 수 있습니다.

이 모델을 이해함으로써, 우리는 이제 여러 프로젝트를 동시에 관리하고, 각 프로젝트의 의존성을 완벽하게 격리하며, 재현 가능하고 안정적인 개발 환경을 구축할 수 있게 되었습니다.

More from this blog

250902

LeetCode의 "Count Substrings That Satisfy K-Constraint I" 문제를 처음 접했을 때, 저는 일단 완전탐색(브루트포스) 방식으로 접근했습니다. 이중 for문을 돌면서 모든 substring을 만들고 각각의 0, 1의 개수를 직접 세는 방식이었죠. 하지만 입력이 조금만 커져도 금방 TLE가 뜰 정도로 매우 느렸고, 효율적인 방법이 필요하다는 사실을 절감했습니다. 이때 누적합(Prefix Sum)이라는 방식을...

Sep 2, 20255 min read

250901

파이썬 핵심 개념 정리: 철학부터 동작 원리까지 파이썬을 공부하며 알게 된 핵심적인 개념과 그 이면에 있는 설계 철학을 정리합니다. 단순한 문법을 넘어 파이썬이 '왜' 이렇게 동작하는지 이해하는 데 초점을 맞춥니다. 1. 파이썬의 4가지 핵심 타입 시스템 특징 ### 동적 타이핑 (Dynamic Typing) 변수의 타입이 코드가 실행되는 시점(런타임)에 결정됩니다. 변수는 특정 타입에 묶이지 않고, 다양한 타입의 객체를 가리킬 수 있는 '...

Sep 1, 20252 min read

250829

터미널 환경 마스터하기: Python 가상환경부터 PATH의 비밀까지 Python 코딩 연습 플랫폼 Exercism을 CLI로 시작하면서 마주친 여러 궁금증을 해결한 과정을 기록합니다. 이 과정에서 Python 가상환경의 올바른 사용법, VS Code와 터미널의 연동, 그리고 가장 중요하게는 PATH 환경 변수의 동작 원리를 깊이 이해할 수 있었습니다. 1. Python 프로젝트와 가상 환경: uv 활용법 Python 프로젝트를 시작할 때, 의...

Aug 29, 20253 min read

250828

시작: 작은 혼란과 한 번의 실수 모든 것은 uv라는 새로운 파이썬 도구를 사용해보려던 시도에서 시작됐다. uv venv와 uv init, 두 가지 워크플로우 앞에서 나는 혼란스러웠고, 기존에 쓰던 방식을 정리하기로 했다. 그리고 바로 그때, 나는 실수를 저질렀다. 가상 환경을 deactivate 하지 않은 채, rm -rf .venv 명령어로 폴더를 통째로 삭제해버렸다. 터미널 프롬프트에는 여전히 (.venv)가 떠 있었다. 하지만 실제 ...

Aug 28, 20253 min read

TIL: Today I Learning

9 posts