[Django tutorial] 0. Django를 알아보자

이지연·2020년 8월 5일
0
  1. Django는 무엇인가?

웹 개발을 하는 데 처음부터 새롭게 만들지 않고 프레임워크라는 틀을 이용해 웹 개발에만 오로지 집중할 수 있게 하는 파이썬 웹 프레임워크입니다.

  • 장점: 보안이 우수하다, 유지보수가 편리하다, 편리한 웹 사이트를 신속하게 개발할 수 있다.
  1. Django의 기능을 알려주세요!
  1. Complete(완결성 있는)
  • Django는 "Batteries included" 의 철학을 기반으로 개발자들이 개발하고 싶은 거의 모든것을 개발하는데 도움을 줍니다
  • 일관된 디자인 룰을 적용하여 광범위한 최신 문서를 제공합니다.
  1. Versatile(다용도의)
  • Django는 문서관리시스템과 Wiki, sns, 뉴스에 이르기까지 다양한 종류의 웹 사이트를 빌드하는데 사용할 수 있고 사용되어 왔습니다.
  • 어떠한 클라이언트측 프레임워크와도 협업할 수 있고, 대부분의 형식(HTML, RSS 피드, JSON, XML 등)으로 컨텐츠를 전송할 수 있습니다.
  1. Secure(안전한)
  • Django 는 개발자들이 웹사이트를 개발할 때 실수하기 쉽지만 고려해야하는 보안 문제에 대해서 많은 도움을 줍니다.
  • 예를 들면, 장고는 유저의 계정과 비밀번호를 관리하는 안전한 방법을 제공합니다.개발자의 실수로 발생할 수 있는 비밀번호를 해시로 변경없이 저장하는 경우 등의 안전한 방법을 제공합니다.
  • Django 는 SQL 인젝션, 크로스사이트 스크립팅, 크로스사이트 요청 위조 그리고 클릭 하이젝킹 (이러한 공격 방법에 대한 상세 정보는 Website security에서 볼 수 있습니다)과 같은 보안 취약점을 보완할 방법 기본적으로 제공합니다.
  1. Scalable(확장성 있는)
  • 컴포넌트 기반의 shared-nothing 아키텍쳐를 사용합니다. 각각의 아키텍쳐가 독립적이어서 필요하다면 교체나 변경할 수 있도록 만들어줍니다.
  • 또한, 각 부분이 분명하게 분리될 경우 어떤 레벨이든지 하드웨어를 추가해서 발생하는 늘어난 트래픽에 대응해 크기를 변경할 수 있습니다.
  • 어떤 레벨은 예를 들어 캐싱 서버, 데이터베이스 서버, 혹은 어플리케이션 서버 등을 말합니다.

5.Maintainable(유지보수가 쉬운)

  • Django 코드는 유지보수가 쉽고 재사용하기 좋게끔 하는 디자인 원칙들과 패턴들을 이용하여 작성됩니다
  • Don't Repeat Yourself (DRY) 원칙을 적용해서 불필요한 중복이 없고 많은 양의 코드를 줄였습니다
  • Django는 관련된 기능들을 재사용 가능한 "applications"로 그룹화했고, 더 낮은 레벨에서 관련된 코드들을 모듈로 만들었습니다.
  • Model View Controller (MVC) 패턴과 유사

6.Portable(포터블한)

  • 장고는 파이썬으로 작성되어 있습니다. 파이썬은 많은 플랫폼을 작동합니다. 그래서 특정 서버 플랫폼에 얽매이지 않아 다양한 운영체제에서 작동할 수 있다는 장점을 갖고 있습니다.
  • 더 나아가 장고는 많은 웹 호스팅 공급자들에 의해서 지원이 되어 장고 사이트의 호스팅과 관련해서 특정한 인프라와 문서를 제공합니다.

*최근 몇년전에 무엇보다 새로운 유형의 데이터베이스, 템플릿 엔진들 그리고 캐싱에 대한 지원에서부터 일반 보기 함수와 클래스들의 추가까지 수정을 했습니다. 여러 프로그래밍 작업을 위해 개발자들이 작성해야 할 코드를 줄여줍니다.

  1. Django는 독선적인가?

