Servlet
--HTML코드 출력 문제--> JSP
--스파게티 코드 문제--> [JSP MVC
] -> Spring MVC
-> SpringBoot
먼저, 우리가 코드 구조를 바꿔 온 흐름을 다시 살펴보자.
- Servlet을 통한 웹 프로그래밍
- 동적 페이지 구현을 위한 Servlet (HTML코드 출력 문제)
- Jasper를 이용한 jsp페이지로 동적 페이지 구현
- 코드 블럭을 이용한 복잡한 로직의 jsp페이지 (스파게티 코드 문제)
- JSP MVC model | Model, View, Controller로 분리
- model1 : 코드 블럭을 입력 코드 - 출력 코드로 분리해서 관리
- model2 : 입력 코드를 담당했던 부분을 jsp파일에서 떼어내 Controller라는 Servlet으로 관리
사실 Servlet만으로도 웹 프로그래밍이 가능하다. 그런데 코드 구조가 변해온 이유는 공통적으로
유지 보수 및 관리
때문이다.
혼자서 개발을 한다면 Servlet으로만 개발해도 크게 상관이 없지만, 협업이 필수인 개발 프로젝트에서는 조금 더 구조를 세분화해서 업무를 나누는 것이 필요하다.
이렇게 Servlet에서 비즈니스 로직을 담당하는 부분을 따로 분리하는 방식이다.
더 나아가서는 업무 서비스에서 DBMS에 접근하여 데이터를 가져오는 부분도 분리할 수 있다. 이 부분을
DAO (Data Access Object) 라고 부른다.
정리하면,
DAO를 통해 DBMS에 접근하여 데이터를 담은 객체를 만들고 (entity) , 이를 이용해 비즈니스 로직을
처리해서 출력 값을 담은 model을 만든 뒤, 이를 jsp파일에 출력해서 문서를 출력하는 방식
현재 작업 중인 프로젝트를 DAO를 service단과 합쳐서 개발해보겠다.
/notice/list에서 필요한 service 함수를 찾아보자.
이 화면을 보면 필요한 비즈니스 로직이
- 공지 리스트
1.1 그냥 공지 리스트 출력 ->getNoticeList()
1.2 페이지에 따른 공지 리스트 출력 ->getNoticeList(int page)
1.3 검색에 다른 공지 리스트 출력 ->getNoticeList(String field, String query, int page)
- 페이지 출력
2.1 전체 페이지 수 출력 ->getNoticeCount()
2.2 검색에 따른 전체 페이지 수 출력 0>getNoticeCount(String field, String query)
/notice/detail에서는
- 자체적인 Notice 객체에 대한 내용 출력 ->
getNotice(int id)
- 다음 / 이전의 notice 제목 출력 ->
getPrevNotice(int id)
/getNextNotice(int id)
가 존재한다.