IT기초

λ¦¬λˆ…μŠ€μ—μ„œ Python κ°€μƒν™˜κ²½ μ„€μ •ν•˜λŠ” 방법 – venv

πŸ₯„ν…Œν¬ ν•œ μŠ€ν‘Ό 2026. 6. 14. 12:48

λͺ©μ°¨

  1. νŒ¨ν‚€μ§€ 좩돌, μ™œ μƒκΈ°λŠ” 걸까?
  2. κ°€μƒν™˜κ²½(Virtual Environment)μ΄λž€?
  3. venv둜 κ°€μƒν™˜κ²½ λ§Œλ“€κΈ°
  4. κ°€μƒν™˜κ²½ ν™œμ„±ν™”μ™€ λΉ„ν™œμ„±ν™”
  5. νŒ¨ν‚€μ§€ μ„€μΉ˜ 및 requirements.txt 관리
  6. μ„œλ²„μ—μ„œ κ°€μƒν™˜κ²½ μ‚¬μš©ν•˜κΈ°
  7. 정리 및 λ‹€μŒ 단계

1. νŒ¨ν‚€μ§€ 좩돌, μ™œ μƒκΈ°λŠ” 걸까?

Python ν”„λ‘œμ νŠΈλ₯Ό μ—¬λŸ¬ 개 μš΄μ˜ν•˜λ‹€ 보면 이런 상황이 μƒκΉλ‹ˆλ‹€. ν”„λ‘œμ νŠΈ AλŠ” Django 3.2κ°€ ν•„μš”ν•˜κ³ , ν”„λ‘œμ νŠΈ BλŠ” Django 4.2κ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ— 두 버전을 λ™μ‹œμ— μ„€μΉ˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ˜λŠ” νŒ€μ›κ³Ό ν•¨κ»˜ κ°œλ°œν•˜λŠ”λ° 각자 μ»΄ν“¨ν„°μ˜ νŒ¨ν‚€μ§€ 버전이 달라 λ‚΄ μ»΄ν“¨ν„°μ—μ„œλŠ” 잘 λŒμ•„κ°€λŠ” μ½”λ“œκ°€ νŒ€μ› μ»΄ν“¨ν„°μ—μ„œλŠ” 였λ₯˜κ°€ λ‚˜λŠ” 상황도 μƒκΉλ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 것이 **κ°€μƒν™˜κ²½(Virtual Environment)**μž…λ‹ˆλ‹€.

2. κ°€μƒν™˜κ²½(Virtual Environment)μ΄λž€?

κ°€μƒν™˜κ²½μ€ ν”„λ‘œμ νŠΈλ§ˆλ‹€ 독립적인 Python ν™˜κ²½μ„ λ§Œλ“œλŠ” κΈ°μˆ μž…λ‹ˆλ‹€. 각 κ°€μƒν™˜κ²½μ€ μžμ‹ λ§Œμ˜ Python 인터프리터와 νŒ¨ν‚€μ§€λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

원룸 λΉ„μœ λ‘œ μ„€λͺ…ν•˜λ©΄, 같은 건물(컴퓨터)에 μžˆμ§€λ§Œ 각 원룸(κ°€μƒν™˜κ²½)은 λ…λ¦½λœ κ³΅κ°„μž…λ‹ˆλ‹€. 201ν˜Έμ—λŠ” Django 3.2κ°€ μ„€μΉ˜λ˜μ–΄ 있고, 202ν˜Έμ—λŠ” Django 4.2κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄λ„ μ„œλ‘œ μΆ©λŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Python 3.3 μ΄μƒμ—λŠ” venv λͺ¨λ“ˆμ΄ 기본으둜 λ‚΄μž₯λ˜μ–΄ μžˆμ–΄ 별도 μ„€μΉ˜ 없이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. venv둜 κ°€μƒν™˜κ²½ λ§Œλ“€κΈ°

ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

cd /home/ubuntu/myproject

κ°€μƒν™˜κ²½μ„ λ§Œλ“­λ‹ˆλ‹€. venv λ’€μ˜ 이름은 κ°€μƒν™˜κ²½ 폴더 μ΄λ¦„μž…λ‹ˆλ‹€. κ΄€λ‘€μ μœΌλ‘œ venv λ˜λŠ” .venvλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

python3 -m venv venv

λͺ…λ Ή μ‹€ν–‰ ν›„ myproject/venv 폴더가 μƒμ„±λ©λ‹ˆλ‹€. 이 폴더 μ•ˆμ— Python 인터프리터와 νŒ¨ν‚€μ§€κ°€ μ €μž₯λ©λ‹ˆλ‹€.

4. κ°€μƒν™˜κ²½ ν™œμ„±ν™”μ™€ λΉ„ν™œμ„±ν™”

