MVC 모델에 대하여...
페이지 정보
작성자 서방님 댓글 2건 조회 160회 작성일 09-10-28 10:59본문
MVC 모델이란..
M은 Model(로직 구현, 데이터 베이스와의 연계 작업), V는 View(출력 화면), C는 Control(프로그램의 흐름 제어)을 말하는 것이니 웹 애플리케이션을 만들 때 각각의 역할에 따라 구분하여 프로그램 한다, 라는 뜻이 될 것이다.
작은 프로그램(특히 프로그래머가 화면 디자인까지 담당하는 경우)의 경우 하나의 jsp 페이지에 모든 것을 프로그램하는 경우가 많다.
그러나, 이 경우는 유지 보수 하는데 상당한 시간과 노력이 필요하게 된다.
또한 코딩한 내용이 웹 상에 거의 다 드러나므로 보안에 절대적으로 취약한 구조를 갖게 된다.
그런 이유 때문에 제시 되고 발달 되어온 방법이 MVC 모델이다.
MVC 모델은 아주 많은 방법이 개발 되어 있으나, 어떤 것이 옳다거나 좋다는 것은 없다고 할 수는 없지 않을까 한다.
프로그래머가 열 명이라면 로직도 열 개 나온다고 할 만큼 프로그램에 있어서 모두 다른 취향과 방법을 가지고 있는 만큼, 각각의 역할이 잘 구분되어 있고 유지 보수와 보안에 있어서 만족할만 하다면 각자 자기에게 잘 맞는 어떤 방법을 사용하여도 좋을 것이다.
위에서 얘기한 바를 흐름으로 점검해 보면 다음과 같을 것이다.
각각의 영역에서 파랗게 쓴 글들은 파일 이름에 포함 시켜 해당 파일이 어떤 역할을 하는지를 명확하게 하기 위해서 보편적으로 쓰이는 이름이며 보통은 그 이름으로 각각의 역할을 얘기하기도 한다.
0-0. 사용자로 부터 요청이 있어야 다른 과정이 연이어 일어나는 것이므로 요청 부터 시작한다.
브라우저에 도큐먼트가 출력되고(.jsp 또는 .html 로 작성된 페이지), 그 내용에 따라 사용자가 입력을 하거나 내용을 확인 후
(입력이 필요 없는 경우) 확인 버튼을 클릭 한다.
1. 브라우저로 부터 서버로 요청이 전해진다.
서버는 모든 요청을 Front Controller 로 넘긴다.
2. CONTROL(Front Controller)
Front Controller 는 요청과 프로그램 수행 결과를 분석하여 필요한 곳으로 제어권을 넘기는 역할을 한다.
2. 의 과정에서는 그림에 있는 것처럼 요청을 분석하여 제어를 어디로 넘길 것인가를 결정하고 그 제어권을 적절한 곳으로 넘
기는 일을 한다.
요청은 흐름도에서는 크게 로직의 구현이 필요한 경우와 아무런 작업 없이 새로운 도큐먼트를 출력 시키는 경우(데이터 입력
이 없는 경우)로 나눌 수 있겠다.
프로그램적인 관점에서 요청을 본다면 로직의 구현이 필요한 경우, DB와의 연계 작업이 필요한 경우와 그렇지 않은 경우로 크
게 나눌 수 있다.
그 이유는 DB와의 연계 작업이 필요한 경우, DB 와의 연결(DB Look Up, SQL 작성 및 실행으로 데이터 조작 등)된 작업으로
인해 프로그램 작성에 많은 차이가 나기 때문이다.
Front Controller 는 서블릿으로 구현한다.
서블릿으로 구현한다는 것은 Java 의 HttpServlet 패키지를 이용(임포트)하여 Request 객체에서 데이터를 가져 오고,
Request 객체에 데이터를 담는 등 java 를 jsp 페이지 내에서 스크립트릿을 사용하듯 코딩하는 것을 의미한다.
3. Front Controller 에서 분석한 결과에 따라 제어권은 DAO(Date Access Objects) 로 넘어 가던가 도큐먼트를 출력하는 쪽으로
넘어 가게 된다. 이때 어떤 작업이 필요한지에 대한 내용도 같이 보낸다.(의미적으로 그렇다는 것이고 실제로는 Front
Controller 에서 필요한 부분을 불러 수행 시킨다. 자바 파일이므로 new admin = DoAdmin(); admin.GetList(request,
reponse); 와 같은 방법으로 생성, 실행 시킨다 )
4. 제어권을 넘겨 받은 DAO(MODEL)에서는 요청 받은(request 객체의 데이터를 넘겨 받고 넘겨주기 위해 여기서도 HttpServlet
을 임포트 한다.) 작업 내용에 따라 작업을 한다.
그냥 하나의 메소드에서 작업을 해도 무관하나 DB와 연계된 작업을 하는 경우 보통은 작업의 효율성을 높이고 유지 보수를 쉽
게 하기 위해 DB 와의 연계를 필요로 하는 부분은 다른 메소드에서 처리한다.
DB와 연계 작업을 하는 경우엔 데이터를 DB로 부터 받아오는 메소드, DB에 저장하는 메소드를 사용 하는데(보통 setter(디비
에 저장 할 때), getter(디비에서 가져 올 때) 라고 부른다) DAO 파일에서 관리하는것 보다 DTO(Data Transfer Objects) 파일
을 따로 만들어 관리하는 것이 효율 적이다.
4-1. 디비와의 연계 작업을 한다.
5. 모든 작업이 끝나고 결과가 나오면 그 결과를 FrontController로 넘긴다.(3. 의 admin.GetList(request, reponse); 부분에서
reponse 인자에 결과를 담아 넘긴다)
6. DAO 에서 받은 결과를 response 인자에 담아 출력할 도큐먼트에 넘긴다.
7. 받은 결과에 따라 도큐먼트를 출력한다.
댓글목록
서방님님의 댓글
서방님 작성일
<p>MVC모델<br />Model은 객체나 Data의 가공을 책임지는 컴포넌트<br />View는 객체나 Data의 생성, 입력( User Action ), 출력( Display )을 책임 지는 컴포넌트<br />Control은 객체나 Data의 흐름을 책임지는 컴포넌트</p>
<p> </p>
<p>View<br />먼저 데이터( 객체 )의 입력과 출력을 담당하는 View는 필요에 따라 Model로부터 객체의 상태를 요청할 수 있고<br />응답 받은 상태에 따라 다른 출력 형식을 가지 수 있으며 Controller에게 전달 시 상태정보를 같이 보낼 수 있습니다.<br />여기서 중요한 것은 Model로부터 응답 받은 객체의 상태에 의해 View가 직접 제어, 가공을 하는일이 없도록 해야 합니다.<br />다시 말하면 View는 상태에 따라 출력형식만 다르게 가야하고 모든 제어나 가공은 Controller에게 위임을 해야 합니다.</p>
<p><br />Controller<br />객체 또는 데이터의 흐름을 책임지는 Controller는 활성화 된 View로부터 넘겨 받은 메시지(User Action) 또는 객체를<br />파악하여 해당 객체를 어떤 Model로 전달할지를 결정하고 필요한 객체를 데이터를 가공할 Model로 전달합니다.<br />기본 MVC 모델에서는 Model에서 Controller쪽으로 Event를 보낼 수 없도록 되어 있지만 구현참조가 아니라<br />인터페이스 참조일경우 Model에서 Controller쪽으로 Event를 보낸는것이 오히려 MVC 모델 흐름을 더욱 유연하게 만들기도 합니다.</p>
<p><br />Model<br />Model은 Controller로부터 전달받은 객체 또는 데이터를 Application의 Business Logic에 따라 가공, 처리하는 책임을<br />가지고 있으며 필요에 따라 View나 Controller에게 변경된 객체의 상태를 전달하게 됩니다.</p>