Django를 찾아보면 다음과 같은 문장을 찾아볼 수 있다.
Django는 2005년부터 시작된 python의 오픈소스 웹 프레임워크이자 풀스택 프레임워크이다.
Framework를 직역하면 "어떤 것을 뼈대로 가지고(frame) 일한다(work)" 라고 풀이할 수 있는데 즉, 어떠한 틀을 가지고 결과물을 만드는 행위라는 것이다.
이것을 구체화해서 소프트웨어에서의 Framework는 다음과 같이 불릴 수 있다.
Framework: 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
이러한 내용을 종합했을 때 장고는 "웹 프로그래밍을 개발할 때 필요한 내용들을 정형화하여 메뉴얼로 제공하는 파이썬 기반의 프로그램, Framework" 정도로 생각하면 된다.
쉽게 말해 자바의 스프링, 루비의 RubyOnRails처럼 Django를 파이썬의 Django라고 이해하면 된다.
여담으로 Framework와 Library는 엄연히 다른 개념이다. 두 개 다 프로그램의 생산성을 높여준다는 공통점을 가지고 있으나 다음과 같은 차이점이 존재한다.
Framework: 애플리케이션의 흐름을 Framework 자체가 주도하여 제어
Library: 사용자가 주도하여 전체적인 흐름을 제어
Django를 사용하다보면 "정해진 위치에 코드를 넣는다" 는 느낌이 들 때가 많다. 즉, Framework가 동작흐름을 제어한다는 것이다.
하지만 대표적인 라이브러리인 React를 사용할 때를 생각해보면 개발자는 단지 라이브러리에서 함수를 꺼내 쓸 뿐, 다른 제약은 받지 않는다.
한마디로 Framework와 Library의 차이는 "어플리케이션의 흐름을 개발자가 가져가냐 아니냐" 정도로 생각하면 된다.
Django에 대한 소개를 할 때 Framework라는 점을 강조해서 설명을 했었다. 그 이유가 바로 Django는 MTV패턴이라는 디자인패턴 안에서 설계가 이루어지기 때문이다.
디자인패턴은 효율적으로 코드를 작성하기 위한 코딩 규칙 혹은 프로젝트 구조 정도로 생각하면 되며 이 게시글에서는 Django에 대해서 다루기 때문에 이에 대한 자세한 내용은 추후에 다뤄볼 예정이다.
MTV패턴이란 다음을 의미한다.
Model(모델),Template(템플릿),View(뷰)로MVC패턴에 대응되는 장고의 디자인 패턴
MTV패턴을 설명하는데 MVC패턴은 또 뭔가 싶을 수도 있지만 사실 MTV는 MVC와 이름만 다를 뿐 의미는 거의 흡사한 개념이다. 보통의 많은 백엔드 프레임워크는 MVC패턴을 사용하고 있다.
MVC패턴을 프로그램을 크게 Model, View, Controller 3가지 구성요소로 나누어 관리하게 된다.
-
Model: DB와 상호작용하는 부분
-View: 사용자들의 눈에 보이는 부분(사용자와 상호작용하는 부분)
-Controller: 웹서비스 내부의 동작 논리를 담당하는 부분
각각의 요소들이 고유한 역할을 하기 때문에 유지보수를 할 때 필요한 부분 이외에 변경해야 되는 내용이 최소화, 즉 유지보수에 용이하다는 장점을 가지고 있다.
위와 내용을 MTV패턴에 적용하면 다음과 같다.
-
Model: DB와 상호작용하는 부분
-Template: 사용자들의 눈에 보이는 부분(사용자와 상호작용하는 부분)
-View: 웹서비스 내부의 동작 논리를 담당하는 부분
많은 사람들이 MVC의 View와 MTV의 View를 헷갈려하곤 한다.
사실 장고를 다루다보면 우리는 대부분의 로직을 views.py에서 처리하기 때문에 자연스레 머리에 박히겠지만 장고에 대해서 모르는 사람들은 "뭔소리?? view가 왜 논리를 다루지?"라고 생각하기 쉽다.
중요한 내용은 아니지만 그래도 장고를 배운다면 숙지하고 있어야 되는 내용이라고 생각한다.

이 그림이 장고의 작동원리를 간략하게 잘 축약하였다고 생각한다. 각각의 역할에 대한 풀이를 하면 다음과 같다.
Client: 서버로 url을 통해 요청request을 보내고 그에 대한 응답response을 받는다.
URLconf:Client에서 받은 url에 대해 서버에서 작동할view를 매치시켜준다.
View: 클라이언트에서 받은 요청과Model에 저장된 정보를 이용하여 특정 동작을 수행하고 결과를 반환한다. (Template을 사용할 경우Template을 Rendering)
Model:View에서 이루어질 특정 동작에 필요한 데이터를 제공하거나 저장한다.
Template:Client에게 보여지는 화면에 대한 정보를 가지고 있다.
*Model의 하나하나는 DB상에 하나의 테이블로 존재하게 된다.
django는 MTV패턴을 이용한 웹프레임워크이다.MTV패턴이란 Model, Template, View로 나뉘어진 디자인 패턴을 의미Model은 데이터 (DB)Template은 사용자 인터페이스View 는 내부 논리