Web/Django

Django(장고) 이론 2 : MVT 패턴

James Kim_SST 2019. 6. 13. 13:50

3. 장고의 개발 방식과 MVT 패턴

 

  • 웹 개발 & 웹 서비스 개발 : 웹 애플리케이션 개발
  • 웹 사이트를 설계할 때 가장 먼저 해야 할일은 프로그램을 적당한 크기로 나누고 모듈화하는 것

웹 사이트 전체 프로그램 혹은 모듈화된 단위 프로그램을 애플리케이션 이라고 함 = 코딩할 대상

 

 

3.1 장고의 용어

  • 웹 사이트에 대한 전체 프로그램 : Project
  • 모듈화된 단위 프로그램 : Application

 

  • 3.2 장고의 개발 패턴
    • MVT ( Model - View - Template )
      • Model : DB에 저장되는 데이터
        • ex) 블로그 내용을 DB로부터 가져오고 저장,수정 등 기능
      • View : 프로그램 로직에 의한 결과를 Template에 전달하는 역할
        • ex) 버튼을 눌렀을 때 어떤 함수를 호출하고, 어떻게 데이터를 가공할지를 결정
      • Template : User UI
        • ex) 디자인, 테마를 적용해서 보여지는 페이지를 만듦

 

 

  • MVT 처리 과정 요약
    • 웹 클라이언트에게 요청 받으면 URLconf로 URL분석
    • 분석 결과를 해당 URL에 대한 처리를 담당할 뷰를 결정
    • 뷰는 자신의 로직을 실행하며 DB처리 필요하면 모델을 통해 처리하고 결과를 반환받음
    • 뷰의 로직 처리가 끝나면 템플릿을 사용해 클라이언트에 전송할 HTML 파일 생성
    • 뷰는 결과로 HTML을 클라이언트에 보내 응답함

 

 

  • 3.3 Model - DB 정의
    • 사용될 데이터에 대한 정의를 담고 있는 Django의 클래스
    • 장고는 ORM 기법을 사용해 Application에서 사용할 DB를 클래스로 매핑해 코딩할 수 있음.
      • 하나의 모델 클래스는 하나의 테이블에 매핑
      • 모델 클래스의 속성은 테이블의 컬럼에 매핑
    • ORM ( Object-Relational Mapping )
      • 객체 - RDB를 연결해주는 역할
      • DB 대신 객체를 사용해 데이터를 처리
      • 객체를 대상으로 필요한 작업을 실행하면 ORM이 자동으로 적절한 SQL 구문이나 DB API를 호출해서 처리해줌.

 

  • 3.4 URLconf - URL 정의
    • 클라이언트로부터 요청을 받으면, 장고는 가장먼저 요청에 들어있는 URL을 분석함
      • 요청에 들어있는 URL이 urls.py에 정의된 URL 패턴과 매칭이 되는지를 분석
    • URL 분석 순서
      • setting.py 파일의 ROOT_URL_CONF 항목을 읽어 최상위 URLconf(urls.py)의 위치를 알아냄.
      • URLconf를 로딩하여 urlpatterns 변수에 지정되어있는 URL 리스트 검사
      • 위부터 순서대로 URL 리스트 내용을 검사 후 URL 패턴이 매치되면 검사종료
      • 매치된 URL의 뷰를 호출. 이떄 뷰는 함수 또는 클래스의 메소드. (호출 시 HttpRequest 객체, 매칭할 때 추출된 단어들을 뷰에 인자로 넘겨줌)
      • URL 리스트 끝까지 검사했는데도 매칭에 실패하면 에러 처리하는 뷰를 호출

 

 

    • Path Converter 타입
      • str : /(슬래시)를 제외한 모든 문자열과 매치. 타입이 지정되지 않았다면 디폴트로 str를 사용.
      • int : () 또는 양의 정수와 매치. 매치된 정수는 파이썬의 int 타입으로 반환
      • slug : slug 형식의 문자열과 매치. ( ASCII, 숫자, 하이픈, 밑줄)
      • uuid : UUID 형식의 문자열과 매치. 매치된 문자열은 파이썬의 UUID 타입으로 변환
      • path : /(슬래시)를 포함한 모든 문자열과 매치. URL 패턴의 일부가 아니라 전체를 추출할때

 

    • URL 패턴에 정규표현식 사용하기.
      • URL를 세밀하게 표현하거나, 복잡한 URL를 표현할 수 있음.
      • 정규표현식에 사용되는 문자 (아래 표)

