개발기록장

[Django] 웹 프레임워크 Django 기초 개념 본문

TIL/Django

[Django] 웹 프레임워크 Django 기초 개념

yangahh 2021. 1. 19. 19:14

 

 

 

 

[목차]
1. MTV 개념
2. Django Flow
3. Django Project
4. Django Application

 

1. MTV 개념

 

- 전통적인 웹 프레임워크의 모델 : MVC (Model, View, Controller) 패턴

  • M = 데이터베이스 구축 

  • V = HTTP 요청을 처리하는 웹 템플릿 시스템. 데이터를 적절하게 사용자에게 보여주는 역할

  • C = URL의 라우팅을 처리하는 URL 컨트롤러 (Controller)

 

- Django 모델 : MTV(Model, View, Template) 패턴

패턴과 유사하지만 Django에서는 Controller의 기능을 프레임워크 자체에서 하기 때문에 MTV 패턴이라고 한다.

  • M = 데이터베이스 구축 

  • T = MVC에서 View 역할을 Django에서는 Template이 함. 즉 사용자에게 보여주는 화면을 처리

  • V = 웹 프로젝트를 이루고 있는 어플리케이션들의 제어 흐름과 로직을 처리

  • 전반적인 flow는 아래와 같다. (django 웹 프로젝트가 구동되는 방식)

  1. 웹 브라우저에서 사용자 요청이 들어오면 django 서버로 들어와서 가장 먼저 URL Dispatcher에서 사용자가 요청한 URL을 분석

  2. 분석한 URL을 가지고 그에 적합한 View로 보냄

  3. View는 어떤 데이터가 필요한지 분석 및 처리

  4. Model에서 실제로 DB와의 커넥션이 이루어짐 (DB에서 데이터를 가져옴)

  5. DB에서 Model로 필요한 데이터를 보내줌

  6. Model이 View에 데이터를 전달해주면, View는 데이터를 요청에 맞게 처리하여 Template으로 보냄

  7. Template단에서 HTML, JS와 같은 User Interface를 만들어서 웹 브라우저로 넘겨줌

 

 

 

 

2. Django 상세 flow

 

 

장고로 웹 프로젝트를 생성하면 안에 다양한 파일들 생성하게 된다.

위 사진에서 녹색으로 표시된 파일들이 우리가 주로 다루게 될 파일이다.

 

  • wsgi.py : WSGI (web server gateway interface)에 관한 설정 파일. 브라우저에서 요청을 보내면 WSGI로 신호가 들어오는데, 웹서버와 장고를 결합시켜주는 역할을 한다. 웹서버에서 적절한 설정만 해주면 WSGI를 통해 장고와 결합된다.

  • urls.py : URL Dispatcher 역할. 정규표현식에 맞게 url패턴을 적으면 요청 url에 맞는 view로 연결시켜줌

  • view.py : 사용자 요청에 맞는 데이터 CRUD 로직 처리. 

  • models.py : 클래스와 변수를 지정하면 데이터베이스와 연결되어(연결은 managers가 처리) 테이블과 필드로 매치됨

  • html파일 등 template : view에서 처리한 로직은 사용자에게 화면으로 보여주는 역할

  • forms.py : 웹에서 form 통해 입력을 받을 사용. model template 연결하여 form 데이터를 쉽게 관리할 있다.

 

 

 

 

 

3. Django project

 

** 프로젝트 생성 전에 python 가상 환경을 세팅하고 하는 것이 좋다.

프로젝트마다 파이썬 버전, 사용하는 패키지 등이 다르기 때문에 나중에 배포할 때 다른 개발자들과 환경이 꼬일 수 있기 때문이다. (프로젝트마다 버전 컨트롤이 필요하다는 의미)

 

- 용어 정리

  • Project = 하나의 웹 사이트

  • App = 의미있는 하나의 기능 단위. Django 프로젝트는 app 단위로 관리된다.

 

- Django 설치

가상 환경을 활성화시킨 후 Django를 설치해보자. 설치는 pip로 간단하게 할 수 있다.

pip install django

설치 후 pip freeze로 설치가 되었는지 확인할 수 있다.

 

 

- 프로젝트 만들기

django-admin startproject mysite

mysite라는 이름의 프로젝트를 만들었다. 프로젝트를 만들면 아래와 같은 디렉토리 구조에 파일들이 생겨난 것을 확인할 수 있다.

 

