목차
-bash는 뭐고 zsh는 뭐야?
좋은 질문입니다. 🙂
zsh와 bash는 둘 다 **셸(Shell)**이라고 부르는 프로그램의 종류입니다.
1. 셸(Shell)이란?
- 셸은 운영체제와 사용자를 이어주는 인터페이스입니다.
- 우리가 명령어를 입력하면 → 셸이 해석해서 운영체제(커널)에 전달 → 실행 결과를 돌려줍니다.
- 즉, 터미널에서 명령어를 실행할 수 있게 도와주는 프로그램입니다.
2. bash (Bourne Again SHell)
- 리눅스와 macOS의 기본 셸로 가장 많이 쓰이는 표준 셸입니다.
- 이름은 원래 sh(Bourne Shell)의 개선판이라서 Bourne Again SHell → 줄여서 bash.
- 특징:
- 기본적이고 안정적임
- 거의 모든 리눅스 시스템에 기본 탑재됨
- 스크립트 작성에 많이 사용됨 (.sh 파일)
3. zsh (Z Shell)
- bash의 기능을 확장한 고급 셸입니다.
- 최근에는 macOS(카탈리나 이후) 기본 셸로 zsh가 채택되었습니다.
- 특징:
- 자동 완성 기능이 강력 (파일, 디렉토리, 명령어 옵션까지 예측)
- 맞춤법 교정 (오타를 교정해줌)
- 테마 & 플러그인 지원 (oh-my-zsh 같은 툴로 꾸미기 쉬움)
- 사용자 편의 기능이 많음
4. bash vs zsh 비교
구분 bash zsh
기본성 | 리눅스 표준, 안정적 | 확장 기능 많음 |
자동완성 | 기본적인 것만 지원 | 훨씬 강력한 자동완성 |
맞춤법 교정 | 없음 | 있음 |
꾸미기 | 단순 | 테마·플러그인 풍부 (oh-my-zsh) |
기본 탑재 | 대부분의 리눅스 | macOS(최근), 설치 필요 |
5. 비유
- bash = 기본형 자동차 (튼튼하고 어디서든 사용 가능)
- zsh = 고급형 자동차 (네비게이션, 자동 주차, 편의 기능 풍부)
👉 정리하면:
- bash: 가장 보편적인 기본 셸, 표준적이고 안정적
- zsh: bash 기반에 편의 기능을 더한 셸, 특히 macOS에서 기본 채택
-venv가 뭐야?
venv는 Python의 **가상 환경(Virtual Environment)**을 만드는 도구예요!
가상 환경이란?
각 Python 프로젝트마다 독립적인 환경을 만들어서, 서로 다른 패키지 버전이나 의존성을 관리할 수 있게 해주는 기능입니다.
왜 필요한가요?
프로젝트 A: Django 3.2가 필요
프로젝트 B: Django 4.1이 필요
이런 상황에서 전역에 하나의 Django만 설치하면 충돌이 생겨요. venv로 각각 독립된 환경을 만들면 해결!
사용 방법
1. 가상환경 생성
python -m venv myenv
2. 가상환경 활성화
# Windows
myenv\Scripts\activate
# macOS/Linux
source myenv/bin/activate
3. 활성화 확인 터미널 앞에 (myenv)가 표시됨
4. 패키지 설치
pip install requests pandas
5. 비활성화
deactivate
장점
- 격리: 프로젝트마다 독립적인 패키지 관리
- 버전 충돌 방지: 서로 다른 패키지 버전 사용 가능
- 깔끔함: 전역 Python 환경을 깔끔하게 유지
- 협업: requirements.txt로 동일한 환경 공유 가능
실제 워크플로우
# 1. 프로젝트 폴더로 이동
cd my_project
# 2. 가상환경 생성
python -m venv venv
# 3. 활성화
source venv/bin/activate # macOS/Linux
# 4. 필요한 패키지 설치
pip install django requests
# 5. 패키지 목록 저장
pip freeze > requirements.txt
# 6. 작업 완료 후 비활성화
deactivate
Python 개발할 때 거의 필수적으로 사용하는 도구예요!
-Django는 무엇에 필요한지. venv로 각각 독립된 환경을 만든다는게 무슨 의미인지 설명해줘.
Django란?
Django는 Python으로 웹사이트를 만들기 위한 웹 프레임워크예요.
Django로 만들 수 있는 것들:
- 블로그, 쇼핑몰, SNS 같은 웹사이트
- 관리자 패널이 자동으로 생성됨
- 사용자 로그인/회원가입 기능
- 데이터베이스와 쉽게 연동
- Instagram, Pinterest, Mozilla 등이 Django로 만들어짐
Django 버전의 중요성:
# Django 3.2에서는 이렇게 썼는데...
from django.conf.urls import url
# Django 4.0부터는 이렇게 써야 함
from django.urls import path
버전이 다르면 코드가 안 돌아가요!
venv로 독립된 환경 만들기
문제 상황을 예로 들어볼게요:
컴퓨터에 전역으로 설치된 상황:
내 컴퓨터
├── Python 3.9
├── Django 4.1 (전역 설치)
├── requests 2.28.0 (전역 설치)
└── pandas 1.5.0 (전역 설치)
두 개의 프로젝트가 있다면:
프로젝트 A (작년에 만든 블로그)
└── Django 3.2가 필요 (4.1에서는 오류 발생)
프로젝트 B (새로운 쇼핑몰)
└── Django 4.1이 필요
문제: 전역에는 Django 4.1만 있어서 프로젝트 A가 안 돌아감! 😱
venv로 해결하기:
1단계: 각각 독립된 환경 생성
# 프로젝트 A용 환경
python -m venv blog_env
# 프로젝트 B용 환경
python -m venv shop_env
2단계: 각 환경의 구조
내 컴퓨터
├── blog_env/
│ ├── Scripts/
│ └── Lib/
│ └── site-packages/
│ ├── Django 3.2 ✅
│ └── requests 2.25.0
├── shop_env/
│ ├── Scripts/
│ └── Lib/
│ └── site-packages/
│ ├── Django 4.1 ✅
│ └── requests 2.28.0
└── 전역 Python (건드리지 않음)
3단계: 각 프로젝트 작업할 때
# 블로그 작업할 때
cd blog_project
source blog_env/bin/activate
(blog_env) $ python manage.py runserver # Django 3.2로 실행
# 쇼핑몰 작업할 때
cd shop_project
source shop_env/bin/activate
(shop_env) $ python manage.py runserver # Django 4.1로 실행
실제 예시로 이해해보기:
상황: 친구와 협업하는 경우
친구 컴퓨터:
Django 3.0, requests 2.20.0 설치됨
내 컴퓨터:
Django 4.1, requests 2.28.0 설치됨
문제: 같은 코드인데 친구 컴퓨터에서는 오류 발생!
venv 해결책:
# requirements.txt 파일 생성
Django==3.2.0
requests==2.25.0
pandas==1.4.0
# 친구도 동일한 환경 구축
python -m venv project_env
source project_env/bin/activate
pip install -r requirements.txt
이제 둘 다 정확히 같은 패키지 버전을 사용하게 됨!
핵심 정리:
venv 없이: 한 컴퓨터 = 한 세트의 패키지 버전 venv 사용: 한 컴퓨터 = 여러 개의 독립된 패키지 환경
마치 각 프로젝트마다 별도의 컴퓨터를 갖는 것과 같은 효과예요!
-그럼 venv는 각 프로젝트 폴더마다 따로 설치를 하는거야?
네, 맞아요! venv는 보통 각 프로젝트 폴더마다 따로 만들어요.
일반적인 구조:
내 작업 폴더/
├── blog_project/
│ ├── venv/ ← 블로그용 가상환경
│ │ ├── Scripts/
│ │ └── Lib/
│ ├── manage.py
│ └── blog/
│
├── shop_project/
│ ├── venv/ ← 쇼핑몰용 가상환경
│ │ ├── Scripts/
│ │ └── Lib/
│ ├── manage.py
│ └── shop/
│
└── game_project/
├── venv/ ← 게임용 가상환경
│ ├── Scripts/
│ └── Lib/
├── main.py
└── assets/
실제 작업 과정:
1단계: 새 프로젝트 시작
mkdir my_blog
cd my_blog
python -m venv venv # 이 폴더에 venv 생성
2단계: 가상환경 활성화
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
3단계: 필요한 패키지 설치
(venv) $ pip install django requests
4단계: 프로젝트 개발
(venv) $ django-admin startproject myblog .
(venv) $ python manage.py runserver
다른 프로젝트로 이동할 때:
# 현재 가상환경 비활성화
deactivate
# 다른 프로젝트로 이동
cd ../shop_project
source venv/bin/activate # 이 프로젝트의 venv 활성화
# 이제 완전히 다른 환경!
(venv) $ pip list # 이 프로젝트만의 패키지들
왜 각 프로젝트마다 따로 만드나요?
장점:
- 완전한 독립성: 프로젝트끼리 절대 영향 안 줌
- 이동하기 쉬움: 프로젝트 폴더만 복사하면 환경도 같이 따라옴
- 관리 편함: 프로젝트 삭제하면 환경도 같이 삭제됨
단점:
- 용량: 비슷한 패키지들이 여러 번 설치됨
- 시간: 프로젝트마다 패키지 다시 다운로드
대안: 공통 가상환경
가끔은 여러 프로젝트가 비슷한 환경을 쓸 때 공통으로 만들기도 해요:
~/envs/
├── django_env/ ← Django 프로젝트들 공용
├── datascience_env/ ← 데이터 분석 프로젝트들 공용
└── web_scraping_env/ ← 크롤링 프로젝트들 공용
~/projects/
├── blog1/ ← django_env 사용
├── blog2/ ← django_env 사용
├── data_analysis1/ ← datascience_env 사용
└── crawler1/ ← web_scraping_env 사용
하지만 초보자에게는 프로젝트마다 따로 만드는 걸 추천해요. 더 안전하고 관리하기 쉽거든요!
-터미널에서 uv sync를 입력하는건 무엇을 위한거야?
uv sync는 uv라는 차세대 Python 패키지 관리자의 명령어예요!
uv란?
- Python 패키지 관리를 엄청나게 빠르게 해주는 도구
- pip의 수십 배 빠른 대안
- 가상환경 + 패키지 관리를 한 번에 처리
uv sync가 하는 일:uv sync는 프로젝트의 의존성을 lockfile에서 읽어와서 개발 환경에 설치하는 과정이에요!
uv sync의 정확한 역할:
1. 의존성 동기화
uv sync
- pyproject.toml에 정의된 패키지들을 읽음
- uv.lock 파일의 정확한 버전으로 설치
- 가상환경을 자동으로 만들고 관리
2. pip와 비교
# 기존 방식 (느림 😴)
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# uv 방식 (빠름 ⚡)
uv sync # 끝!
3. 실제 동작
uv sync를 실행하면 프로젝트가 lock되고 sync되기 전에 명령이 호출됩니다. 이 동작은 프로젝트 환경이 항상 최신 상태가 되도록 보장합니다
언제 사용하나요?
새로운 프로젝트를 받았을 때:
git clone https://github.com/someone/awesome-project
cd awesome-project
uv sync # 모든 의존성이 자동으로 설치됨!
팀원과 동일한 환경 구축:
# pyproject.toml과 uv.lock이 있는 프로젝트에서
uv sync # 정확히 같은 버전들이 설치됨
uv의 엄청난 장점들:
속도 ⚡
pip로 tensorflow 설치: 2-3분, uv로 설치: 15-20초
올인원 도구 🛠️
pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv 등을 모두 대체
자동 관리
uv run python main.py # 자동으로 환경 체크하고 실행
uv add requests # 패키지 추가
uv remove pandas # 패키지 제거
요약:
uv sync = "이 프로젝트에 필요한 모든 패키지를 정확한 버전으로 빠르게 설치해주세요!"
기존의 복잡한 pip + virtualenv 과정을 한 번에 해결하는 차세대 Python 개발 도구예요! 🚀
-pip는 뭐야?
pip는 Python 패키지를 설치하는 기본 도구예요!
pip란?
- "Pip Installs Packages" 또는 **"Pip Installs Python"**의 줄임말
- Python에 기본으로 포함되어 있음 (Python 3.4부터)
- **PyPI(Python Package Index)**에서 패키지를 다운로드해서 설치
기본 사용법:
# 패키지 설치
pip install requests
pip install django==4.2.0 # 특정 버전
pip install "django>=4.0" # 버전 조건
# 패키지 목록 보기
pip list
# 설치된 패키지 정보
pip show requests
# 패키지 제거
pip uninstall requests
# 여러 패키지 한 번에 설치
pip install -r requirements.txt
PyPI란?
Python 패키지들이 모여있는 온라인 저장소:
- 30만 개 이상의 패키지
- 누구나 자신의 패키지를 업로드 가능
- pip install 하면 여기서 다운로드됨
PyPI (pypi.org)
├── requests (HTTP 라이브러리)
├── django (웹 프레임워크)
├── pandas (데이터 분석)
├── numpy (수치 계산)
├── matplotlib (그래프)
└── ... 30만 개 이상
pip의 실제 동작:
1단계: 패키지 검색
pip install requests
# → PyPI에서 'requests' 검색
2단계: 의존성 확인
requests 패키지가 필요로 하는 것들:
├── urllib3 >= 1.21.1
├── certifi >= 2017.4.17
└── charset-normalizer >= 2.0.0
3단계: 다운로드 & 설치
# 이런 과정이 자동으로 일어남
다운로드 중: requests-2.28.0.tar.gz
다운로드 중: urllib3-1.26.12.tar.gz
...
설치 중: requests
설치 완료!
실생활 예시:
웹 크롤링하고 싶을 때:
pip install requests beautifulsoup4
데이터 분석하고 싶을 때:
pip install pandas matplotlib jupyter
웹사이트 만들고 싶을 때:
pip install django
pip의 한계들:
속도가 느림 🐌
pip install tensorflow # 2-3분 걸림
의존성 충돌 ⚠️
pip install packageA # numpy 1.20 필요
pip install packageB # numpy 1.18 필요
# → 충돌 발생!
환경 관리 복잡 😵
pip install django==3.2 # 전역에 설치
# 다른 프로젝트에서 django 4.0 필요하면?
그래서 나온 대안들:
venv (가상환경)
python -m venv myenv
source myenv/bin/activate
pip install django
poetry (고급 패키지 관리)
poetry add django
poetry install
uv (최신, 초고속)
uv add django # pip보다 10-100배 빠름!
요약:
pip = Python 패키지 설치의 기본 도구
하지만 최근에는 더 빠르고 편한 도구들(uv, poetry)이 나와서, 많은 개발자들이 갈아타고 있어요! 그래도 pip는 여전히 Python 개발의 기초이자 필수 지식이에요. 🐍
'note' 카테고리의 다른 글
python의 모듈 (1) | 2025.09.17 |
---|---|
언패킹 (0) | 2025.09.16 |
python - FOR문 (0) | 2025.09.16 |
response = client.chat.completions.create() (1) | 2025.09.15 |
패키지와 라이브러리의 차이. (1) | 2025.09.14 |