네, 말하자면, 독선적편입니다. 하지만 다른 많은 웹 프레임워크들도 마찬가지로 독선적 혹은 관용적이라고 합니다.
먼저, 독선적인 프레임워크들은 어떤 특정 작업을 다루는 올바른 방법, 정해진 루트에 대한 분명한 의견을 갖고 있는데, 대부분이 특정 도메인내에서 빠른 개발방법을 제시하는 것들입니다. 즉, 잘 알려져 있는 문서화가 있다는 것을 의미합니다.

반면에,관용적인 프레임워크들은 구성요소를 한데 붙여서 해결해야 한다거나 어떤 컴퍼넌트를 써야한다는 올바른 방법에 대한 제약이 거의 없다고 보면 됩니다. 개발자들이 특정 작업을 완수하는 데 가장 적절한 도구들을 이용하기 쉽게 만들어줍니다.

하지만, Django는 양쪽 세계의 최선의 결과를 전달하기 때문에 인기가 많다고 생각합니다.

  1. Django의 코드는 어떻게 생겼나요?

Django 웹 어플리케이션은 전형적으로 아래와 같이 분류된 파일들에 대해 일련의 단계를 수행하는 코드로 구성되어 있습니다. 장고는 모델 뷰 템플릿(Model View Template)(MVT) 아키텍처라고 부릅니다.

  • URLs

-- 단일 함수를 통해 모든 URL 요청을 처리하는 것이 가능하지만, 분리된 뷰 함수를 작성하는 것이 각각의 리소스를 유지보수하기 훨씬 쉽습니다.

-- URL mapper는 요청 URL을 기준으로 HTTP 요청을 적절한 뷰(view)로 보내주기 위해 사용됩니다

-- URL mapper는 URL에 나타나는 특정한 문자열이나 숫자의 패턴을 일치시켜 데이터로서 뷰 함수에 전달할 수 있습니다

  • View

-- HTTP 요청을 수신하고 HTTP 응답을 반환하는 요청 처리 함수
-- Model을 통해 요청을 충족시키는데 필요한 데이터에 접근
-- 탬플릿에게 응답의 서식 설정을 맡깁니다.

  • Templates

-- 탬플릿은 파일의 구조나 레이아웃을 정의하고(예: HTML 페이지), 실제 내용을 보여주는 데 사용되는 플레이스홀더를 가진 텍스트 파일
-- 뷰는 HTML 탬플릿을 이용하여 동적으로 HTML 페이지를 만들고 모델에서 가져온 데이터로 채웁니다
-- 탬플릿으로 모든 파일의 구조를 정의할 수 있습니다.탬플릿이 꼭 HTML 타입일 필요는 없습니다

Q. 그런데 MVC패턴과 유사하지 않나요? JAVA가 MVC패턴인데, Controller와 Templates만 다른데 도대체 무슨 차이일까요?

사실상 크게 보면 MVC패턴과 MTV패턴 큰 차이는 없습니다. MVC패턴의 어떤 문제점을 개선하기 위해 MVT패턴을 만들었습니다. 이 두가지 패턴은 어떤 상호 작용을 하고 있는지에 대해 주목해야 합니다.

<MVC패턴>

<MVT패턴>

표로 이 두 패턴의 차이점을 정리해보았습니다.

각각의 내용들을 미리 맛을 봐보자!

1) 요청을 알맞은 뷰로 전달 (urls.py)

  • URL mapper는 보통 urls.py라는 이름의 파일에 저장되어 있습니다.

2) 요청 처리하기 (views.py)

  • 뷰들은 웹 클라이언트로부터 HTTP 요청을 수신하고 HTTP 응답을 되돌려주는 웹 어플리케이션의 심장입니다.
  • 그 사이에 그들은 데이터베이스에 접근하고 템플릿을 렌더링하기 위해 프레임워크읟 다른 자원들을 정리합니다.

