장고(Django) 란?

  • 파이썬으로 작성된 오픈소스 웹 애플리케이션 프레임워크.
  • 장고는 일반적으로 MTV(Model-Template-View) 에 따른 일정한 룰에 의해 진행되고, 웹 프로그래밍에서 공통적을 ㅗ필요한 기능들을 미리 만들어 둔 후 단축함수, 제ㅔ네릭 뷰 등으로 제공된다.
    일반적으로 알려진 MVC 패턴과 유사한 개념을 가지는데, 장고에서는 사용자에게 보여주는 화면을 템플릿(Template)이 담당하고, 애플리케이션의 제어 흐름과 로직을 처리하는것은 뷰(View)가 담당한다.
    MVC 패턴에서 컨트롤러의 역할을 장고에서는 뷰가 담당하고, MVC 패턴에서 뷰의 역할을 템플릿이 담당하게 되는데, 일반적으로 사용하는 이름을 사용하지 않는 질문에 대한은 여기를 참조하자.
  • 장고에서 프로젝트를 생성하기 위해 startprojectstartapp 명령을 실행하면, 자동으로 프로젝트 뼈대에 해당하는 디렉터리와 파일들을 만들어준다.
    모델은 models.py파일에, 템플릿은 templates 디렉터리 하위의 *.html 파일에, 뷰는 views.py파일에 작성하도록 처음부터 뼈대를 만들어줌.
    개발자는 해당 내용을 채워넣기만 하면되서 어떤 파일을 만들어야 할지 고민할 필요가 없다.

장고의 작동흐름

content01

  • 웹 브라우저에서 어떤 이벤트가 발생한다고 하자.
    (여기서 이벤트는 특정 url을 클릭한다던지, 폼에 데이터를 입력해 보내는 등의 액션을 뜻한다)
    이벤트가 발생하면 장고 서버로 request(이벤트를 처리해달라는)가 들어오게 된다.
  • 장고 서버로 들어온 이벤트에 대해 URL 디스패처가 URL을 분석해서, 적합한 VIEW로 이 요청을 보낸다.
  • VIEW는 사용자 요청을 받아 데이터 베이스 어디에 접근해서 어떤 데이터를 가공할것인지 MODEL에게 알려준다.
  • MODEL은 DB와 커넥션을 해서 필요한 DB 연산을 처리한다.
  • DB가 다시 모델로 결과값을 보내주면 모델이 이것을 뷰로 전달한다.
    뷰는 우리에게 보내줄 데이터를 다시 TEMPLATE에게 전달해준다.
  • TEMPLATE는 .js나 .html과 같은 페이지를 만들어서 웹브라우저에게 넘겨준다.

우리가 장고프로젝트를 생성하게 되면 아래 그림처럼 다양한 파일들이 생성된다.

content02

  • 주로 녹색네모들이 우리가 실질적으로 다루는것들이라고 생각하면됨!
  • 미들웨어(Middleware)라는것은 우리가 느낄수는 없지만 장고뒤에서 다양한 처리를 도와준다.
  • WSGI는 웹서버와 장고를 적절하게 결합해주는 역할을 담당한다.
  • urls.py파일은 정규표현식으로 구성되어 있다.

Project와 App

  • 하나의 프로젝트가 하나의 웹사이트라고 생각하면된다.
    프로젝트 안에는 다양한 기능들이 있고, 어떤 의미있는 기능들을 App으로 관리한다.

  • 프로젝트를 생성할땐 다음과 같은 명령을 이용한다.

$ django-admin startproject sampleproject

위의 명령어로 프로젝트를 생성하면 다음과 같은 파일구조가 만들어진다.

  • setting.py는 전체 프로젝트를 관리하느 설정파일이다.

content03

  • app 생성은 다음과 같은 명령어를 이용해 생성한다.

`$ ./manage.py startapp blog

content03

admin 파일은 관리자 권한을 가진 사용자가 볼 수 있는 페이지에 대한 내용을 다룬다.
models.py는 DB와 관련된 다양한 역할을 수행하며, view는 db로 가져온 데이터를 적절히 가공하는 역할을 담당한다.
migrations는 db관련 폴더.


Setting.py

Setting.py는 프로젝트 환경설정에 대한 내용을 담고있다.

  • DEBUG
    디버그 설정 개발시에는 true값으로 지정해놓고 실제 서비스 배포시에는 false로 설정
  • INSTALLED_APPS
    pip로 설치한 앱 또는 본인이 만든 app추가
  • MIDDLEWARE_CLASSES
    request와 response 사이의 주요 기능 레이어
    (인증, 보안관련 내용을 다룸)
  • TEMPLATES
    장고 템플릿 관련 설정, 실제 뷰(html)를 관리
  • DATABASES
    데이터베이스 엔진의 연결 설정
  • STATIC_URL
    정적파일의 URL(css, javascript, image 등)

Manage.py

프로젝트 관리를 도와줌, 이 스크립트로 다른 설치작업없이 컴퓨터에서 웹서버 실행 가능.

주요 명령어

  • startapp : 앱 생성
  • runserver : 서버 실행
  • createsuperuser : 관리자 생성
  • makemigrations app : app 모델의 변경사항 체크
  • migrate : 변경사항을 DB에 반영
  • shell : 쉘을 통해 데이터를 확인
  • collectstatic : static 파일을 한곳에 모음.

개발용 웹 서버 - runserver

  • 장고는 개발 과정에 현재의 웹 프로그램을 실행할 수 있도록 runservr라는 테스트용 웹서버를 제공.
    실제 상용화를 고려한다면 runserver대신, Apache 또는 Nginx 등의 상용 웹 서버를 사용해야함.
    개발용으로 제공되는 runserver는 상용 웹서버에 비해 처리능력이 떨어지고, 보안 취약

애플리케이션 설계하기

  • 사용자의 눈에 보이는 화면 UI, 그 화면에 접속하기 위한 URL, 서버에서 필요한 테이블 및 처리 로직등의 설계 필요.

참고사이트1
참고사이트2
참고사이트3
참조책(Django를 활용한 쉽고 빠른 웹개발 파이썬 프로그래밍