2022-02-11

yyj·2022년 2월 16일
0

.

목록 보기
15/21

"Django"

장고. 이제는 장고에 사용법에 대해 알아보려고한다.

  • 저번에 배운것들을 복습해보자

  • 백엔드 웹 어플리 케이션 작성하는법

    • CGI를 통해서 프로그램을 서버에서 가져왔는데 메모리도 크고 최적화가 좋지 않음 그래서 좀더 최적화 된 프로그램 was 등장
  • was
  1. web client가 프로그램 실행요청을 서버에 보냄
  2. web server가 was(container)안에 있는 프로그램을(백엔드 웹 어플리케이션)가져와 다시 client에게 response 해줌
  • was - server에서 요청된 request를 받아 프로그램을 실행시키는 주최
  • 다시 response를 통해 web server에게 결과를 돌려줌



Python은 WSGI를 활용하여 WAS의 역할을 수행한다.

  • WSGI는 Python에서만 실행이 가능하다.
  • 구조는 다음과 같다.
  • WSGI
  • 즉 webserver가 client에게 프로그램 요청을 받으면 wsgi module이 wsgi process에게 실행해 달라는 요청을 해서 장고 프레임 워크를 이용하여 안에 위치시킨 프로그램을 실행시킨다.
  • 결과적으로 wsgi process에서 다시 webserver에게 response를 준다.



Library vs Framework 두개의 차이

  • jQuery는 library임
  • Django는 framework임

Library

  • libarary는 도구라고 볼 수 있다.

  • 예를들어 망치, 스패너 즉 특별한 하나의 일을 쉽게 수행할 수 있도록 도와주는 함수 형태 혹은 클래스 형태를 의미

  • 즉 고정되어있는 하나의 작업을 수행 한다.

  • 라이브러리의 가장 큰 특징은 알고리즘이 포함되어 있지 않아 알고리즘을 내가 직접 짜야한다는 것이다.


Framework

  • framework는 이미 알고리즘을 가지고 있다.

  • 프로그램이 동작하는 절차가 존재한다(규칙이 있음)

  • 라이브러리도 가지고 있으며 프로그램이 동작하는 방식자체가 정해져있음

  • 시스템이 도는게 일정함. 알고리즘을 따로 안만들어도 됨

  • 물론 세부적인 알고리즘은 직접 짜야하지만 자동차 공장처럼 전체 프로그램이 돌아가는 방식은 이미 정해져 있다.

  • 그렇기 때문에 프로그램을 만들기가 쉬움(수정이 쉬움)

  • 유지보수도 쉬움( 구현이 쉽다)

  • front-end web application에서 가장 대표적인 framework

    • react
    • vue.js
    • angular
  • back-end web application에서 대표적인 framework

    • django


Django

  • python으로 만들어진 무료 web application Framework

web application을 개발할 때 기본적으로 구현해야하는 부분이 있음

  • Django는 이미 만들어진 기능을 제공해줘서 개바할 때 유리함
    • ex) 사용자 관리 및 인증



장고 사용해보기

  • anaconda base환경에 Django 설치

다음 명령어를 사용

conda install django
  • 여기서 용어에 대해 주의해야할 점이 있다.
  • 다른언어에서는 전체 프로그램을 web application이라 부르지만
  • python에서는 전체 프로그램을 project라고 부름
  • project안에는 모듈화된 여러가지 기능이 있음
    • 사용자 관리기능
    • 물품관리 기능
    • 게시팜 기능 등
    • 이런 각각의 기능을 application이라고 부름



잠깐 디자인 패턴에 대해 짚고 넘어가자

Design Pattern

  • 디자인 패턴에 대해 알아보자
  • 유용한 패턴만 남기고 남겨서 17개 정도로 추림
  • 많이 사용하는 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를 한번 만들어보자!

  1. project 생성 (django의 도움을 받아야함!)-> base 환경에 설치
  • anconda를 활용하여 명령어를 입력해주자
conda install django
  • 일단 c:\python-django 폴더를 생성하고 앞으로하는 프로젝트는 이폴더를 활용하여 만들 것이다.
  • 경로를 c:\python-django 이동해주자
django-admin startpoject mysite(프로젝트명)
  • 다음과 같이 입력해서 프로젝트를 생성해 준다.
  • 프로젝트를 생성하면 mysite라는 프로젝트명을 지닌 폴더안에 mysite라는 설정이 생긴다. 두개의 파일이 헷갈리니 프로젝트명으로 된 폴더 이름을 바꿔주자![ 내부 설정으로 생성된 mysite 폴더는 이름을 변경해선 안된다!]
    • 프로젝트명은 MyFirstWeb으로 변경해 주겠음
  • pycharm을 통해 프로젝트를 열어 터미널 창을 확인하면 다음과 같은 경로로 설정이 된다.
c:\python-django\MyFirstWeb\mysite

  1. application을 생성해서 project에 추가
  • 커멘드창에 다음과 같은 명령어를 입력하여 우리가 사용할 application을 만들어 주자.
python manage.py startapp poll(application명)
  • 해당 명령어를 수행하면 polls파일이 생성이된다.

  1. 파일 설정
  • 이제 파일의 설정을 할 차례이다.
  • 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만 우리나라 시간대로 변경해주면된다.
  • 그외에도 설정이 필요한 코드는 수정해서 사용하면 된다.

  1. Django는 기본적으로 Database의 특정 Table을 가지고 시작해야한다.
  • 일단 mysql을 사용할 수 있도록 모듈을 설치해 주자
pip install mysqlclient
  • 다음명령어를 실행하여 데이터 베이스에 테이블을 생성해준다.
python manage.py migrate
  • mysite_db(workbench)가서 확인해보면 테이블이 생성된 것을 볼 수 있다!

  1. 관리자 계정 만들기
  • Django는 기본적으로 admin page를 제공한다(관리page)
  • 다음 명령어를 만들어서 superuser를 만든다.
python manage.py createsuperuser 
  • userName, email password를 입력하면 관리자 계정이 생성된다.

  1. 우리가 만든 프로젝트가 WAS에 의해서 제데로 동작하는지 web에 띄워볼 수 있다.
  • 내장 web server를 이용해서 우리 project를 web에 deploy해보자
python manage.py runserver


  1. admin 페이지로 이동해보자

여기까지 장고 사용법을 알아보았다.

profile
초보개발자

0개의 댓글