티스토리 뷰
굉장히 오랜만에 포스팅을 하는 거 같다. 세미프로젝트를 준비하느라 바쁘기도 했고, 정신적으로도 좀 많이 힘들어서 여유가 생기질 않았다.
아무튼, 이번 포스팅은 MVC 패턴에 대한 포스팅이다.
그 동안 나는 MVC 패턴이 JSP => Servlet => DAO or DTO(VO) 순으로 request에 따라 실행되는 것으로만 알고, 프로젝트도 이러한 기법으로 진행하고 있었지만, 실은 그게 아니었다...
정확히는 위 과정이 맞긴하나, 이렇게 프로젝트를 구성하다보면
이와 같이 Controller가 미쳐 날뛰는 경우가 생긴다...(이런 관점에선 이 프로젝트는 이미 글러먹었다...ㅎ)
이 경우는 Servlet이 너무 많아서 애초에 코딩을 하기가 좀 빡세기 때문에 Servlet을 나누는 것이 아닌, Action이라는 이름의 인터페이스를 구성하고, 해당 인터페이스를 구현받는 일반 클래스를 생성하여 DAO를 제어하는 것이 좀 더 알맞는 의미의 MVC 패턴이라고 할 수 있다.
즉, Action 인터페이스와 이를 제어할 ActionFactory 클래스를 다음과 같이 구성해야한다.
◎Action.java (interface)
package com.choonham.controller.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
◎ActionFactory.java
package com.choonham.controller;
import com.choonham.controller.action.Action;
import com.choonham.controller.action.BoardListAction;
public class ActionFactory {
private static ActionFactory instance = null;
public ActionFactory() {
}
public static ActionFactory getInstance() {
if(instance == null) {
instance = new ActionFactory();
}
return instance;
}
public Action getAction(String command) {
Action action = null;
System.out.print(command);
if(command.equals("board_list")) {
System.out.print("요청사항에 대한 객체 생성 ~");
action = new BoardListAction();
}
return action;
}
}
사실상 위 두개의 객체가 cotroller의 전부이다. 즉, ActionFactory에서 getAction 메서드가 command 값을 인자로 받아 Action 인터페이스를 구현 받은 action 클래스들 중 알맞은 기능을 가진 Action을 호출하여 각 기능을 수행할 수 있게끔 해주는 것이다.
위 방법을 사용하면, 굳이 복잡한 servlet을 많이 생성하지 않고, 자바의 일반 클래스로 생성하여 동작을 전부 구현해줄 수 있다.
패키지 구성을 보면 좀 더 이해가 빠를 것이다.
action 패키지 안에 구성해놓은 것이 전부 command 인자에 따라 호출되는 클래스들이다.
전체적인 로직은 이와 같으며, 이후에 이 패턴을 사용한 예제를 하나 포스팅할 예정이다.
'WEB > DynamicWeb' 카테고리의 다른 글
[Web] <a> 태그를 이용한 File Download (0) | 2021.06.01 |
---|---|
[Web] MVC 패턴 예제 <비밀번호를 사용하는 게시판> (0) | 2021.05.31 |
[Web] file Upload Form & Method 사용 (0) | 2021.05.11 |
[Web] 종합 활용 예제 <회원 가입> (0) | 2021.04.30 |
[Web] DAO, DTO, Servlet 활용 예제 <회원 관리> (0) | 2021.04.28 |
- Promise
- 정보보안기사 #실기 #정리
- 파니노구스토
- await
- redux
- javascript
- redux-thunk
- AsyncStorage
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- 인천 구월동 맛집
- react-native
- Async
- 맛집
- react
- Total
- Today
- Yesterday