프레임워크는 뼈대나 기반구조를 뜻한다. 프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같이 어느 정도의 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하는 것이다.
라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이다. 프로그래머가 어떠한 기능을 수행하기 위해서 도움을 주는 또는 필요한 것을 제공해주는 역할을 한다. 간단히 정리를 하자면 프로그램 기능 수행을 위해 활용 가능한 도구의 집합이다.
프레임워크는 전체적인 흐름을 자체적으로 가지고 있으며, 프로그래머가 그 안에 필요한 코드를 작성하는 반면에 라이브러리는 사용자가 흐름에 대해 제어를 하며 필요한 상황에 가져다 쓴다. 즉 Framework와 Library의 차이는 Flow(흐름)에 대한 제어 권한이 어디에 있느냐의 차이이다.
대체적으로 프레임 워크는 MVC 모델이 잘 알려져 있지만 django는 MVT 패턴이다. 각각의 역할은 아래와 같다.
Model: 안전하게 데이터를 저장
View: 데이터를 적절하게 유저에게 보여줌
Template: 사용자의 입려과 이벤트에 반응하여 Model과 View를 업데이트
과거 웹사이트는 데이터베이스 쿼리, 디자인 등의 각각 다른 부분을 담당하는 다양한 코드들이 하나의 파일에서 관리되었지만 장고는 이러한 역할을 나뉘어 MVT 패턴으로 개발할 수 있는 환경을 만들어 주는 역할을 한다.
상위 사진의 초록색 부분이 간단하게 분류했을 때 초록색 부분이 django의 역할이다. web browser에서 요청이 들어와 url dispatcher를 통해 요청된 url을 분석하고 그것에 적합한 view로 전달하여 view는 유저가 요구한 데이터베이스 정보를 model에게 알려준다. 요구된 데이터 베이스를 받은 model은 database 와 소통하여 데이터를 받아온다. model은 받아온 데이터를 다시 view에 데이터를 전송하고 view가 template에 전달하여 template는 html 파일 로직을 다듬어서 유저에게 보여준다.
상위 사진은 좀더 상세하게 표현된 Django의 구동방식이다.
-WSGI(Web server gateway interface) : 장고와 웹서버를 연결해 주는 역할이다
-URL Resoluion: 정규 표현식으로 구성. 그에 맞는 특정한 View로 전달(python 코드로 이뤄 저 있다.)한다.
VIEW : python 코드를 가장 많이 작성하는 부분이고 request에 따른 데이터의 처리를 결정하고, MODEL에 신호를 보냄. 또한, MODEL에서 받은 정보를 가공하기도 함. 웹페이지나 콘텐츠들은 VIEW를 통해 전달된다.
-MODEL : DB에서 데이터를 가지고 오고, 그 데이터를 각각의 클래스에 넣는다.(변수만 지정하면 DB와 연결됨) SQL 문을 작성할 필요는 없다.
TEMPLATE : UI 작업이 이루어지는 곳으로, VIEW에서 받은 정보를 HTML 등으로 가공하는 로직이 들어가 있다.