2011. 5. 25. 11:01
Google App Engine의 Template (MVC 패턴)
2011. 5. 25. 11:01 in Google App Engine
위키피디아에서 정의된 MVC는 다음과 같습니다.
모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
최근의 많은 웹 애플리케이션 개발시 보편적으로 사용되는 논리입니다. Ruby on Rails나 Spring 같은 것도 포함됩니다.
- 컨트롤러 (Controller)
결정을 내리거나 고려하는 일을 하는 로직에 관한 부분 - 뷰 (View)
HTML, CSS 등 보여지는(Look and Feel) 것을 처리하는 부분 - 모델 (Model)
데이터 저장소에 저장된 영속성 데이터
Google App Engine의 index.py같은 handler등은 컨트롤러에 해당되며, Template의 HTML 코드는 뷰가 됩니다. 그리고, GQL을 이용한 DB는 모델에 해당됩니다.
우선,
hander에서,
와 같이 구성됩니다.
그리고, _templ.htm에서,
[html] ... 정형화된 부분 [body] ... 정형화된 부분 {% block data_list %} Replace {% endblock} [/body] [/html]
와 같이 구성합니다. (<>대신에 []로 표기했습니다.)
이러한 template html에서 보듯이, 일반적으로 웹 페이지는 극히 일부분을 제외하고는 거의 같다는 가정에서 출발한 것입니다. 즉, a.htm / b.htm을 diff 해봤을때 90%정도 일치한다면, 나머지 10%를 위해 서로 copy & paste하는 것은 문제가 있다는 것입니다. 그래서, 일치하는 90%를 따로 _templ.htm으로 이관하고, 각각 나머지 10%를 a.htm, b.htm으로 정의하면 보다 작업이 수월할 것입니다.
그럼 해당 부분을 사용하는 부분은 다름과 같습니다.
(어떻게 생각해 보면, C/C++에서 #include 하는 것과 비슷한 논리죠)
{% extends "_templ.htm" %} {% block data_list %} [ul] [li]first[/li] [li]second[/li] [/ul] {% endblock %}
와 같이 정의합니다. 그러면, _templ.htm의 data_list 부분이 replace되어 표현됩니다.
그리고 python에서 template.render(temp, { 'name' : 'val'})과 같이 전달하면, _templ.htm에서 값을 받아 볼 수 있습니다. 즉, {% ifequal name 'greenfish' %}와 같이 정의된다면, 해당 값이 'greenfish' 일때 replace됩니다.
'Google App Engine' 카테고리의 다른 글
Google App Engine에서 한글 사용 (1) | 2011.05.19 |
---|---|
Google App Engine 시작 하기 (python) (10) | 2011.05.19 |
proxy 환경에서 eclipse proxy 설정하기 (0) | 2011.05.17 |