69강 - 코드 분리를 위한 사전 설명
(기업형으로 레이어를 나누는 이유와 설명)
Servlet이라는 단일구조에서 ==> MVC코드 분리
Servlet(컨트롤러 역할): Model(데이터)을 가공해서 View로 전달
.jsp(View 역할): 컨트롤러에게 받은 Model을 화면에 출력해주는 역할
실제적인 기업에서는 웹 페이지를 제작할때 역할을 분담해서 한다. (분업화)
Controller : Servlet을 만든다. (ex. 사용자의 요청에 의한 Model을 가공해서 View로 출력)
업무서비스 : 트랜잭션을 만든다. (ex. 계좌이체를 처리하는 트랜잭션)
데이터서비스(DAO) : 실제로 데이터를 조작하는 작업을 한다.
70강 - 서비스 함수 찾아내기
Service Layer에 필요한 함수
기능 중에서 사용자의 요청기능 "공지목록조회", "공지상세조회" 를 만들어보자!
■ 사용자가 보게 되는 공지사항 페이지에서 사용자가 요청할 수 있는게 뭐가 있을까? (공지목록조회)
① 사용자가 "공지사항" 링크를 클릭해서 공지사항 페이지를 요청할 수 있다.
==> getNoticeList(); // 공지사항의 글 목록을 디폴트로 10개씩 보여준다.
② 사용자는 Pager(1, 2, 3, 4, 5)를 클릭해서 다음 페이지 또는 이전 페이지를 요청할 수 있다.
==> getNoticeList(int page); //특정 페이지의 번호를 인자값으로 받아서 10개씩 보여준다.
③ 사용자는 검색 버튼을 클릭해서 검색을 요청할 수 있다.
==> getNoticeList(String field, String query, int page); //검색 field와 검색 단어를 넘겨준다.
// page를 넘겨주는 이유? ==> 조회했을때 총 결과 수의 page를 알아야 pager 표시를 할 수 있기 때문이다.
④ 공지사항의 목록에 대한 "전체 페이지의 개수" 와 "검색 요청한 페이지의 수" 를 출력하는 것을 요청한다.
==> getNoticeCount(), getNoticeList(String field, String query);
■ 사용자가 보게 되는 공지 상세 페이지에서는 사용자가 요청할 수 있는게 뭐가 있을까?(공지상세조회)
① 사용자가 공지사항 상세 페이지를 요청할 수 있다.
==> getNotice(id) // 사전 조건으로 상세 페이지에 대한 id값을 넘겨 받아야한다.
② 사용자가 공지사항 상세 "다음"페이지를 요청 할 수 있다.
==> getNextNotice(id)
③ 사용자가 공지사항 상세 "이전"페이지를 요청 할 수 있다.
==> getPrevNotice(id)
71강 - 서비스 클래스 구현하기
소스 코드를 보면 getNoticeList() 함수가 중복이 된다.
소스코드의 중복을 피하기 위해서 public List<Notice> getNoticeList(String field, String query, int page) 함수만
작성하고, 나머지 함수는 작성한 함수를 return값으로 호출하게끔 설정해준다.
public List<Notice> getNoticeList() {
return getNoticeList("title", "", 1);
}
public List<Notice> getNoticeList(int page) {
return getNoticeList("title", "", page);
}
public List<Notice> getNoticeList(String field, String query, int page) {
return null;
}
72강 - 서비스 클래스 구현을 위한 SQL 코드 작성하기
( getNoticeList 메서드의 SQL 쿼리 작성하기 )
String sql = "select * from (" +
" select rownum num, n.* " +
" from ( select * from notice order by regdate desc ) n" +
" ) where num between 6 and 10";
73강 - getNextNotice를 위한 SQL 코드 작성하기
다음 글에 대한 id 값 구하기
id=3 보다 큰 값을 뽑아와서 다시 오름차순 정렬을 해준다.
오름차순 정렬된 결과값에 첫번째 rownum을 가져오면 다음 글에 해당하는 id값이다.
①
select id from notice
where regdate > (select regdate from notice where id=3)
[결과값]
②
select id from notice
where regdate > (select regdate from notice where id=3) and rownum = 1;
==> 위에서 만든 쿼리문을 서브쿼리로 설정해준다.
select * from notice
where id = (
select id from notice
where regdate > (select regdate from notice where id=3) and rownum = 1;
);
강의 74 - getPrevNotice를 위한 SQL 코드 작성하기
id 값이 3보다 작은값을 가져와야한다.
① 우선 notice 테이블의 데이터를 오름차순 정렬해준다.
select * from notice order by regdate desc
②
select id from (select * from notice order by regdate desc)
where regdate < (select regdate from notice where id = 3)
③
select id from (select * from notice order by regdate desc)
where regdate < (select regdate from notice where id = 3) and rownum = 1;
[출처]
뉴렉쳐
www.youtube.com/watch?v=u6-D8CJbsmo&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=14
'Servlet&JSP 프로그래밍' 카테고리의 다른 글
뉴렉처[Servlet/JSP] 강의 복습 85강~94강 (0) | 2021.02.06 |
---|---|
뉴렉처[Servlet/JSP] 강의 복습 75강~84강 (0) | 2021.02.05 |
뉴렉처[Servlet/JSP] 강의 복습 58강~68강 (0) | 2021.01.15 |
뉴렉처[Servlet/JSP] 강의 복습 51강~57강 (0) | 2021.01.14 |
뉴렉처[Servlet/JSP] 강의 복습 34강~50강 (0) | 2021.01.11 |