Django(python) 개념 정리

ryan·2020년 8월 27일
1

Django

목록 보기
1/4

MVC & MTV(Django의 모델)

  • Model
    안전하게 데이터를 저장한다.
  • View
    데이터를 적절하게 유저에게 보여준다.
  • Control, Template(Django)
    사용자의 입력과 이벤트에 반응하여 Model과 View를 업데이트한다.

https://www.essenceandartifact.com/2012/12/the-essence-of-mvc.html

Django 개념

출처: https://wagtailtagging.readthedocs.io/en/latest/architektur.html

  1. 웹 브라우저에서 사용자에 의한 이벤트(URL 클릭, Form에 데이터 입력 등)가 발생하면, Django 서버로 들어온다.
  2. 사용자가 요청한 URL을 URL Dispatcher에서 분석을 한다.
  3. 분석한 URL에 적합한 View로 보내지게된다.
  4. View는 사용자의 요청을 받아서, 데이터 베이스의 어느 곳에 접근해서 어떤 데이터를 가공을 해야될 지 알려주면 Model에서 실질적인 데이터 베이스와 연결을 하고, 데이터를 가져오게 된다.
  5. 이후에, 데이터베이스에서 Model로 다시 데이터를 보내준다.
  6. 이후에, Model이 View 데이터를 보내준다.
  7. View가 사용자에게 보여줄 데이터를 Template으로 보내준다.
  8. Template가 자바스크립트, html 등 다양한 형태의 유저 인터페이스를 만들어서 웹 브라우저에 넘겨준다.

이런 복잡한 과정을 거치는 이유는 특정 영역을 분리하는 것이 중요하기때문입니다.

MVC 이전의 모든 로직이 한 곳에 뭉쳐있었고, 이런 경우에는 다수의 개발자가 한 번에 작업을 하게 되면 큰 문제가 발생해왔습니다. 그래서 프로젝트가 커지면 커질수록 각 영역을 개발자가 따로 담당하는 것이 효율적입니다.

Django가 동작하는 시스템

출처: https://stackoverflow.com/questions/33314717/how-to-understand-tornado-response-request-cycle-in-django

  • Middleware는 개발자가 느낄 수는 없지만, django 뒤에서 다양한 처리를 도와줍니다.
  1. 웹 브라우저에서 어떤 요청을 하면, WSGI(Web Server Gateway Interface)라는 곳으로 신호가 들어온다.
    • WSGI는 정확하게 알 필요는 없고, 이런 게 있다 정도로만 알면 된다.
    • WSGI의 역할은 웹 서버(Nginx/Apache)와 django를 적절하게 결합을 시켜주는 역할을 한다.
  2. urls.py는 정규 표현식으로 구성되어있고, 그 정규 표현식에 맞게 VIEW로 보내진다.
  3. views.py에 실질적으로 개발자가 파이썬 코드를 많이 작성한다.
  4. VIEW에서 사용자의 요청에 의해서 데이터베이스의 데이터를 입력하던지, 아니면 데이터베이스로부터 데이터를 가지고 와서 사용자에게 리스트를 보여줄 것인지를 결정한다.
  5. VIEW에서 MODEL에서 어떤 형태든지 데이터를 가지고 와서 데이터를 가공한다.
    • 개발자가 MODEL에 변수를 지정하면 DATABASE와 연결하는 부분인 MANAGERS에서 sql query를 알아서 관리해준다. 그래서 개발자는 변수만 잘 다루면 데이터베이스로부터 데이터를 가져와서 VIEW에서 가공을 할 수 있다.
  6. 사용자에게 보여주기위한 UI(User Interface) 작업이 필요하다. 개발자가 Template를 만들어서 웹 서버로 전송을 하게 된다.
    • TEMPLATE는 html 파일인데, 개발자가 html 파일 안에 로직을 삽입할 수 있다. 그 로직은 control과 관련된 다양한 로직들일 것이다. 대단히 복작한 로직이 들어가는 것은 아니고, VIEW에서 받은 데이터를 어떻게 하면 html 파일에 보여줄 지에 대한 스크립트 파일들이 TEMPLATE에 담겨지게 된다.
    • 개발자는 이 때 다양한 FORM을 작성하게 되는데, 파일을 입력하고 사용자가 게시물을 작성할 때 뜨는 FORM들은 form.py라는 파일을 사용해서 손쉽게 다룰 수 있다.
    • FORM은 굉장히 편리하게 Django에서 구성이 된다.
  7. Template에서 받은 정보를 웹 서버가 사용자에게 보여주게된다.

