MVC

언젠가 MVC에 대해 들은적이 있었다. Model View Control pattern 인데 내 기억으로는 소프트웨어 공학 할때 배웠던 패턴중 하나 였던거 같다.

Model과 View를 분리하고 이 사이의 중간다리 역할을 Control이 처리하는 형태였던걸로 이해 했었다. (=Controller pattern)

웹쪽 프로그래밍을 하다가 문득 최대한 html5 및 CSS3 그리고 MVC 3 를 이용해 프로젝트를 진행해 보자고 시작했던게 있었다. (이 시점에선 오래전에 완료한 프로젝트)

각 파일들은  *.html, *.css, *.js, *.jsp 의 형태로 이루어져 있었고, DB, HTML, CSS, JSP 모두 utf-8을 이용하였다.

- View
*.html에는 정말 순수하게도 기초적인 태그와 각 태그에 속하는 몇가지 속성들(name, class, id는 거의 안썼고 style은 아예 배제했다.)로 기본적인 틀(div와 table을 이용한)만 형성시켰다. *.html 에서는 팝업 및 특정 다이얼로그를 위한 템플릿 부분을 별도로 관리하여 일관성을 유지시켰다. (그래서 이 프로젝트에는 디버깅하는 경우를 제외하고는 alert()을 배제했다.)

*.css에는 위에 기술된 *.html 에서 필요한 부분에 형태와 색상등을 제공했다. 또한 이미지 사용을 최대한 줄이고 css로 처리 가능한 부분은 번거롭더라도 css로 처리를 수행했다.

- Control
*.js는 마찬가지로 특정 형태를 가지고 있었으며, 각 html에서 링크되었다. *.js에서는 태그나 클래스에 대해 이벤트를 제공하였으며, 이벤트의 처리는 ajax 기술을 이용하였다.

- Model
*.jsp에서는 서버측에서 처리해야 하는 모든 기능들을 담당하였으며, Data층과의 연결 및 Control 계층에 결과를 반환하는 기능을 수행하였다. 이 *.jsp 역시 별도로 만들어진 가벼운 프레임워크를 이용하여, 특정 형태를 가지도록 설계되었으며, 결과값은 모두 XML 문서로 Control 계층에 반환을 시켜준다.
(** jsp 라고 적었지만...  jsp, php, asp 같은거라도 상관은 없다. 핵심은 특정 규칙에 맞는 XML 문서로만 결과를 반환하면 된다)

- Data
Data계층에선 Model에서 요구하는 데이터들의 반환을 처리하였으며, DBMS로는 MSSQL이 이용되었다. Data 계층에 대한 처리는 75%정도를 저장 프로시저에서 처리하도록 작성되었다.


View 계층에서는 틀과 레이아웃을,
Control 계층에서는 사용자 이벤트 할당 및 동적컨텐츠에 대한 처리와 데이터의 연결을,
Model 계층에서는 서버단에서 처리할수 있는 기능을 수행하고 그 결과를 반환하는 기능을,
Data 계층에서는 실질적으로 가진 데이터를 규칙에 맞춰 가져오거나 저장하는 기능을

수행하는 구조였다.

View 부분은 설계시 class 속성 및 name 값에 대한 규칙 외 틀을 작성하는데 상당히 고심했던거 같다.

Control 계층은 사실 구조가 간단해야 하지만, 웹 에서의 동적 컨텐츠는 js(또는 그에 상충하는 스크립트) 에서만 구현이 가능하다는 특성이 있다. (빈즈 같은건 제외하고..) 그래서 공통되는 부분은 별도의 스크립트 파일로 묶어서 관리하였고, 이는 나중에 생산성 향상에 도움이 되었다.

Model 계층은 검색인자명을 통일화하여 코딩량을 줄이는데 고심했고, 별도의 XML 빌더를 작은 프레임워크에 담아서 이용하였다.

Data 계층에선 각 테이블간 제약조건들과 프로시저 내 조건문 등을 이용한 일괄처리를 이용하였으며, 이로 인해 Model 계층이 상당부분 가벼워졌다.


공통되는 사항으로는 범용적으로 사용될 수 있는 이름(ex. DB Field 와 Tag name 속성값) 및
기능들은 모두 별도로 분리하여 global.js나 global.css, template.html 같은 형태로 분리 하였다.

막상 쓰긴 했는데 뭔가 좀 어지럽네 -_-;;;

댓글

이 블로그의 인기 게시물

11점 풀 트래킹 달성

[빼먹은거 추가+] 바이브 무선킷 연결 끊김 문제

JQuery로 테이블 행(ROW) 복사 뜨기.