. ( Dot )

모든 문자 하나 ( Any Single Character )

^ (Caret)

문자열의 시작

$

문자열의 끝

[ ] 

[ ] 괄호에 있는 문자 하나.

   ex, [akz] -> a || k || z

[^ ]

[] 괄호에 있는 문자 외의 문자 하나.

   ex, [^ab] -> a 혹은 b를 제외한 문자 하나

*

0번 이상 반복, {0,}와 동일

+

1번 이상 반복, {0, 1}와 동일

?

0번 또는 1번 반복. {0, 1}과 동일

{n}

n번 반복

{m, n}

최소 m번에서 최대 n번까지 반복

|

A|B 라면 A 또는 B

[a-z]

a~z까지의 임의의 문자, 즉 영소문자 1개

\w

영문, 숫자 또는 언더바(_) 한 개, [0-9a-zA-Z_]와 동일

\d

숫자 한 개, [0-9]와 동일

 

  • 3.5 View - Logic 정의
    • 장고는 웹 요청에 있는 URL을 분석하고, 그 결과로 해당 URL에 매핑된 View를 호출함.
    • View : 웹 요청을 받아 DB 접속 등 해당 APP의 로직에 맞는 처리를 하고, 그 결과 Data를 HTML로 변환하기 위해 Template 처리를 한 후, 최종 HTML로 된 응답데이터를 웹 클라이언트로 반환하는 역할
    • 함수 또는 클래스의 메소드로 작성됨
    • 웹 요청을 받고 응답을 반환 ( 응답 : HTML, Redirection, 404 err, etc.. )
    • 다양한 형태의 응답 데이터를 만들어 내기위한 로직을 뷰에 작성함.
    • 보통 views.py 에 작성하지만, 다른 파일에 작성해도 무방. 파이썬 경로에 있는 파일이어야 장고가 찾을 수 있음.

 

  • 3.6 Template - 화면 UI 정의
    • 장고가 클라이언트에 반환하는 최종 응답 : HTML text
    • 장고는 자체 Template Engine을 갖고 있음. (디자이너도 쉽게 이해할 수 있는 문법 제공)
    • Template Tag/Filter 기능 사용해 python코드 직접 사용할 수 있음. ( 강력하고 확장하기 쉬운 구조)
    • *.html의 확장자를 갖는다. 템플릿 문법에 맞게 작성.
    • 적절한 디렉토리에 위치시켜야 함.
    • TEMPLATE_DIRS, INSTALLED_APPS에 지정된 앱의 디렉토리를 검색함. <- settings.py에 정의

 

  • 3.7 MVT 코딩 순서
    • 정해진 순서는 X
    • 독립적으로 개발할 수 있는 모델을 먼저 코딩, 뷰와 템플릿은 서로 영향을 주기에 모델 이후에 같이 코딩하는 것이 일반적
      • 프로젝트 뼈대 만들기 : 프로젝트 및 앱 개발에 필요한 디렉토리, 파일 생성
      • 모델 코딩 : 테이블 관련 사항을 개발(models.py, admin.py)
      • URLconf 코딩 : URL 및 뷰 매핑관계를 정의(urls.py)
      • Template 코딩 : 화면 UI 개발(templates/ 디렉토리 하위 *.html)
      • View 코딩 : Apllication Logic 개발(views.py)