본문 바로가기

Servlet&JSP 프로그래밍

뉴렉처[Servlet/JSP] 강의 복습 69강~74강

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