여기서 프로젝트 이름과 같은 가장 상위 디렉토리를 보통 '프로젝트 루트 디렉토리'라고 부른다.

이 루트 디렉토리 안에서 django-admin 명령어가 실행이 된다.

구조를 살펴보면 각각의 '*.py' 파일이 모듈이고 루트 디렉토리 안에 있는 또 다른 mysite는 그 안에 __init__.py 파일이 있는 것을 봐서 하나의 패키지임을 알 수 있다.

 

프로젝트 루트 디렉토리 하위에 있는 각각의 파일들의 역할은 다음과 같다.

 

  • manage.py : django에서 쓰는 명령어 모음. 이 파일이 있는 곳이 django 프로젝트의 루트 디렉토리다.

    • 주요 명령어 - python manage.py [아래 명령어]

      - startapp : 앱 생성

      - runserver : 서버 실행

      - createsuperuser : 관리자 생성

      - makemigrations app - app의 모델 변경 사항 체크 및 models.py 파일에 제대로 작성했는지 체크

          >> app 디렉토리 아래의 migrations 디렉토리에 변경사항을 기록하는 파일들이 생성된다.

      - migrate : 변경 사항을 DB에 반영

      - shell : django가 import 되어 있는 shell

  • mysite/ : 이 디렉토리 내부에는 프로젝트를 위한 실제 파이썬 패키지들이 저장된다. mysite.urls와 같은 방법으로 이 프로젝트 어디에서나 파이썬 패키지들을 import 할 수 있다.

  • mysite/__init__.py : mysite 디렉토리가 패키지라는 것을 알려주는 단순한 용도

  • mysite/settings.py : 전체 프로젝트를 관리하는 설정들이 담긴 설정 파일 (중요)

    • settings.py 주요 설정 내용 
      - BASE_DIR : 루트 디렉토리 지정
      - DEBUG : 디버그 모드 설정. 개발할 때만 True로 설정해야 한다. True로 배포하면 해킹 위험이 매우 큼
      - ALLOWED_HOSTS : 여기에 설정된 호스트만 접근 가능
      - INSTALLED_APPS : pip로 설치한 앱 또는 본인이 만든 app을 반드시 추가해줘야 함
      - ROOT_URLCONF : urls.py 파일 위치 지정
      - DATABASES : 데이터베이스 엔진 연결 설정
      - LANGUAGE_CODE : 서버의 기본 언어 설정
      - TIME_ZONE : 서버의 타임존 설정
      - STATIC_URL : 정적 파일(css, javascript, image 등) 위치 설정

  • urls.py와 wsgi.py는 위에서 설명한 내용과 같음

 

 

 

에러는 데이터베이스에 변경사항이 적용되지 않아 생긴 에러임으로 지금은 무시
http://127.0.0.1:8000로 접속해보면 서버가 동작하고 있는 것을 확인할 수 있다.

 

 

 

 

4. Application

 

- Application 만들기

 하나의 프로젝트 안에는 다수의 app을 만들 수 있다. 루트 디렉토리에서 아래 명령어로 프로젝트의 app을 만들어보자.

python manage.py startapp polls

polls라는 이름의 app을 생성했다.

app을 생성하면 아래와 같이 app이름의 디렉토리가 생긴다. 이 디렉토리에도 역시 하나의 패키지다.

 

 

- app 안에 있는 파일들

  • admin.py : 관리자 권한을 가지는 사용자가 볼 수 있는 페이지에 관련된 설정 파일

  • models.py와 views.py는 위에 설명한 내용과 같음

  • migrations/ : 해당 App에 관련된 DB의 변경사항들을 기록해두는 파일들(0001_initial.py 등)이 쌓이는 디렉토리다.

** db.sqlite3 파일은 파일 기반인 sqlite 파일. 즉, DB 파일이다. 서버를 한 번 실행하면 생긴다. Django는 default DB가 sqlite로 설정되어 있다.

 

 

 

- INSTALLED_APPS에 추가

app을 생성한다고 해서 Django가 바로 새로 생성된 app을 인식하지는 않는다. 

따라서 항상 app을 생성하고 settings.py 파일에 INSTALLED_APPS에 새로 생성한 app이름을 적어줘야 Django가 이를 app으로 인식한다.

mysite/settings.py 파일 열어서 편집