https://www.essenceandartifact.com/2012/12/the-essence-of-mvc.html
출처: https://wagtailtagging.readthedocs.io/en/latest/architektur.html
이런 복잡한 과정을 거치는 이유는 특정 영역을 분리하는 것이 중요하기때문입니다.
MVC 이전의 모든 로직이 한 곳에 뭉쳐있었고, 이런 경우에는 다수의 개발자가 한 번에 작업을 하게 되면 큰 문제가 발생해왔습니다. 그래서 프로젝트가 커지면 커질수록 각 영역을 개발자가 따로 담당하는 것이 효율적입니다.
- WSGI는 정확하게 알 필요는 없고, 이런 게 있다 정도로만 알면 된다.
- WSGI의 역할은 웹 서버(Nginx/Apache)와 django를 적절하게 결합을 시켜주는 역할을 한다.
- 개발자가 MODEL에 변수를 지정하면 DATABASE와 연결하는 부분인 MANAGERS에서 sql query를 알아서 관리해준다. 그래서 개발자는 변수만 잘 다루면 데이터베이스로부터 데이터를 가져와서 VIEW에서 가공을 할 수 있다.
- TEMPLATE는 html 파일인데, 개발자가 html 파일 안에 로직을 삽입할 수 있다. 그 로직은 control과 관련된 다양한 로직들일 것이다. 대단히 복작한 로직이 들어가는 것은 아니고, VIEW에서 받은 데이터를 어떻게 하면 html 파일에 보여줄 지에 대한 스크립트 파일들이 TEMPLATE에 담겨지게 된다.
- 개발자는 이 때 다양한 FORM을 작성하게 되는데, 파일을 입력하고 사용자가 게시물을 작성할 때 뜨는 FORM들은 form.py라는 파일을 사용해서 손쉽게 다룰 수 있다.
- FORM은 굉장히 편리하게 Django에서 구성이 된다.
하나의 프로젝트 안에는 다양한 기능들이 있다. 어떤 의미있는 각 기능들을 app으로 관리할 수 있다. 예를 들어서 어떤 한 웹사이트의 블로그, 쇼핑몰, 게시판 등이 하나의 app이 될 수 있다.
$ django-admin startproject tutorial(프로젝트명)
🍎 manage.py: 실행 파일
🍏 mysite2(프로젝트명)으로 폴더 생성
🍎 urls.py, wsgi.py 역할은 위에 설명되어 있음
🍏 settting.py: 전체 프로젝트를 관리하는 설정들이 담겨있는 파일
$ ./manage.py startapp community(앱의 이름)
# 프로젝트 내부에 다수의 app 생성
🍎 admin.py: 관리자 권한을 가지는 사용자가 볼 수 있는 페이지에 관련된 내용을 다루는
🍏 models.py: 데이터베이스와 관련된 다양한 역할을 수행한다.
🍎 tests.py: 테스트는 테스트
🍏 views.py: 데이터베이스로부터 가져온 데이터를 적절히 가공하는 역할을 담당한다.
🍎 migrations: ???
프로젝트 환경 설정 파일
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 runserver 0.0.0.0:8080(인자를 안 주면 기본 옵션인 8000 포트로 동작이 되는데, 외부에서는 접근이 안된다.)