이번 포스트에서는 웹 프레임워크인 장고를 소개하고 장고의 개발환경 설치까지 알아본다.


장고란 무엇이고, 왜 쓰는가?

장고는 파이썬으로 만들어진 오픈소스 웹 어플리케이션 프레임워크이다. 쉽게 말하면 웹사이트를 쉽고 빠르게 개발하기 위해 필요한 공통적인 요소들을 제공해주는 웹 프레임워크라 할 수 있다. 예를 들어 웹사이트에서 공통적으로 필요한 로그인, 회원가입, 로그아웃, 관리자 페이지 등의 기능을 제공해준다. 웹사이트를 새로 만들 때마다 위의 기능들을 처음부터 다시 구현하는 것보다는 장고와 같이 이미 있는 공통적인 요소들을 사용하여 새로운 웹사이트 개발의 간접비용을 최소화해준다는 이점이 있다.

프레임워크의 정확한 의미는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현이 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다. 라이브러리가 필요한 기능을 추가하여 사용할 수 있는 모듈이라면 프레임워크는 모듈을 작성하는 데에 필요한 기능 뿐만 아니라 모듈 간 설계의 기본 구조까지 제공해준다.

정리하면, 프레임워크가 정한 일정한 구조를 따르면서 웹서비스를 만드는 데에 필요한 공통적인 요소를 사용하여 살을 붙여나가는 것이 장고를 사용한 웹개발이라 할 수 있다.


장고 개발환경 만들기

1. 가상환경 설정

가상환경(Virtual Environment)은 개발환경을 꾸리는 데에 가장 근본적이고 필수적인 요소이다. 한 대의 컴퓨터에 여러 프로젝트를 생성하고 관리해야한다고 생각해보자. 각각의 프로젝트는 여러 버전의 파이썬과 장고를 이용할 것이고 폴더마다 다른 개발환경을 구축해야할 필요성이 증가한다. 따라서 폴더별 환경을 독립적으로 나누어주는 프로그램을 사용해야하는데 이것이 바로 pyenvvirtualenv이다. (Mac OS 기준으로 설명합니다.)

pyenv는 파이썬 가상환경 관리 패키지이다. 프로젝트 별로 사용할 파이썬의 버전을 설치할 수 있고 관리해준다.

virtualenvpyenv-virtualenv는 프로젝트에 설치된 패키지들 간의 충돌을 막아주기 위해 사용하는 패키지이다. 장고는 파이썬을 사용하므로 pyenv-virtualenv를 설치하면 된다. 이는 프로젝트 전체를 파이썬 및 장고와 분리하여 웹사이트의 변경사항이 개발중인 코드에 영향을 주지 않도록 해준다. 해당 패키지들은 brew 명령어로 설치할 수 있다.

콘솔에서 다음 명령어를 입력하여 패키지를 설치해준다.

$ brew install pyenv
$ brew install pyenv-virtualenv


2. pyenv 경로설정 추가

설치가 완료되면 pyenv 관련 설정을 쉘의 설정에 추가해준다. 개인적으로는 zsh를 기본 쉘로 사용하고 있기 때문에 zsh 설정파일인 .zshrc에 적어주었다.

기본 콘솔을 사용할 경우에는 .bash_profile에 넣어준다.

$ vi ~/.zshrc

# 파일 하단에 추가할 코드
export PYENV_ROOT=/usr/local/var/pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

쉘 설정에 위 코드를 추가한 후에는 터미널 자체를 껐다 켜거나 다음 명령어를 통해 설정을 업데이트해준다.

$ source ~/.zshrc


3. 사용할 파이썬 버전 설치

방금 설치한 pyenv를 이용하여 프로젝트에 사용할 파이썬을 설치해준다. 어떤 버전을 설치할지 모르겠다면 다음 명령어를 통해 설치 가능한 파이썬 버전을 확인한다.

$ pyenv install --list

현재 안정화 버전인 3.5.3을 설치하는 명령어는 다음과 같다. 파이썬은 버전에 따라 설치에 시간이 걸릴 수 있으므로 참고하자.

$ pyenv install 3.5.3


4. 프로젝트 가상환경 설정

파이썬 설치가 왼료되면 함께 설치했던 pyenv-virtualenv 패키지를 사용하여 가상환경을 생성한다.

$ pyenv virtualenv <python version> <env_name>  # 형식
$ pyenv virtualenv 3.5.3 example_env

생성한 가상환경을 현재 폴더에 지정해준다.

$ pyenv local example_env

현재 폴더의 가상환경 버전을 확인해본다.

$ pyenv version


