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 |