Django
- 장고는 파이썬으로 프로그래밍하기 위한 웹 프레임워크로, 웹 서비스를 만들 때 필요한 대부분의 기능을 미리 정형화된 형태로 준비해두어 생산성이 좋다.
특징
- 기본적으로 회원 관리 기능과 관리자 페이지를 제공한다.
- 데이터베이스와의 통신을 위한 다양한 드라이버를 지원하고, ORM 방식을 통해 데이터베이스를 다룰 수 있다.
- CRUD 기능을 제네릭 뷰라는 형태로 미리 만들어놓았기 때문에, 뷰를 상속받기만 하면 바로 기능을 구현할 수 있다.
- 다양한 기본 미들웨어를 사용해 웹 애플리케이션 보안성이 높다.
- 설정파일을 개발 환경과 배포 환경을 구분해서 사용할 수 있기 때문에, 클라우드 서비스에서 자동 배포를 활용할 수 있다.
가상 환경
- 가상 환경은 다양한 파이썬 버전과 모듈 버전을 사용할 때, 각각의 버전 별 환경을 분리해서 사용하는 것으로, 프로젝트마다 별개의 가상 환경을 설정해두고 사용할 수 있다.
- 가상 환경을 사용하여 프로젝트를 생성하면 프로젝트 이름과 같은 폴더 안에 venv라는 가상 환경 폴더가 생기고, 그 안에 장고 프로젝트를 만들면 된다.
WSGI
- Web Server Gateway Interface의 약자로, 웹 서버와 장고 애플리케이션 사이에 통신을 담당한다.
- 웹 서버는 Nginx나 Apache 같은 서버 컴퓨터에서 사용자의 요청을 받아 처리해주는 프로그램으로, 웹 서버가 사용자의 역할을 해석하여 장고로 구동되고 있는 웹 서비스에 전달할 때 WSGI가 중간 역할을 한다.
- 웹 서버는 요청이 있을 경우 정보와 콜백함수를 WSGI에 전달하고, WSGI는 이 정보를 해석하여 장고 웹 어플리케이션에 전달한다.
- 장고 웹 어플리케이션은 파이썬 스크립트를 이용해 정보를 처리하고 결과를 WSGI에 다시 전달하면, 이 정보를 콜백함수를 이용해 웹 서버에 다시 전달하는 방식으로 서버, WSGI, 장고 웹 어플리케이션이 상호작용하며 동작한다.
개발 환경 세팅
Django 설치와 프로젝트 생성
Django 설치
pip install django
프로젝트 생성
django-admin startproject config .
DB 초기화
python manage.py migrate
- 위 명령어로 초기화 작업이 끝나면 db.sqlite3 파일이 생성되며, 이 파일에 웹 프로그램에서 다루는 데이터들이 저장된다.
프로젝트 구조
config 폴더
- 프로젝트 설장 파일과 웹 서비스 실행을 위한 파일들이 들어 있다.
__init__.py | 파이썬 2.x 버전과의 호환을 위해 만들어진 비어있는 파일 |
settings.py | 프로젝트 설정에 관한 내용이 들어 있다. |
urls.py | url 설정을 위한 내용이 들어있으며, 최초로 탐색되는 root urls 파일 |
wsgi.py | 웹 서비스를 실행하기 위한 WSGI 관련 내용들이 들어 있다. |
settings.py
BASE_DIR | 설정 파일이나 py 파일 등에서 루트 폴더부터 그 하위를 탐색할 때 사용되는 프로젝트의 루트 폴더 |
SECRET KEY | 세션값의 보호나 비밀번호 변경 시 사용되는 보안 URL을 만드는 데 사용된다. |
DEBUG | 디버그 모드 설정으로, True일 경우 다양한 오류 메시지를 즉시 확인할 수 있다. 실제 배포할 때는 False로 바꾸고, 다른 설정값을 이용해 관리자만 오류 메시지를 받아보게 설정한다. |
ALLOWED_HOSTS | 현재 서비스의 호스트를 설정으로, 배포시에 실제 도메인을 지정한다. |
INSTALLED_APPS | 현재 프로젝트에서 사용하는 앱의 목록을 기록한다. |
MIDDLEWARE | 장고의 모든 요청/응답 메시지 사이에 실행되는 특수한 프레임워크들로, 주로 보안에 관련된 내용이 많다. |
ROOT_URLCONF | 기준이 되는 urls.py 파일 경로 |
TEMPLATES | 장고에서 사용하는 템플릿 시스템에 관한 설정들로, 템플릿 해석 엔진과 템플릿 폴더의 경로 등을 변경할 수 있다. |
WSGI_APPLICATION | 실행을 위한 WSGI 어플리케이션을 설정한다. |
DATABASES | DB 관련 설정 |
AUTH_PASSWORD_VALIDATORS | 비밀번호 검증을 위한 설정으로, 기본적으로 사용자 정보와 유사한지, 숫자로만 만들었는지, 너무 짧은지 등을 검증한다. |
LANGUAGE_CODE | 다국어에 관한 설정 |
기본 명령어
django-admin startproject | 장고 프로젝트를 만드는 명령어로, 웹 서비스를 만들 때마다 한번 실행한다. 이후 명령들은 python manage.py를 통해 실행한다. |
startapp | 프로젝트에 기능 단위인 앱을 새로 만들 때 사용한다. |
makemigrations | 어플리케이션에 변경 사항을 추적해서 DB에 적용할 내용들을 정리하며, 보통 앱 안에 있는 모델의 변경 사항이 있을 때 주로 사용한다. |
sqlmitrate | 실행할 SQL 명령문을 출력한다. 어떤 명령문을 실행할지 확인할 때 사용하며, 튜닝이 안된 쿼리나 슬로우 쿼리 여부를 확인할 수 있다. |
migrate | 실제 병경사항을 DB에 반영한다. |
showmigrations | 프로젝트의 DB 변경사항 목록과 상태를 출력한다. |
runserver | 테스트 서버를 실행하며, 웹 서비스를 실제로 동작시킨다. |
dumpdata | 현재 DB의 내용을 백업할 때 사용한다. |
loaddata | 백업 파일에서 DB로 내용을 복구할 때 사용한다. |
flush | DB 테이블은 그대로 두고 테이블의 내용만 전부 삭제한다. |
shell | 장고 쉘을 실행시키며, 작성한 모델 등을 불러와 실제로 테스트할 수 있다. |
dbshell | DB에 직접 접근할 수 있는 쉘을 실행시킨다. 만약 장고 어플리케이션에 문제가 있어 관리자 페이지에 접근할 수 없을 때, SQL 구문을 이용해 DB를 직접 수정하기 위해 사용한다. |
createsuperuser | 관리자 계정을 생성한다. |
changepassword | 계정 비밀번호를 변경한다. |
웹 서버 실행
python manage.py 포트번호
- 기본 웹 서버는 8000번 포트를 기본으로 사용하며, 만약 포트를 변경하고 싶다면 포트 번호를 인수로 전달한다.
- 만약 IP를 직접 지정하거나 같은 네트워크 망 안에서 접속이 가능하도록 하고 싶으면 settings.py에 있는 ALLOWED_HOSTS를 설정하고, python manage.py IP주소 형태로 작성한다.
'Django > Django' 카테고리의 다른 글
MTV 패턴과 적용 (0) | 2022.03.09 |
---|