점점 미쳐가는 개발 일기

Django란? 본문

Back-end/Django

Django란?

Sangwoo Seo 2023. 1. 18. 14:48

Django란?

Django(이하 장고)는 python으로 작성된 오픈 소스 웹 프레임워크로, 모델-템플릿-뷰(MTV)패턴을 따르고 있습니다. (위키백과 링크)

 

장고를 설명하는데 두 가지가 핵심인데, 오픈 소스 웹 프레임워크와 모델-템플릿-뷰 패턴(이하 MTV 패턴)입니다.

 

오픈 소스 웹 프레임워크

오픈 소스 웹 프레임워크 = 오픈 소스 + 웹  프레임워크

 

오픈 소스는 오픈 소스 소프트웨어(open source software, OSS)를 뜻하는 용어로 누구나 사용, 수정, 배포가 가능하며 무료인 소프트웨어 입니다.

프레임워크(web framework, WF)동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종입니다. 웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것이 주 목적으로 통상 데이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 등의 기능을 포함하고 있습니다.(위키백과 링크)

 

MTV 패턴

MTV 패턴은 MVC(모델-뷰-컨트롤러) 패턴에 대응되는 장고의 고유한 디자인 패턴입니다. 

(* 디자인 패턴 : 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 해결 또는 방지하기 위한 표준화된 메뉴얼, 기능 별로 분리하여 상호의존성을 없애 개발 및 유지보수를 최적화)

대부분의 웹 프레임워크는 MVC 패턴을 채택하고 있는데, MVC 패턴은 애플리케이션을 세 가지 역할(모델, 뷰, 컨트롤러)로 구분한 개발 방법론입니다. 

각 역할에 대해 알아보면,

1. MVC 패턴[Ref. 4]

1. 모델(Model)

    - 애플리케이션이 가지고 있어야 할 데이터(또는 데이터베이스)를 정의합니다. 

 

2. 뷰(View)

    - 모델이 가지고있는 정보를 사용자에게 보여주는 부분(user interface, UI)을 정의합니다.

 

3. 컨트롤러(Controller)

    - 사용자가 뷰를 통해 이벤트를 발생시키면 처리하는 역할을 가집니다.

    - 모델과 뷰는 독립적이지만, 이 둘을 연결해주는 역할을 하는 것이 컨트롤러입니다.

 

MVC 패턴을 통해 웹 서비스 처리 과정을 요약하자면,

    사용자가 뷰를 통해 컨트롤러를 조작

    → 컨트롤러는 모델을 통해서 데이터 처리

    → 처리된 데이터를 컨트롤러가 다시 뷰에게 전달

    → 뷰를 통해 사용자에게 시각적으로 정보를 전달합니다.

 

장고는 MVC 패턴과 유사한 MTV 패턴을 채택하는데, MVC 패턴과 다르게 어플리케이션의 세 역할을 모델, 템플릿, 뷰로 구분한 개발 방법입니다.

2. MVT 패턴[Ref. 7]

1. 모델(Model)

    - 애플리케이션이 가지고 있어야 할 데이터(또는 데이터베이스)를 정의합니다. 

    - MVC 패턴의 모델과 대응됩니다.

 

2. 템플릿(Template)

    - 모델이 가지고있는 정보를 사용자에게 보여주는 부분(user interface, UI)을 정의합니다.

    - MVC 패턴의 뷰와 대응됩니다.

 

3. 뷰(View)

    - 사용자가 템플릿을 통해 이벤트를 발생시키면 처리하는 역할을 가집니다.

    - 모델과 템플릿은 독립적이지만, 이 둘을 연결해주는 역할을 하는 것이 뷰입니다.

    - MVC 패턴의 컨트롤러와 대응됩니다.

 

여기까진 다른 점이 존재하지 않는 것 같지만, 장고에는 URL 설계 부분이 존재합니다.

 

4. ULRconf

    - 요청 URL을 기준으로 HTTP 요청을 적절한 뷰로 보내주기 위해 사용합니다.

    - 즉, URL과 뷰를 매핑

 

URLconf가 존재하면 리소스를 유지보수하는데 용이하다는 장점이 존재합니다.

 

MTV 패턴을 통해 웹 서비스 처리 과정을 요약하자면,

    사용자로부터 요청을 받으면 URLconf를 이용하여 URL을 분석

    → URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정

     뷰는 자신의 로직을 실행하면서 만일 데이터 베이스 처리가 필요하면 모델을 통해 처리 후 결과를 반환

     뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 사용자에게 전송할 HTML 파일을 생성

    → 뷰는 최종 결과로 HTML 파일을 사용자에게 보내 응답

 

장고의 장점 [Ref. 6]

- Complete(완결성 있는)

: Batteries included 철학을 기반으로, 개발자들이 개발하고 싶은 거의 모든것을 개발하는데 도움을 줍니다. (Batteries included : 제공하는 것만으로도 모든 작업을 수행하는데 문제 없다는 의미)

 

- Versatile(다용도의)

: 다양한 종류의 웹 사이트를 빌드하는데 사용할 수 있고 사용되어 왔습니다. 또한 대부분의 형식(HTML, RSS 피드, JSON, XML 등)으로 컨텐츠를 전송할 수 있습니다.

 

- Secure(안전한)

: 개발자들이 웹사이트를 개발할 때 실수하기 쉽지만 고려해야하는 보안 문제에 대해 취약점을 보완할 방법 기본적으로 제공합니다.

 

- Scalable(확장성 있는)

: 컴포넌트 기반의 “shared-nothing” 아키텍쳐(각각의 아키텍쳐가 독립적이어서 필요하다면 교체 및 변경할 수 있는)를 사용합니다.

 

- Maintainable(유지보수가 쉬운)

: 유지보수가 쉽고 재사용하기 좋게끔 하는 디자인 원칙들과 패턴들을 이용하여 작성됩니다

 

- Portable(포터블한)

: 파이썬으로 작성되어 있으며, 파이썬은 많은 플랫폼에서 작동합니다. 특정한 서버 플랫폼에 얽매이지 않는다는 것을 의미하며, 리눅스, 윈도우 그리고 맥 OS 등 다양한 운영체제에서 작동할 수 있습니다.

 

# References

1. 오픈소스 정의 - RedHat

2. 오픈소스 정의 - AWS

3. 디자인 패턴의 정의 - inyong_pang

4. MVC 패턴 - 준꼬

5. MVC 패턴 - 왕초보개발자

6. Django 소개 - mdn web docs

7. MTV 패턴 - butter-shower

'Back-end > Django' 카테고리의 다른 글

Django 프로젝트 및 앱 구조  (0) 2023.01.26