장고. 이제는 장고에 사용법에 대해 알아보려고한다.
저번에 배운것들을 복습해보자
백엔드 웹 어플리 케이션 작성하는법
- was
- web client가 프로그램 실행요청을 서버에 보냄
- web server가 was(container)안에 있는 프로그램을(백엔드 웹 어플리케이션)가져와 다시 client에게 response 해줌
- was - server에서 요청된 request를 받아 프로그램을 실행시키는 주최
- 다시 response를 통해 web server에게 결과를 돌려줌
Python은 WSGI를 활용하여 WAS의 역할을 수행한다.
- WSGI
- 즉 webserver가 client에게 프로그램 요청을 받으면 wsgi module이 wsgi process에게 실행해 달라는 요청을 해서 장고 프레임 워크를 이용하여 안에 위치시킨 프로그램을 실행시킨다.
- 결과적으로 wsgi process에서 다시 webserver에게 response를 준다.
Library vs Framework 두개의 차이
Library
libarary는 도구라고 볼 수 있다.
예를들어 망치, 스패너 즉 특별한 하나의 일을 쉽게 수행할 수 있도록 도와주는 함수 형태 혹은 클래스 형태를 의미
즉 고정되어있는 하나의 작업을 수행 한다.
라이브러리의 가장 큰 특징은 알고리즘이 포함되어 있지 않아 알고리즘을 내가 직접 짜야한다는 것이다.
Framework
framework는 이미 알고리즘을 가지고 있다.
프로그램이 동작하는 절차가 존재한다(규칙이 있음)
라이브러리도 가지고 있으며 프로그램이 동작하는 방식자체가 정해져있음
시스템이 도는게 일정함. 알고리즘을 따로 안만들어도 됨
물론 세부적인 알고리즘은 직접 짜야하지만 자동차 공장처럼 전체 프로그램이 돌아가는 방식은 이미 정해져 있다.
그렇기 때문에 프로그램을 만들기가 쉬움(수정이 쉬움)
유지보수도 쉬움( 구현이 쉽다)
front-end web application에서 가장 대표적인 framework
back-end web application에서 대표적인 framework
web application을 개발할 때 기본적으로 구현해야하는 부분이 있음
다음 명령어를 사용
conda install django
- 여기서 용어에 대해 주의해야할 점이 있다.
- 다른언어에서는 전체 프로그램을 web application이라 부르지만
- python에서는 전체 프로그램을 project라고 부름
- project안에는 모듈화된 여러가지 기능이 있음
- 사용자 관리기능
- 물품관리 기능
- 게시팜 기능 등
- 이런 각각의 기능을 application이라고 부름
Design Pattern
가장대표적인 패턴 [ MVC ] 패턴
Model - View - Controller
- model : 데이터 처리 부분(database처리)
- view : 사용자를 위한 인터페이스(입력, 출력)
- controller : 로직을 돌리기 위해 따로 묶는역할
✍ 즉 가각 기능을 따로묶자! ( 프로그램을 분리시킴)
Django는 mvc pattern의 변형인 MVT pattern을 이용한다.
MVT 패턴
- 서버를 생략하고 장고 프레임워크만 그려서 표현하겠다.
- web client가 request를 보내면 Django Framework안에 있는 URl config가 request를 받게된고 사용자의 url을 분석한다.
- View는 URLconf가 호출하면 logic 처리를 진행한다.
- controller 역할이 mvt로 바뀌면서 view가 로직을 처리
- 만약 db를 쓸 일이 있으면
- 장고 프레임워크 밖에 있는 db를 처리를 하는데 이 경우에 Model을 이용해서 처리한다.
- Template 은 결과 html을 만들라고 요청을 한다.
- 이녀석이 다시 view에게 돌려준다.(html,css,javascript)
- view가 다시 reponse를 client에게 보내준다.
- Model은 데이터 베이스 처리를 해야한다고 위에서 말했다.
- 즉 데이터베이스 처리를 ORM 방식을 통해 처리한다.
- ORM 방식 (Object(python객체) Relation(DB table) Mapping)
- class와 객체를 이용해서 db를 핸들링한다.
장고를 이용해서 project를 한번 만들어보자!
- anconda를 활용하여 명령어를 입력해주자
conda install django
- 일단 c:\python-django 폴더를 생성하고 앞으로하는 프로젝트는 이폴더를 활용하여 만들 것이다.
- 경로를 c:\python-django 이동해주자
django-admin startpoject mysite(프로젝트명)
- 다음과 같이 입력해서 프로젝트를 생성해 준다.
- 프로젝트를 생성하면 mysite라는 프로젝트명을 지닌 폴더안에 mysite라는 설정이 생긴다. 두개의 파일이 헷갈리니 프로젝트명으로 된 폴더 이름을 바꿔주자![ 내부 설정으로 생성된 mysite 폴더는 이름을 변경해선 안된다!]
- 프로젝트명은 MyFirstWeb으로 변경해 주겠음
- pycharm을 통해 프로젝트를 열어 터미널 창을 확인하면 다음과 같은 경로로 설정이 된다.
c:\python-django\MyFirstWeb\mysite
- 커멘드창에 다음과 같은 명령어를 입력하여 우리가 사용할 application을 만들어 주자.
python manage.py startapp poll(application명)
- 해당 명령어를 수행하면 polls파일이 생성이된다.
- 이제 파일의 설정을 할 차례이다.
- mysite라는 폴더안에 settings.py가 우리의 프로젝트의 전체 설정을 가지 있다. 이것을 수정하여 우리 project에 맞게 진행해 줘야한다.
해당 폴더를 수정해줘야한다. setting.py를 누르면 코드가 길게 나오는데 내려가면서 필요한 부분만 수정하도록 하자!
BASE_DIR = Path(__file__).resolve().parent.parent # BASE_DIR => 프로젝트 ROOT => MyFirstWeb folder의 경로를 가지고 있음(c:/python-django/MyfirstWeb)
DEBUG = True # DEBUG가 만약 True이면 개발모드, False이면 운영모드이다
ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] # 만약 DEBUG가 True이면 개발모드이기 때문에 이 값은 localhost로 지정 # 만약 DEBUG가 False이면 운영모드이기 때문에 이 값은 서버의 IP주소를 입력
# Application definition # 우리 프로젝트 안에 포함된 application을 여기에 등록 #Django는 기본적으로 project에 몇개의 application을 포함하고 있어요! INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'polls.apps.PollsConfig' # 사용해야할 apps파일의 클래스명의 경로를 작성해주면 된다 # 위의 polls파일을 잘 살펴보면 apps.py폴더가 있다. # 해당 폴더내안에는 다음과 같은 내용이 있다. # from django.apps import AppConfig # class PollsConfig(AppConfig): # default_auto_field = 'django.db.models.BigAutoField' # name = 'polls' # application 등록을 위해 apps.py의 클래스명을 가져와 경로를 작성해 주면된다. ]
# Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases # 사용하는 데이터베이스 설정이 나옴 기본설정은 sqlite3를 이용 # 이 sqlite3는 소형데이터베이스, 파일로 존재, 성능 별로안좋음, 대신 size가 작다 # 쉽게 사용가능, 웹서비스에서 사용하기에는 한계가 분명 # 쉽게 사용할 수 있기 때문에 default로 sqlite3를 이용 # 처음에만 sqlite3를 이용할 꺼고 나중에는 당연히 MySQL이용 할 거임 # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # } # 우리는 mysql을 이용하기 때문에 mysql설정을 해줘야한다 name의 경우 mysql의 데이터베이스 명이다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite_db', 'USER': 'root', 'PASSWORD': 'test1234', 'HOST': '127.0.0.1', 'POR': '3306' } }
TIME_ZONE = 'Asia/Seoul' # 마지막으로 time_zone만 우리나라 시간대로 변경해주면된다.
- 그외에도 설정이 필요한 코드는 수정해서 사용하면 된다.
- 일단 mysql을 사용할 수 있도록 모듈을 설치해 주자
pip install mysqlclient
- 다음명령어를 실행하여 데이터 베이스에 테이블을 생성해준다.
python manage.py migrate
- mysite_db(workbench)가서 확인해보면 테이블이 생성된 것을 볼 수 있다!
- Django는 기본적으로 admin page를 제공한다(관리page)
- 다음 명령어를 만들어서 superuser를 만든다.
python manage.py createsuperuser
- userName, email password를 입력하면 관리자 계정이 생성된다.
- 내장 web server를 이용해서 우리 project를 web에 deploy해보자
python manage.py runserver
- http://127.0.0.1:8000/admin
- 기본 URL뒤에 admin을 붙여 관리자 페이지로 이동한다.
여기까지 장고 사용법을 알아보았다.