3) 데이터 모델 정의하기 (models.py)

  • 장고 웹 어플리케이션은 모델(models)이라는 파이썬 객체를 통해 데이터를 관리하고 쿼리합니다
  • 모델은 필드 타입과 그들의 최대 크기, 기본 값들, 선택 목록 옵션, 문서의 도움말 텍스트, 폼(form)을 위한 labe text등을 포함하여 저장된 데이터의 구조를 정의합니다.
  • 모델의 정의는 기본 데이터베이스와 별개입니다. 본인의 프로젝트 설정의 일부로써 여러 모델 중 하나를 선택할 수 있습니다. 본인이 사용할 데이터베이스를 정했다면, 그것에 직접적으로 접근할 필요가 없습니다. 그저 모델 구조와 다른 코드들을 작성하면, 장고가 당신과 데이터베이스가 소통하는 데 필요한 모든 더러운 작업들을 처리합니다.

4) 데이터 쿼리하기 (views.py)

  • 장고 모델은 데이터베이스를 간단히 탐색하기 위한 쿼리 API를 제공합니다. 이 API는 다양한 조건을 통해 수 많은 필드를 빠르게 매칭시킵니다. (예를 들어, 정확하게 일치(exact), 대소문자 구분없이(case-insensitive), 해당 숫자보다 큰(greater than) 등이 있습니다.)
  • 복잡한 쿼리문을 지원합니다. 예를 들어, 당신은 팀의 이름이 "Fr"로 시작하거나 "al"로 끝나는 U11 레벨의 팀만을 지정할 수 있습니다.

5) 데이터 렌더링 (HTML 템플릿)

  • 템플릿 시스템을 사용하면 페이지가 생성될 때 채워질 데이터에 자리 표시자를 사용하여 출력 문서의 구조를 지정할 수 있습니다.
  • 템플릿은 종종 HTML을 만드는 데 사용되지만 다른 유형의 문서를 만들 수도 있습니다.
  • 장고는 기본 템플릿 시스템과 Jinja2라는 인기있는 파이썬 라이브러리를 모두 지원합니다 (필요한 경우 다른 시스템을 지원하도록 만들 수도 있음)

그 이외에는 추가로 장고가 제공하는 기능들은 많습니다.
양식, 사용자인증 및 권한, 캐싱, 관리 사이트, 데이터 직렬화 입니다.

  • 양식 : HTML 양식은 서버에서 처리할 사용자 데이터를 수집하는 데 사용됩니다. 장고는 양식 작성, 유효성 검사 및 처리를 단순화합니다.
    사용자 인증 및 권한 : 장고에는 보안을 염두에 두고 구축된 강력한 사용자 인증 및 권한 시스템이 포함되어 있습니다.

  • 캐싱 : 컨텐츠를 동적으로 작성하는 것은 정적 컨텐츠를 제공하는 것 보다 많은 연산을 필요로 하기 때문에 느립니다. 장고는 유연한 캐싱을 제공하여 렌더링된 페이지 전체 또는 일부를 저장하여 필요할 때를 제외하고 다시 렌더링하지 않도록 할 수 있습니다.

  • 관리 사이트 : 기본 스켈레톤을 사용하여 앱을 만들 때 장고 관리 사이트가 기본적으로 포함됩니다. 사이트 관리자가 사이트의 모든 데이터 모델을 작성, 편집 및 볼 수있는 관리 페이지를 쉽게 제공할 수 있습니다.

  • 데이터 직렬화 : 장고를 사용하면 데이터를 XML 또는 JSON으로 직렬화하고 제공할 수 있습니다. 이 기능은 웹 서비스 (다른 응용 프로그램이나 사이트에서 사용하기 위해 순수하게 데이터를 제공하고 자체를 표시하지 않는 웹 사이트)를 만들거나 클라이언트 쪽 코드가 모든 데이터 렝더링을 처리하는 웹 사이트를 만들 때 유용할 수 있습니다.

profile
Everyday STEP BY STEP

0개의 댓글