가상환경(Virtualenv)로 장고(Django) 시작하기

Posted by Siner on January 12, 2019

본 게시물의 내용은 Ubuntu 16.04 를 기반으로 작성되었습니다.


virtualenv를 이용한 Django 프로젝트 구성에 필요한 요소는 다음과 같습니다.

  • pip
  • virtualenv (Python >= 3.5)
  • Django >= 2.0

0) virtualenv를 쓰는 이유

“가상환경으로 안해도 Django 잘 돌아가던데?” 라고 하시는 분들이 있을겁니다.

만약 이렇다면 어떨까요?

가상환경 없이 pip 모듈들을 설치해서 사용하고 있었다고 가정해봅시다.
그 당시 최신버전인 Django 1.11 버전을 설치하여 프로젝트를 진행했고, 1.11 버전에 새롭게 추가된 A 라는 기능을 사용합니다.
수년뒤에 Django 2.2 버전이 등장하게 되고, 새로운 기능들이 추가됨과 동시에, 과거에 사용되던 A 라는 기능은 더이상 사용할 수 없게 됩니다.
새로운 프로젝트를 진행하려던 저는 새로운 버전인 Django 2.2 를 사용하고 싶은 마음에 가상환경 없이 설치된 Django 1.11 버전을 Django 2.2 버전으로 업그레이드 해버리고 맙니다.
바로 그순간 Django 1.11 버전으로 배포중이던 프로젝트에서 사용하고 있던 A 라는 기능은 작동하지 않게 되어버리죠.

가상환경을 사용하게 되면, 하나의 호스트에서 여러 버전의 python을 동시에 사용할 수 있고,
따라서, 여러 버전의 Django를 동시에 사용할 수 있습니다.

python_virtualenv

자, 이제 virtualenv와 함께 Django 프로젝트를 시작해봅시다!


1) pip 설치

아래의 명령어를 따라 pip를 설치합니다.

1
2
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py  # 오류 발생시, 아래의 스크린샷처럼 --user 옵션을 넣어서 입력하면 됩니다.

image


2) virtualenv 설치

pip를 설치했다면, 이번에는 pip를 사용해서 virtualenv를 설치 할 것입니다.

1
pip install virtualenv  # 오류 발생시, 아래의 스크린샷처럼 --user 옵션을 넣어서 입력하면 됩니다.

image


3) virtualenv 생성

1
virtualenv -p python3 venv_for_django

-p 옵션을 사용하지 않으면, python2 기반으로 virtualenv가 생성될 수 있기 때문에, 버전을 명시해주는 것이 좋습니다.

image


4) virtualenv 활성화

1
source venv_for_django/bin/activate

image


5) Python 버전 체크

우리가 생성한 virtualenv가 의도대로 python3을 기반으로 설치되었는지 확인합니다.

1
python --version

2.0 이상의 Django을 사용하기 위해서는, virtualenv 안에 python3 버전이 반드시 설치되어야 합니다.
그렇기 때문에, virtualenv를 생성할때 -p python3 옵션을 넣습니다.

만약 이 옵션을 넣지않아서 python2 버전이 설치된다면, 낮은 버전의 Django (1.11)가 설치될 것입니다.

image

image


6) Django 설치

pip를 사용하여 Django를 설치합니다.

1
pip install django

image


7) Django 프로젝트 생성 (startproject)

Django가 설치된 virtualenv 환경에서 아래의 커맨드를 입력합니다.

1
django-admin startproject myproject

아래의 스크린샷처럼 프로젝트 이름이 유효하지 않다고 나오는 경우에는, 다른 프로젝트 이름을 사용해봅니다.

image


8) Django 프로젝트 실행 (runserver)

생성된 프로젝트 안으로 들어가서 python manage.py runserver 라는 기본 명령어에 ip, port 옵션을 넣어서 실행시켜 봅시다.
(외부 접속을 위해 0.0.0.0 이라는 ip를 입력했고, 8000이라는 포트번호를 입력했습니다.)

1
python manage.py runserver 0.0.0.0:8000

아래의 스크린샷처럼 migrate 관련 경고가 나타나지만, 지금 당장은 무시하고 넘어가도 좋습니다.
makemigrationsmigrate에 관한 내용은 나중에 다루도록 하겠습니다.

image


9) ALLOWED_HOSTS

웹 브라우저를 통해 host ip와 8000번 포트로 접속하면, DisallowedHost at / 라는 에러와 함께 디버깅 화면이 나타난 것을 확인할 수 있습니다.

image

우리가 접속할 ip가 ALLOWED_HOSTS 리스트에 존재하지 않는다는 것이니, 우리가 접속할 ip인 192.168.0.3을 리스트에 추가해야 합니다.
ALLOWED_HOSTS 설정은 myproject/settings.py에 존재합니다.

image

host의 주소(ip, 도메인)가 바뀌어도 접속이 가능하도록, ALLOWED_HOSTS에 ‘*‘ 를 입력해줍니다.

image


10) 결과

수정이 끝나고, 다시 runserver 커맨드를 실행시키면, 정상적으로 Django 서버가 동작하는 것을 확인할 수 있습니다. image