icon picker
django 구조 + MVC, MVP, MVVM


image.png
image.png

각 파일들의 역할
manage.py: 프로젝트의 매니저! django프로젝트 관리를 위하 명령어 지원. 앱(App)생성, 데이터베이스 관련 명령, 개발서버 실행 등 수행
db.sqlite.3: 프로젝트 데이터베이스 파일
init.py: 이 파일이 있는 디렉토리가 파이썬 패키지임을 알려줌. python3.3버전 이상부터는 이 파일 없어도 되지만, 하위버전과 호환을 위해 적어주는게 조음
settings.py: 프로젝트 설정! 시간대 설정, 데이터베이스 설정, 여러 경로 설정 등. django 프로젝트의 전반적인 설정 담당
urls.py: URL연결역할! url을 보고 알맞은 페이지로 연결해 주는 역할. 소개요청 URL
wsgi.py: webserver gateway interface. 웹서버와 파이썬 어플리케이션인 django가 소통하는데 필요한 프로토콜
django App(앱) 구조
python manage.py startapp {생성할 app 이름}
{app_name}/
__init__.py
admin.py : 각각의 앱을 Django의 관리자 기능과 연결하거나 관리자 기능에 대해 설정
apps.py : 각각의 App마다 추가적인 기능 및 설정을 넣어 주기 위한 파일
migrations/ : Django 앱의 데이터 구조에 대한 변경 사항인 migration 파일이 저장되는 디렉토리
__init__.py
**models.py** : 앱에서 사용하는 데이터 구조를 정의하고 데이터베이스와의 소통을 담당하는 파일
tests.py : 앱에 대한 테스트 코드를 작성하는 파일. 프로젝트를 모두 완성한 다음 테스트를 준비하는 것이 아니라 앱 별로 작은 단위의 자동화된 테스트를 미리 만들어서 프로젝트 전체에 대한 테스트가 효율적으로 이루어질 수 있도록 작성
**views.py** : 앱에서 어떤 기능을 할지에 대한 메인 로직을 담당하는 파일
새로운 앱을 생성하면 setting.py에 추가 (예시)
INSTALLED_APPS =[
...,
'menus',
]
Reusable App(재사용성이 있는 App)
예전에 만든 app, 다른 개발자가 만든 app을 사용할 재사용할 수 있음.(수정과 변경)
-한 가지 앱은 한 가지 기능을 잘 수행
-많은 앱으로 구성하는 것을 두려워하지 말자
-각각의 앱을 유연하게 작석
-배포 가능한 앱

url 연결

url에 입력한 내용을 찾아서 서버는 리소스를 클라이언트에게 제공
url(uniform resource locator)는 네트워크 상의 자원의 위치를 나타내는 문자열. domain은 서버를 의미
파일은 클라이언트의 요청인 URL을 보고 알맞은 로직을 제공하기 위해 계층적으로 구성됨. 모든 URL에 대한 분기가 끝나면 알맞은 view를 호출하여 로직 처리
image.png

매우 중요!!!

image.png


추가: 디자인패턴 MVC , MVP, MVVM 비교


1. MVC


MVC 패턴은 Model + View + Controller를 합친 용어입니다. MVC 패턴의 구조, 동작, 특징, 장점, 단점을 이야기하겠습니다.


1) 구조


MVC
MVC는 Model + View + Controller를 말합니다.






Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
View : 사용자에서 보여지는 UI 부분입니다.
Controller : 사용자의 입력(Action)을 받고 처리하는 부분입니다.


2) 동작


MVC 패턴의 동작 순서는 아래와 같습니다.


사용자의 Action들은 Controller에 들어오게 됩니다.
Controller는 사용자의 Action를 확인하고, Model을 업데이트합니다.
Controller는 Model을 나타내줄 View를 선택합니다.
View는 Model을 이용하여 화면을 나타냅니다.


* 참고 - MVC에서 View가 업데이트 되는 방법


View가 Model을 이용하여 직접 업데이트 하는 방법
Model에서 View에게 Notify 하여 업데이트 하는 방법
View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트 하는 방법.


3) 특징


Controller는 여러개의 View를 선택할 수 있는 1:n 구조입니다.


Controller는 View를 선택할 뿐 직접 업데이트 하지 않습니다. (View는 Controller를 알지 못합니다.)


4) 장점


MVC 패턴의 장점은 널리 사용되고 있는 패턴이라는 점에 걸맞게 가장 단순합니다. 단순하다 보니 보편적으로 많이 사용되는 디자인패턴입니다.


5) 단점


MVC 패턴의 단점은 View와 Model 사이의 의존성이 높다는 것입니다. View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어렵게 만들 수 있습니다.


2. MVP


MVP 패턴은 Model + View + Presenter를 합친 용어입니다. Model과 View는 MVC 패턴과 동일하고, Controller 대신 Presenter가 존재합니다. MVP 패턴의 구조, 동작, 특징, 장점, 단점을 이야기하겠습니다.


1) 구조


MVP
MVP는 Model + View + Presenter를 말합니다.






Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
View : 사용자에서 보여지는 UI 부분입니다.
Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분입니다. View와 Model을 붙여주는 접착제..? 역할을 합니다.


2) 동작


MVP 패턴의 동작 순서는 아래와 같습니다.


사용자의 Action들은 View를 통해 들어오게 됩니다.
View는 데이터를 Presenter에 요청합니다.
Presenter는 Model에게 데이터를 요청합니다.
Model은 Presenter에서 요청받은 데이터를 응답합니다.
Presenter는 View에게 데이터를 응답합니다.
View는 Presenter가 응답한 데이터를 이용하여 화면을 나타냅니다.


3) 특징


Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 접착제 역할을 합니다.


Presenter와 View는 1:1 관계입니다.


4) 장점


MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것입니다. MVP 패턴은 MVC 패턴의 단점이었던 View와 Model의 의존성을 해결하였습니다. (Presenter를 통해서만 데이터를 전달 받기 때문에..)


5) 단점


MVC 패턴의 단점인 View와 Model 사이의 의존성은 해결되었지만, View와 Presenter 사이의 의존성이 높은 가지게 되는 단점이 있습니다. 어플리케이션이 복잡해 질 수록 View와 Presenter 사이의 의존성이 강해지는 단점이 있습니다.


3. MVVM


MVVM 패턴은 Model + View + View Model를 합친 용어입니다. Model과 View은 다른 패턴과 동일합니다. MVVM 패턴의 구조, 동작, 특징, 장점, 단점을 이야기하겠습니다.


1) 구조


MVVM
MVVM는 Model + View + View Model를 말합니다.






Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
View : 사용자에서 보여지는 UI 부분입니다.
View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.


2) 동작


MVVM 패턴의 동작 순서는 아래와 같습니다.


사용자의 Action들은 View를 통해 들어오게 됩니다.
View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.
View Model은 Model에게 데이터를 요청합니다.
Model은 View Model에게 요청받은 데이터를 응답합니다.
View Model은 응답 받은 데이터를 가공하여 저장합니다.
View는 View Model과 Data Binding하여 화면을 나타냅니다.


3) 특징
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.