IT 엘도라도 로고
IT 엘도라도
황금

Django 개발 환경 세팅: CentOS7 (VirtualBox + Vagrant), PyCharm

2020-05-27 14:19

Django 개발 환경 세팅: CentOS7 (VirtualBox + Vagrant), PyCharm

1. CentOS7 가상 머신 설치

가상 머신(Virtual Machine)이란 특정 OS의 컴퓨터 환경을 가상화한 것으로, 또 다른 OS의 컴퓨터 한 대가 더 있는 듯한 착각을 제공하는 가상화 기술이다. VirtualBox나 VMWare 등이 바로 특정 가상 머신을 구동하기 위한 소프트웨어들에 해당한다.
그리고 Vagrant는 그러한 가상 머신들을 쉽게 설치하고 관리할 수 있도록 도와주는 소프트웨어이다. Vagrant를 이용하면 이미 누군가가 만들어 놓은 특정 환경의 가상 머신들을 쉽게 가져다 설치할 수 있다. 이러한 것들 하나하나를 가상 머신 box라고 부르며, 각 가상 머신 box에는 특정 OS와 그 OS에서 필요한 각종 소프트웨어들이 이미 갖추어져 있다. 가상 머신 box는 공식적으로 제공되는 것도 있고(https://app.vagrantup.com/boxes/search), 다른 유저들이 만들어서 제공하는 것(http://www.vagrantbox.es/)도 있다. 이 중에서 원하는 것을 선택하여 사용하자.
Vagrant의 사용법과 관련한 대표적인 명령어는 다음과 같다.
  • box 추가: vagrant box add {box 이름}
  • box 제거: vagrant box remove {box 이름}
  • box 목록: vagrant box list
  • 가상 머신 설치: vagrant init {box 이름}
  • 가상 머신 실행: vagrant up
  • 가상 머신 종료: vagrant halt
  • 가상 머신 재부팅: vagrant reload
  • 가상 머신 SSH 접속: vagrant ssh (탈출 시 exit)
본격적으로, CentOS7 가상 머신을 설치하는 과정은 다음과 같다.
  1. VirtualBox 설치 (www.virtualbox.org/wiki/Downloads)
  1. Vagrant 설치 (www.vagrantup.com/downloads.html)
  1. Vagrant를 이용하여 CentOS7 box 추가: vagrant box add centos/7 명령어를 수행한다.
  1. Vagrant를 이용하여 CentOS7 가상 머신 설치: 가상 머신이 위치할 폴더 안에서 vagrant init centos/7 명령어를 수행한다.
  1. 가상 머신 폴더 안에 생성된 Vagrantfile이라는 가상 머신 설정 파일의 내용을 다음과 같이 수정한다.
 

2. VM 개발 환경 설정

앞서 구축한 가상 머신은 결국 앞으로 장고 서버 개발을 진행할 환경이 된다. 따라서 가상 머신에 개발을 위한 몇 가지 설정을 추가로 해줄 필요가 있다. vagrant up 명령어로 VM을 실행하고 vagrant ssh 명령어로 VM에 SSH로 접속한 뒤, 다음 과정을 하나씩 따라가 보자.

2-1. 의존성 패키지 설치

yumapt와 유사한 패키지 관리자 도구로서, 등록된 저장소(Repository)에서 특정 패키지를 다운로드하는 방식으로 동작한다. yum repolist 명령어를 수행하면 등록된 저장소의 목록을 확인할 수 있다. 참고로 sudo는 루트로 로그인한 것이 아닐 때 yum 명령어를 사용할 수 있는 권한을 부여하는 역할을 수행한다.

2-2. pyenv 패키지 설치

pyenv 패키지는 하나의 로컬 시스템에서 다양한 버전의 파이썬을 사용하고 관리할 수 있도록 하는 도구이다. 다음은 pyenv 패키지를 설치하고 pyenv를 사용하기 위한 몇 가지 초기 설정 작업을 수행하는 것을 나타낸다.

2-3. pyenv-virtualenv 패키지 설치

pyenv-virtualenv 패키지는 pyenv를 이용하여 특정 파이썬 버전의 가상 환경을 쉽게 만들고 관리할 수 있도록 하는 도구이다.

2-4. 파이썬 및 가상 환경 설치

pyenv를 이용하여 원하는 버전의 파이썬을 설치하고, 그 버전을 바탕으로 가상 환경을 생성한다.

2-5. 프로젝트 폴더 생성 및 가상 환경 지정

장고 서버 개발을 위한 프로젝트 폴더를 생성하고, 그 폴더에 들어가면 자동으로 앞서 만든 가상 환경에 진입이 되도록 설정한다.

2.6. 데이터베이스(PostgreSQL) 설치 및 설정

장고가 기본적으로 제공하는 SQLite3 데이터베이스가 아닌 PostgreSQL 데이터베이스를 사용하고 싶다면, 관련 패키지를 설치하고 다음과 같이 데이터베이스를 설정해줘야 한다. 참고로 장고 쪽에도 PostgreSQL 데이터베이스와 관련한 설정을 해줘야 하는데, 이는 아래에서 다루도록 하겠다. 여기서는 장고를 설치하기 전의 과정을 설명하기 때문이다.

2.7. 장고 및 관련 파이썬 패키지 설치

pip는 파이썬 패키지 관리자 도구로서, Python Package Index라는 곳에 올라와 있는 파이썬 관련 특정 패키지를 다운로드하는 방식으로 동작한다. 앞서 설명한 yum과 유사한 성격의 도구인데, pipyum과 달리 '파이썬 관련' 패키지만 다운로드할 수 있다. pip 관련 대표적인 명령어는 다음과 같다.
  • pip list: 현재 설치된 파이썬 패키지 목록들을 확인한다.
  • pip install {패키지명}: 해당 파이썬 패키지를 다운로드한다.
  • pip uninstall {패키지명}: 해당 파이썬 패키지를 삭제한다.
  • pip install --upgrade pip: pip를 최신 버전으로 업그레이드한다.
우선 파이썬 패키지 설치를 위한 pip를 최신 버전으로 업그레이드해준다. 참고로 이 이후부터는 계속 가상 환경(프로젝트 폴더)에 진입되어 있다는 가정하에 설명을 진행하도록 하겠다. 가상 환경 진입을 위한 코드를 매번 쓸 수는 없기 때문이다.
그러면 이제 본격적으로 장고를 설치해 보자. 그런데 장고를 포함하여 서버 개발 시 해당 가상 환경에서 필요로 하는 파이썬 패키지는 여러 종류가 될 수 있다. 그 종류는 개발이 진척됨에 따라 점점 더 다양해질 것이다. 따라서 그러한 파이썬 패키지들에 대한 정보를 하나의 텍스트 파일에서 관리하도록 하자. 그러면 pip는 해당 텍스트 파일을 읽음으로써 필요한 파이썬 패키지들을 한 번에 설치할 수 있게 된다. 이는 새로운 로컬 환경에서 빠르게 개발에 필요한 환경을 설정하는 데 도움을 준다. 필자의 경우 프로젝트 폴더 안에 requirements.text라는 파일을 생성하고 그 안에 다음과 같이 필요한 파이썬 패키지들을 작성하였다.
이제 pip가 이 파일을 읽어서 파이썬 패키지들을 설치하게 해보자. 현재 디렉토리에서 requirements.txt 파일을 찾고, 해당 파일 내용을 바탕으로 필요한 파이썬 패키지들을 한 번에 설치하게 된다. 이로써 장고를 비롯한 몇 가지 파이썬 패키지들의 설치가 완료된다.
 

3. 장고 프로젝트 생성 및 설정

3-1. 장고 프로젝트 생성

장고가 설치됐으니, 장고 프로젝트를 한 번 생성해 보자. 그러면 프로젝트 폴더 구조는 다음과 같이 될 것이다. 이제 여기서 settings.py 파일을 열어 몇 가지 설정을 변경하자.
  • {프로젝트 폴더 이름}/
    • {프로젝트 이름}/
      • init.py
      • settings.py
      • urls.py
      • wsgi.py
    • requirements.tx
    • manage.py

3-2. 장고 프로젝트 설정 변경

먼저, 시간대를 대한민국 기준으로 변경한다. TIME_ZONEUSE_TZ 변수와 관련한 내용은 여기에 자세히 나와 있으니 참고 바란다. 다음으로, 데이터베이스 관련 설정을 해야 한다. 데이터베이스의 종류를 SQLite3에서 PostgreSQL로 변경해주고, 미리 생성해 놓은 데이터베이스를 장고와 연결해준다. 이로써 장고 어플리케이션이 PostgreSQL 서버와 통신할 수 있게 되었다.

3-3. 장고 데이터베이스 마이그레이션

이제 다시 SSH로 프로젝트 폴더에 들어간 다음에 다음 명령어를 수행한다. 장고가 기본적으로 제공하는 여러 (앱의) 기능들을 현재 연결된 데이터베이스에 적용시켜준다.

3-4. 장고 서버 실행

지금까지 한 설정을 바탕으로 장고 (개발용) 서버를 실행시켜보자. (참고로 이는 개발에만 사용하도록 장고가 기본 제공하는 간단한 버전의 WSGI 서버이다. 실제로 배포할 때는 mod_wsgi와 같은 WSGI 서버를 사용하게 된다.) 기본적으로는 python manage.py runserver 명령어를 수행하면 장고 서버를 실행시킬 수 있다.
그런데 우리는 가상 머신 환경에서 서버를 실행시키는 것이기 때문에 고려할 사항이 몇 가지 더 있다. 먼저, 가상 머신(Guest) 입장에서는 PC(Host)가 외부 컴퓨터이기 때문에 자신이 실행한 서버에 외부에서 접근 가능하도록 하려면 0.0.0.0 옵션을 줘서 실행해야 한다(실제로는 포트 포워딩에 의해 10.0.2.15 등의 가상 머신 IP로 접속이 되기 때문). 다음으로, 위의 VM 개발 환경 설정 파트에서 Host에서 8000번 포트로 접속하는 것을 Guest의 8000번 포트로 포워딩되도록 했기 때문에, Guest에서 8000번 포트로 서버를 실행하고 Host에서 8000번 포트로 접속해야 한다.
이제 브라우저의 주소창에 127.0.0.1:8000을 입력하여 장고 서버에 접속해보자. 다음과 같이 뜨면 성공이다.
notion image
 

4. PyCharm 개발 환경 설정

위 과정까지 잘 따라왔다면 기본적인 개발 환경 세팅은 마무리된 것이다. 그런데 매번 가상 머신에 SSH로 접속해서 vim 등의 편집기를 통해 개발을 하는 것은 너무나도 번거롭고 비효율적이다. 다행히도, 위에서 가상 머신(Guest)의 /vagrant 경로가 PC(Host)의 . 경로(가상 머신 폴더)에 동기화되도록 설정했기 때문에, 가상 머신에 접속하여 개발할 필요 없이 PC에서 바로 개발해도 된다. 즉, 단순히 PyCharm으로 프로젝트 폴더를 열어서 개발을 하기만 하면 해당 변동 사항이 실시간으로 가상 머신 내 파일 시스템에 반영될 것이라는 의미이다.
그러나 효율적인 개발을 위해서는 PyCharm에서 장고 서버를 실행시킬 수 있도록 별도로 설정해줘야 한다. 서버를 실행하지 않고 단순히 개발만 하는 경우는 거의 없다. PyCharm이 장고 서버를 실행시킬 수 있으려면 가상 머신 내에 우리가 구축해 놓은 가상 환경에 접근할 수 있어야 한다. 그래야 해당 가상 환경 내에 존재하는 파이썬 인터프리터와 각종 파이썬 패키지를 활용하여 장고 어플리케이션을 실행할 수 있기 때문이다. 다행히도 Professional 버전의 PyCharm은 Vagrant 기반의 가상 머신에 접속하여 그 안에 위치한 특정 가상 환경의 파이썬 인터프리터를 프로젝트의 인터프리터로 지정할 수 있도록 하는 기능을 제공한다. 아래에서 그 방법을 차근차근 알아보자. (Community 버전의 PyCharm에서는 이러한 기능이 제공되지 않는다.)
  1. PyCharm 실행
  1. [File > Open]을 선택하여 프로젝트 폴더를 연다.
  1. [File > Settings]을 선택하거나 [Alt + Ctrl + S] 단축키를 입력하여 설정 창을 띄운다.
  1. 좌측 탭에서 [Project: {프로젝트 폴더 이름} > Project Interpreter] 메뉴를 선택한다.
  1. 톱니바퀴 아이콘 클릭 후 [Add]를 선택하여 인터프리터 설정 추가를 위한 창을 띄운다.
  1. 좌측 탭에서 [Vagrant]를 선택한다.
  1. [Vagrant Instance Fold]에 가상 머신 폴더(= Vagrantfile이 위치하는 곳)를 지정한다.
  1. [Python interpreter path]에 가상 환경의 인터프리터를 지정한다. (/home/vagrant/.pyenv/versions/{가상 환경 이름}/bin/python3.6)
  1. [OK]를 클릭하여 인터프리터 설정 추가를 완료한다. 그러면 자동으로 프로젝트의 인터프리터 설정이 이것으로 지정된다.
  1. (선택) 다른 인터프리터 설정도 존재한다면, 이름 충돌을 예방하기 위해 각 인터프리터 설정에 이름을 부여하는 것이 좋다. 이를 위해서는 톱니바퀴 아이콘을 클릭한 후 [Show All]을 선택하여 각 인터프리터 설정을 편집하면 된다.
  1. [Run > Edit Configurations]를 선택하여 장고 서버 실행 설정 창을 띄운다. [Host]에는 0.0.0.0을, 그리고 [Port]에는 8000을 입력하여 장고 서버 실행 시 0.0.0.0 및 8000번 포트 옵션을 주도록 설정한다. (= 프로젝트 실행 시 python manage.py runserver 0.0.0.0:8000을 수행하도록 설정)
  1. 프로젝트 폴더를 마우스 오른쪽 클릭하여 [Mark Directory as > Sources Root]로 지정
말풍선
댓글 0
좋아요 1
    아직 작성된 댓글이 없어요.
사용자