Django
Django란 무엇일까
Django는 Python기반의 오픈소스 웹 애플리케이션 프레임워크이다. 쉽게 말하면, 웹 사이트를 Python기반으로 구축하기 위해서 필요한 여러 가지 도구들을 모아놓은 것이라고 할 수 있다. Java진영의 Spring과 같은 것이라고 생각하면 된다. Python에는 Flask라는 프레임워크도 있는데 Django는 Flask보다 기본적으로 조금 더 많은 기능을 처음부터 포함시켜 제공한다. Flask와 비교했을때 조금 더 무거운 만큼 기본적으로 제공해주는 기능이 많고 그에 따라 커스터마이징에는 비교적 제약이 따르는 프레임워크라고 할 수 있다.
MVC 패턴
Django는 MVC 패턴에 기반한 프레임워크이다. 엄연히 말하면 MTV 라고 할 수 있지만 구성된 방식은 기본적으로 MVC패턴과 결을 같이한다. 그렇다면 여기서 말하는 MVC패턴이란 뭘까?
MVC패턴은 Model-View-Controller로 구성되는 소프트웨어 디자인 패턴 중 하나이다. 소프트웨어 디자인 패턴에는 여러 가지 종류가 있는데 MVC패턴은 소프트웨어를 위 세 가지 요소로 나누어 구현하는 방법론이다. 비지니스 처리 로직과 사용자 인터페이스 요소를 분리하여 구현함으로써 서로 영향없이 개발을 할 수 있는 것이 장점이다. 그렇다면 각 부분은 어떤 역할을 담당하고 있는 것일까?
1. Model
애플리케이션이 무엇을 할 지 정의한다. 애플리케이션의 핵심이 되는 데이터가 존재하는 부분이며 우리가 화면에서 보는 데이터들의 구조는 Model에 정의되어 있다. 데이터베이스와 관련이 깊은 부분이 바로 Model 부분이다.
2. View
Model에 정의된 내용을 사용자에게 화면으로 보여주는 역할을 한다. 즉, 사용자가 직접 보게 되는 화면이 View에 해당한다. 웹 페이지나 모바일 어플리케이션의 화면과 같은 UI요소가 여기에 속한다고 할 수 있다. Model은 여러 개의 View를 가질 수 있다.
3. Controller
Model과 View를 연결시켜주는 역할을 한다. View에서 사용자에게 받은 요청에 대해 어떻게 처리할 지를 정의하여 정의한 내용을 토대로 처리하고 Model과 View를 업데이트하도록 요청하는 역할을 한다. 실질적으로 Model과 View사이에서 일어나는 상호작용을 담당한다고 볼 수 있다.
각 구성요소의 역할을 도식화하면 위 그림과 같다. MDN 공식 문서의 자료이다.
Django의 MTV 패턴
Django의 MTV패턴은 Model-Template-View로 나누어 애플리케이션을 구성하는 디자인 패턴이다. 각각의 요소는 MVC패턴에 대응되어 같은 역할을 한다고 보면 된다.
1. Model
MVC패턴의 Model에 대응된다. 데이터베이스를 정의하는 부분으로 생각하면 된다. Class로 작성되는데 하나의 Class가 하나의 DB 테이블을 나타낸다. django 프로젝트 생성 시에 model.py
로 존재하며 이 파일에 작성된 Class 구조를 바탕으로 django의 ORM을 통해 데이터베이스가 생성된다. (ORM은 따로 정리!!😄)
2. Template
MVC패턴의 View에 대응된다. View(django의 View)로부터 전달된 데이터로 웹페이지를 생성하는 역할을 한다. Template은 django template language로 작성된 html파일이며 View에서 로직을 처리한 후 넘어온 데이터와 함께 렌더링되어 최종적으로 사용자가 보는 화면이 만들어진다. 하지만, 요즘 웹 애플리케이션은 사용자가 보는 화면단을 react, vue 등 javascript프레임워크를 이용하여 별도로 만들기 때문에 상대적으로 커스터마이징이 제한적인 Template을 사용할 이유가 없을것 같다. 백오피스용 툴이나 간단한 웹 화면이 필요한 경우에는 빠른 개발을 위해 사용할 수도 있을것 같다.
3. View
MVC패턴의 Controller에 대응된다. MVC패턴의 View와 이름이 같아 헷갈릴 수 있지만 역할이 다르다. 즉, 필요한 테이터를 Model에서 가져와 적절히 가공하는 역할을 한다. django프로젝트 생성 시에 views.py
에 정의되며 각 함수(메소드)가 하나의 View를 정의한다.
django는 URLconf(URL configuration)를 통해 URL과 View를 매핑함으로써 요청받은 URL에 따라 수행할 동작을 결정한다. urls.py
파일에 URL을 정의하며 다음과 같은 순서로 URL을 분석한다.
클라이언트에서 서버에 페이지 요청 시 django는 다음과 같이 URL을 분석하여 요청된 페이지를 찾는다.
setting.py
파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf(urls.py
)의 위치를 알아낸다.- URLconf를 로딩하여
urlpatterns
변수에 들어있는 URL 리스트를 검사한다. - 순서대로 URL리스트 내용을 검사하면서 URL패턴이 매칭되면 검사를 종료한다.
- 매칭된 URL에 매핑된 View를 호출한다. 호출 시
HttpRequest
객체와 매칭할 때 추출된 단어들을 View에 인자로 넘긴다. - URL리스트를 끝까지 검사했는데도 매칭에 실패하면 에러를 처리하는 View를 호출한다.
정리
django의 MTV 패턴을 도식화하면 다음과 같다. 여러 이미지를 봤지만 이 도식이 이해하기 쉬웠다.
Reference
'TIL' 카테고리의 다른 글
[TIL] #16. ORM (0) | 2021.04.08 |
---|---|
[Project] Westagram #1 (0) | 2021.04.07 |
[TIL] #14. Framework vs Library (0) | 2021.03.28 |
[TIL] #13. __init__.py (0) | 2021.03.23 |
[TIL] #12. Absolute path & Relative path (0) | 2021.03.23 |