Back-End/JSP

[JSP] MVC 패턴, Front-Controller 패턴

챌링킴 2021. 7. 28. 10:00
반응형

1) MVC 패턴


1. [JSP 방식]

a.jsp --> b.jsp(처리) --> c.jsp
              ↑↓
               DB


- 각 페이지마다 필요시 자바코드가 스크립틀릿 내부에 작성되며 DB와 연결하는 코드도 JSP 파일 안에서 모두 작성된다.
- 분리되어 있지 않기 때문에 소규모 프로젝트에는 어울리지만 가독성이 떨어지고 분업과 유지보수가 좋지 않으므로
규모가 커지면 불편해진다.

 


2. [MVC Model1]

a.jsp --> b.jsp --> c.jsp
            ↑↓
        DAO, DTO
            ↑↓
             DB


- b.jsp에서 DAO의 메소드만 호출함으로써 자바코드가 존재하긴 한다.
- 하지만 선언은 분리되어 JAVA파일에 구현이 되어 있으므로 JSP 내의 JAVA코드의 양이 굉장히 줄어들게 된다.

- 하지만 페이지가 확장될수록 유지보수가 상대적으로 좋지 않다.

 


3. [MVC Model2]

a.jsp --> Controller(JAVA파일) --> c.jsp
                      ↑↓
                  DAO, DTO
                      ↑↓
                       DB


- a.jsp 에서 다음 페이지를 이동하기 전 필요한 기능, 처리 즉 비즈니스 로직을 완벽히 분리하여 관리한다.

 

 


2) Front-Controller 패턴

a.jsp --> web.xml --> Front-Controller --> c.jsp
                                   ↑↓
                       Controller(~~~Action)
                                   ↑↓
                               DAO, DTO
                                   ↑↓
                                    DB

 


 

- 개발자가 정의한 확장자(.me, .bo, .do, ...)를 페이지 이동 주소에 작성하게 되면

web.xml에 가서 어떤 서블릿으로 가야하는지 경로를 찾는다.


- 각 URL을 전부 web.xml에 하나씩 등록(매핑)해놓게 되면 코드가 길어지기 때문에

*.do 를 URL로 등록해 놓아서 .do가 붙은 모든 URI 요청을 하나의 경로로 보내주도록 설정해 놓는다.

이러한 경로를 프론트 컨트롤러 라고한다.

(가장 먼저 요청을 맞이하는 컨트롤러라서 프론트 컨트롤러)


- 이 프론트 컨트롤러는 .do 앞에 있는 요청명으로 어떤 로직을 수행할지 판단하고 분기처리를 한다.

 

- 프론트 컨트롤러 안에서 모든 비즈니스 로직을 구현해 놓게 되면 마찬가지로 코드가 길어지고 유지보수 및 재사용이 어렵기 때문에

요청별로 Controller(~~~Action)를 따로 만들어 놓는다.

 

- 해당 Action에 execute() 메소드를 만들어서 그 내부에 비즈니스 로직을 구현하면
프론트 컨트롤러 에서는 그 메소드를 호출만 하면 된다.


- 모든 ~~~Action에 execute() 메소드를 구현해야 하기 때문에 Action 인터페이스를 만들고

그 안에 추상메소드로 execute()를 선언해 놓으면 각 Action들 마다 그 인터페이스를 지정해준 후

재정의를 해서 구현할 수 있다.

 

- execute() 안에 비즈니스 로직을 구현할 때 DB에 접근하는 코드들이 사용된다.

 

- 따라서 DAO 안에 DB에 관련된 메소드들을 선언해 놓고 해당 Action 클래스 안의 execute() 에서는

그 메소드들을 적절히 호출하여 서비스(기능)를 구현한다.

 

- 즉 AAction과 BAction 둘 다 특정한 쿼리문 하나가 필요하다면 그 쿼리문에 관련된 (DB에 관련된) 코드들은 DAO의 메소드로 선언해 놓고 두 Action에서 그 메소드를 호출하여 조합하여 기능들을 구현해낸다.


- 비즈니스 로직이 모두 완료되면 "어떤 페이지로 이동할 것인지", "어떤 방식으로 이동할 것인지" 를 정해서

Front-Controller로 그대로 리턴한다.


- 이 값들을 담을 객체(ActionForward)를 만들어서 리턴을 해주고그 객체를 Front-Controller가 받아서

내부에 있는 세팅된 정보들로 알맞은 View와 방식으로 페이지 이동을 해준다.

- 위에서 설명한 것처럼 설계가 굉장히 복잡하기 때문에 대규모가 아닌 소규모 프로젝트에 반영했을 때에는

오히려 좋지 않은 결과를 초래한다. 따라서 맞는 목적으로 적절하게 선택하여 설계해야 한다.



반응형

'Back-End > JSP' 카테고리의 다른 글

[JSP] EL문과 JSTL  (0) 2021.07.26
[JSP] 쿠키(Cookie), 세션(session)  (0) 2021.07.21
[JSP] 자바빈즈란?  (0) 2021.07.20
[JSP] JSON 개요, 라이브러리 다운로드하기  (0) 2021.07.19
[JSP] Ajax와 XMLHttpRequest 객체  (0) 2021.07.19