파이썬 기반으로 만들어진 서버사이드 웹 프레임워크로, 빠른 개발 속도와 실용성을 추구한다.
2005년 발표된 이후 안정성과 기능이 검증되었고, 업데이트 및 커뮤니티 활동이 활발하다.
Django의 철학
"Batteries included" 철학을 기반으로 빠른 개발 속도를 추구한다.
"Don't Repeat Yoursel" 원칙을 적용해서 불필요한 중복이 없고 그룹화된 "applications"는 재사용이 가능하다.
대부분의 형식(HTML, RSS, JSON, XML 등)으로 전송이 가능하며 다양한 종류의 웹사이트 빌드가 가능하다.
SQL 인젝션부터 클릭 하이젝킹같은 여러 보안 취약점을 보완할 기능을 제공한다.
리눅스, 윈도우, 맥 OS 등 많은 플랫폼에서 작동하는 파이썬으로 작성되었다.
Django의 기술적 특징
MVT 패턴을 사용한다. (MVC 디자인 패턴과 같은 개념)
강력한 ORM 기능을 지원한다. (SQL 쿼리문 없이 DB 조작 가능)
자체적인 템플릿을 지원한다. (동적인 페이지 구현)
코드의 변경 사항을 자동으로 반영한다. (수동으로 웹 서버 재시작 불필요)
Django를 사용하는 웹사이트
Flask?
파이썬 웹 프레임워크
Micro Framework 철학으로 최소한의 기능만 지원한다.
프레임워크 틀에 얽매이지 않는 높은 자유도를 지원한다.
디자인 패턴 중 하나로 프로젝트 구성요소를 모델, 뷰, 컨트롤러 세가지 역할에 따라 구분한다.
Model - 데이터와 데이터를 처리하는 로직을 가지고 있다.
View - 요청에 대한 결과물을 화면에 보여준다.
Controller - Model과 View를 이어주는 역할을 한다.
작동 순서 : 유저의 요청 → 컨트롤러 → 모델 (데이터 처리) → 컨트롤러 → 뷰 → 유저
MVC 패턴은 구성요소가 분리되어 유지보수성, 확장성, 유연성이 증가한다.
→ 구글의 Angular JS, 파이썬의 Django, 페이스북의 React 등
프로젝트 규모가 커지면 컨트롤러가 비대화되고 모델과 뷰의 의존성을 완벽히 분리할 수 없다.
→ 이를 보완한 디자인 패턴으로 MVP, MVVM 등이 있다.
MVC 패턴을 기반으로한 Django의 디자인 패턴 (view끼리 역할이 다르다.)
Model - 클래스로 정의되며 하나의 클래스가 하나의 DB 테이블이다.
→ 데이터 조작을 위한 ORM 기능을 지원한다.
View - MVC의 Controller에 대응하며 요청에 따른 로직을 수행하고 결과를 렌더링하며 응답한다.
→ 렌더링하지 않고 데이터만 주고 받는 경우도 있다.
Template - MVC의 View에 대응하며 처리결과를 유저에게 보여준다. (HTML)
추가로 유저와 View 사이에는 URLconf(URL 설계)라는 단계가 있다.
URL 패턴을 정의하여 해당 URL과 View를 매핑한다. (path 함수 이용)
순서 예시
유저 요청 → URLconf로 해당 URL과 매핑된 뷰를 호출 → 뷰는 요청에 따라 로직을 처리하고 모델에게 CRUD를 지시 → 모델은 ORM을 통해 DB와 소통하며 CRUD를 수행 → 뷰는 템플릿을 렌더링하여 유저에게 응답
Object Relational Mapping
객체와 관계형 DB를 매핑해주는 개념
Django의 ORM은 파이썬 코드를 SQL 쿼리로 변환시켜 주어서 DB를 조작할 수 있다.
ORM의 장점
ORM의 단점
Web Client : 사용자에게 UI 화면을 제공하는 브라우저. (IE/Chrome/Firfox 등)
Web Server : HTTP 프로토콜을 기반으로 브라우저의 요청에 응답. (Apache, IIS, Nginx 등)
Web Application : 웹 페이지의 동적인 응답을 구현한다. 정적인 응답은 Web Server로 충분.
브라우저의 요청을 web server로부터 받아들이고,
필요한 작업을 DB에 접근하여 조작한 다음,
데이터와 HTML 템플릿을 결합하여
다시 응답을 보낸다.
Django application (Backend API)
URLconf : HTTP 요청을 분석한다.
View : 요청에 따른 로직을 실행한다.
Model : 데이터베이스와 통신한다.
딱히 정해진 순서는 없지만 기본적인 순서는 아래와 같다.
프로젝트 세팅 : 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성
모델 만들기 : 테이블 관련 사항을 개발(models.py, admin.py 파일)
URLconf 만들기 : URL 및 뷰 매핑 관계를 정의 (urls.py 파일)
뷰 만들기 : 어플리케이션 로직 개발 (views.py 파일)
템플릿 만들기 : 화면 UI 개발 (templates/디렉토리 하위의 *.html 파일들)