κ°€μƒν™˜κ²½μ„ λ§Œλ“€μ—ˆλ‹€κ³  μžλ™μœΌλ‘œ μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Linux/Macμ—μ„œ ν™œμ„±ν™”

source venv/bin/activate

ν™œμ„±ν™”λ˜λ©΄ 터미널 ν”„λ‘¬ν”„νŠΈ μ•žμ— (venv)κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

(venv) ubuntu@server:~/myproject$

κ°€μƒν™˜κ²½ λΉ„ν™œμ„±ν™”

deactivate

λΉ„ν™œμ„±ν™”ν•˜λ©΄ (venv) ν‘œμ‹œκ°€ 사라지고 μ‹œμŠ€ν…œ κΈ°λ³Έ Python ν™˜κ²½μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

5. νŒ¨ν‚€μ§€ μ„€μΉ˜ 및 requirements.txt 관리

κ°€μƒν™˜κ²½μ΄ ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ pip둜 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

pip install django pip install requests flask

μ„€μΉ˜λœ νŒ¨ν‚€μ§€ λͺ©λ‘μ„ ν™•μΈν•©λ‹ˆλ‹€.

pip list

ν˜„μž¬ μ„€μΉ˜λœ νŒ¨ν‚€μ§€ λͺ©λ‘μ„ requirements.txt 파일둜 μ €μž₯ν•©λ‹ˆλ‹€. λ‹€λ₯Έ ν™˜κ²½μ—μ„œ λ™μΌν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

pip freeze > requirements.txt

requirements.txtλ₯Ό 기반으둜 νŒ¨ν‚€μ§€λ₯Ό 일괄 μ„€μΉ˜ν•©λ‹ˆλ‹€. νŒ€μ›μ΄ ν”„λ‘œμ νŠΈλ₯Ό cloneν•œ ν›„ 이 λͺ…λ ΉμœΌλ‘œ λ™μΌν•œ ν™˜κ²½μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

pip install -r requirements.txt

6. μ„œλ²„μ—μ„œ κ°€μƒν™˜κ²½ μ‚¬μš©ν•˜κΈ°

μ„œλ²„μ— μ½”λ“œλ₯Ό 배포할 λ•Œλ„ κ°€μƒν™˜κ²½μ„ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€.

μ„œλ²„μ—μ„œ ν”„λ‘œμ νŠΈ ν΄λ”λ‘œ 이동 ν›„ κ°€μƒν™˜κ²½μ„ λ§Œλ“­λ‹ˆλ‹€.

cd /home/ubuntu/myproject python3 -m venv venv

κ°€μƒν™˜κ²½μ„ ν™œμ„±ν™”ν•˜κ³  νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

source venv/bin/activate pip install -r requirements.txt

앱을 μ‹€ν–‰ν•  λ•Œλ„ κ°€μƒν™˜κ²½μ΄ ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

systemd μ„œλΉ„μŠ€λ‘œ 앱을 관리할 λ•ŒλŠ” μ„œλΉ„μŠ€ νŒŒμΌμ— κ°€μƒν™˜κ²½ Python 경둜λ₯Ό 직접 μ§€μ •ν•©λ‹ˆλ‹€.

ExecStart=/home/ubuntu/myproject/venv/bin/python app.py

μ΄λ ‡κ²Œ ν•˜λ©΄ κ°€μƒν™˜κ²½μ„ μˆ˜λ™μœΌλ‘œ ν™œμ„±ν™”ν•˜μ§€ μ•Šμ•„λ„ κ°€μƒν™˜κ²½μ˜ Pythonκ³Ό νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

7. 정리 및 λ‹€μŒ 단계

였늘 배운 핡심을 μ •λ¦¬ν•©λ‹ˆλ‹€.

  • κ°€μƒν™˜κ²½μ€ ν”„λ‘œμ νŠΈλ§ˆλ‹€ 독립적인 Python νŒ¨ν‚€μ§€ ν™˜κ²½μ„ λ§Œλ“œλŠ” κΈ°μˆ μž…λ‹ˆλ‹€.
  • python3 -m venv venv둜 μƒμ„±ν•˜κ³  source venv/bin/activate둜 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  • pip freeze > requirements.txt둜 νŒ¨ν‚€μ§€ λͺ©λ‘μ„ μ €μž₯ν•˜κ³  pip install -r requirements.txt둜 동일 ν™˜κ²½μ„ μž¬ν˜„ν•©λ‹ˆλ‹€.
  • μ„œλ²„ 배포 μ‹œμ—λ„ κ°€μƒν™˜κ²½ μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

λ‹€μŒ κΈ€μ—μ„œλŠ” TCP와 UDP의 차이, κ°œλ°œμžκ°€ κΌ­ μ•Œμ•„μ•Ό ν•  λ„€νŠΈμ›Œν¬ 기초λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.