전역 버전을 설정할 경우에는 global 명령을 통해 버전을 설정한다.

$ pyenv global <version or env_name>


5. 장고 설치하기

장고는 파이썬 패키지 관리자인 pip 명령어로 설치할 수 있다. pip은 파이썬 패키지를 쉽게 설치하고 관리해준다.

pip으로 설치한 패키지 목록을 보고 싶을 때 다음 명령어를 사용한다.

$ pip list


pip으로 패키지를 설치하거나 및 설치 되돌리기를 할 경우에는 다음 명령어를 사용한다.

$ pip install <package_name>
$ pip uninstall <package_name>

# 장고 설치. 추가로 django_extensions와 ipython을 설치해준다(선택)
$ pip install django
$ pip install django_extensions
$ pip install ipython

추가적으로 pip을 활용하자면 프로젝트 내에 설치한 패키지를 텍스트 파일에 기록해두어 나중에 제 3자가 해당 프로젝트를 fork하거나 clone받아 사용할 때 한번에 필요 패키지를 설치하도록 할 수 있다. 그 명령어는 다음과 같다.

# pip으로 현재 설치된 상태를 freeze 명령어로 긁어와 requirements.txt에 기록한다.
$ pip freeze > requirements.txt
# 해당 requirements.txt에 적힌 모든 패키지를 설치한다.
$ pip install -r requirements.txt


6. 프로젝트 생성하기

장고까지 설치했다면 이제는 장고 프로젝트를 생성해보자.

$ django-admin startproject <어플리케이션명>

# 기본적으로 django_app이라는 이름을 붙여준다.
$ django-admin startproject django_app 

프로젝트를 생성하면 다음과 같은 트리구조가 만들어진다.

# 현재 위치(폴더)의 파일구조를 보여준다.
$ tree .
.
├── README.md
├── django_app
│   ├── config
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   ├── db.sqlite3
│   └── manage.py
└── requirements.txt

참고로 트리구조를 보려면 brewtree 패키지를 설치하면 된다.

$ brew install tree


7. 파이참에서 세팅 완료하기

파이참은 파이썬 개발 IDE 중 하나로 Jetbrain사에서 무료 / 유료 버전을 제공하고 있다. 장고로 개발한다면 쉽고 직관적으로 개발할 수 있게 나온 소프트웨어이므로 사용하는 것을 추천한다.

여기를 클릭(Mac OS용)하면 다운로드 페이지로 이동한다.

파이참을 설치하고 프로젝트 기본구조가 생성된 폴더를 열어준다.

(1) 가상환경 지정

앞서 지정해준 가상환경을 파이참에서 인식할 수 있도록 설정해주어야 한다. cmd + ,를 눌러 설정창을 연다.

설정 팝업창의 목록 중 Project: <프로젝트명>을 클릭하면 인터프리터 설정을 해줄 수 있는 Project Interpreter 탭이 뜬다.

클릭해주고 상단의 Project Interpreter 바 오른쪽 끝에 있는 톱니바퀴 모양을 클릭하여 Add Local을 선택한다.

프로젝트 가상환경 설정1


아래 이미지를 참고하여 새로운 탭이 뜨면 아까 설정해준 example_env가 있는 경로를 찾아 OK 버튼을 누르면 된다.

프로젝트 가상환경 설정2

이제 파이참에서도 가상환경을 인식한다. 파이참 내의 터미널은 가상환경을 설정해준 후 켜는 게 좋다. 참고로 파이참 내에서 터미널을 여는 단축키는 option + fn + F12이다. 만약 상단 F키가 우선순위로 설정되어 있는 키보드라면 fn키는 생략해야한다.


(2) 프로젝트 루트폴더 지정

장고에서는 명시적 상대임포트 방식(관련글 보러가기)을 사용하여 모듈 간의 관계를 표현해준다. 그렇기 때문에 반드시 프로젝트의 루트폴더를 지정해줘야한다.

루트폴더로 지정할 django_app을 오른쪽 마우스로 클릭하여 뜨는 드롭다운 메뉴 중 Mark Directory as를 선택하고 Source Root로 설정해준다. (아래 이미지를 참고하면 된다.)

프로젝트 루트폴더 지정3




마치며…

마침내 프로젝트를 진행하기 위한 설정을 모두 완료해주었다. 프로젝트를 진행하다보면 되려 처음 프로젝트 생성 및 개발환경 구축하는 방법을 잊어버리기 쉽다. 가끔은 초심으로 돌아가서 초기환경 세팅을 연습해보는 것도 나쁘지 않은 것 같다.



Julia Hwang

디발자를 꿈꾸는 웹개발자의 블로그입니다.