Project와 APP

하나의 프로젝트가 하나의 웹사이트라고 생각을 하면 된다.

하나의 프로젝트 안에는 다양한 기능들이 있다. 어떤 의미있는 각 기능들을 app으로 관리할 수 있다. 예를 들어서 어떤 한 웹사이트의 블로그, 쇼핑몰, 게시판 등이 하나의 app이 될 수 있다.

  • 프로젝트 생성
$ django-admin startproject tutorial(프로젝트명)

🍎 manage.py: 실행 파일
🍏 mysite2(프로젝트명)으로 폴더 생성
🍎 urls.py, wsgi.py 역할은 위에 설명되어 있음
🍏 settting.py: 전체 프로젝트를 관리하는 설정들이 담겨있는 파일

  • app 생성(프로젝트의 하위 app)
$ ./manage.py startapp community(앱의 이름)
# 프로젝트 내부에 다수의 app 생성

🍎 admin.py: 관리자 권한을 가지는 사용자가 볼 수 있는 페이지에 관련된 내용을 다루는
🍏 models.py: 데이터베이스와 관련된 다양한 역할을 수행한다.
🍎 tests.py: 테스트는 테스트
🍏 views.py: 데이터베이스로부터 가져온 데이터를 적절히 가공하는 역할을 담당한다.
🍎 migrations: ???

settings.py

프로젝트 환경 설정 파일

  • DEBUG
    디버그 모드 설정: 개발자가 프로그래밍을 할 때, 어떤 에러를 보고 싶으면 디버그 모드를 TRUE로 놓고, 다양한 변수들의 상태를 확인할 수 있다. 서비스를 배포를 할 때는 디버그 모드를 FALSE로 해줘야한다. 개발하는 단계에서는 디버그 모드를 TRUE로 하면 되겠다.

  • INSTALLED_APPS
    pip로 설치한 앱 또는 본인이 만든 app을 추가: 개발자가 만든 app을 app 프로젝트에서 쓸 수 있고, 다른 누군가가 만든 third party app을 자신의 프로젝트에 사용할 수 있다. third party 프로젝트들은 pip을 이용해서 다양하게 설치할 수 있다. third party 프로젝트들만 잘 알아도 어느 정도 개발자가 원하는 어떤 결과물을 내는 데 큰 도움을 받을 수 있다.

  • MIDDLEWARE_CLASSES
    request와 response 사이의 주요 기능 레이어: 개발자는 잘 모르지만, 인증, 보안과 관련된 내용들이 MIDDLEWARE에서 다양한 기능들이 있다라는 것만 알면 좋다.

  • TEMPLATES
    django template 관련 설정, 실제 뷰(html, 변수): 개발자가 html 파일과 다양한 변수들을 view에서 컨트롤해서 다루게 된다. template 파일과 관련된 변수들을 조정하는 context와 template을 검색하기 위한 다양한 기능들 그리고 폴더 위치들을 다루는 설정 파일이다.

  • DATABASES
    데이터베이스 엔진의 연결 설정: 개발자가 다양한 데이터베이스를 쓸 수 있도록 데이터베이스 설정 파일이 따로 있다. 개발자가 어떤 어댑터를 설치하면 어댑터에 맞게 데이터베이스 주소나 계정을 설정하면 다양한 데이터베이스를 손쉽게 바꿀 수 있도록 존재한다.

  • STATIC_URL
    정적 파일의 URL(css, javascript, image, etc.): 개발자가 html 문서와 관련된 다양한 정적 파일들(css, javascript, image)의 url 또는 디렉토리를 다루는 방법과 관련된 설정 파일이다.

manage.py

  • 프로젝트 관리 명령어 모음
  • 주요 명령어
    🍎 startapp - 앱 생성
    🍏 runserver - 서버 실행
    🍎 createsuperuser - 관리자 생성
    🍏 makemigrations app - app의 모델 변경 사항 체크
    🍎 migrate - 변경 사항을 DB에 반영
    🍏 shell - 쉘을 통해 데이터를 확인
    🍎 collectstatic - static 파일을 한 곳에 모음
  • ex)
./manage.py runserver 0.0.0.0:8080(인자를 안 주면 기본 옵션인 8000 포트로 동작이 되는데, 외부에서는 접근이 안된다.)
profile
👨🏻‍💻☕️ 🎹🎵 🐰🎶 🛫📷

0개의 댓글