지난 프로젝트때 아예 신경을 안썻던 게시판을 이번에 간단히 만들기로 하였다.

다행히 지난번처럼 게시판의 종류는 많지 않게 간단히 DB설계를 하였고 최소한의 기능만을 가진

게시판을 구축하기로..


1) 게시판 내용을 가져오는 것 : 간단하다. List<E>로 받아서 그대로 가져오면 된다.

ModelAndView로 주면 되니 어려운 것은 없다.


2) 게시판 모양 구축 : 페이징 처리.. 이게 어렵다.

쉽지않다. 아직도 진행중이다.

책을 보고 따라 구현해봤으나 확 와닿지 않아서 내 스타일대로 바꾸었다.


2-1) 일단 페이징을 위한 클래스를 따로 생성했다. 책에선 이를 2가지로 구분했지만 나는 일단

유지보수를 생각안하고(...) 하나로 합쳤다.

페이징 클래스를 생성하는 이유는 다음과 같다.


2-2) 기능을 구현하기 위해 일단 흐름을 생각해본다.

게시판을 클릭하면 게시판.jsp로 넘어간다.


이때 db에 저장된 게시글들을 읽어올 것이다 ---- 1번
게시글이 많을 경우 아래에 페이지가 넘버링 되고 클릭하면 다른 게시들을이 나온다 -----2번

prev, next 등의 버튼을 통해서도 이동할 수 있다 -----3번

위의 3가지가 핵심이라 할 수 있다.

1번에서 중요한 점은 from - to를 명시해주는 것, 즉 내가 20개씩 글을 보여주겠다 생각 한다면

0-19, 20-40, 41-59 이런 식으로 짤라줘야 한다는 점.
이를 위해 시작글번호, 끝 글번호가 필요로 하고 이를 클래스에 멤버변수로 만들었다.

(끝글번호 = 시작글번호 + 20)
# 위 두개의 멤버변수는 쿼리문에서 limit 시작 글번호, 끝 글번호 로 불리게 된다.

2번. 게시글이 많다 라는 것은 총 게시물 대비 내가 보여줄 갯수를 비교하여 페이지를 만들어야 한다는 것이다.
만약 총 게시글이 110개이고 20개씩 보여준다면 총 6페이지가 나와야 한다.
그럼 아래 페이지 넘버링은 1부터 6이 될 것이다.

이를 위해서 총 게시글을 db에서 읽어오는 쿼리문과 메서드가 필요로 하고, 이를 저장 할 수 있는 멤버변수 또한 필요하다.
# 하지만 db에 12만게의 게시글을 만들어 놨더니 게시글 불러오는데에 너무 오래걸린다. 이거는 좀더 생각해 봐야할듯

3번 prev는 이전, next는 다음인데 여기서 next를 +1 씩 시킬지, +@로 할지 아직은 안정한 상태

다만 prev의 경우는 현재 페이지가 1일때는 보여서는 안되며 next역시 더이상 다음에 불러올 페이지가 없을 경우에

보여서는 안된다.
그렇기 때문에 prev, next 는 boolean 멤버변수로 설정하여 true, false 값으로 조절 하게끔 해야한다.

1,2,3번을 종합해보면 페이징 클래스에는
시작글번호, 끝글번호, 총글갯수, prev, next 등의 멤버변수들과 이를 설정해주는 다른 메서드들이 추가로 필요함을 알 수 있다.


기본적인 매퍼이다. 게시글에 대한 정보 + 회원에 대한 정보를 조인해서 가져와야 나중에 수정 등을 할 수 있다. 아마 필요하다면 계속 바뀔 매퍼

페이지를 관리하는 클래스 이다. 책에선 이것을 두개로 나누었지만 그게 오히려 복잡해서 하나로 합쳤다. 기본적으로 현재 페이지, 끝페이지, 시작 게시글, 끝 게시글, 이런식으로 구분 하였다. 어제에 비해서 바뀐 것은 next, prev에 값을 갖는 멤버변수를 만들었다는 점이다. 웹상에서 숫자 계산을 해야하는데(예를 들어 현재 페이지가 15이면 next를 누르면 25페이지로 넘어가게끔) 이를 어떻게 해야할지 몰라서 일단 서버에서 다 해결하는 것으로 하였다.

prev, next의 조건을 계산 하기 위한 값. next 조건의 경우 아직 완벽하지 않다.

ModelAndVIew로 건네준다. 글 목록과 페이지관리 클래스를 같이 넘겨준다. 글 목록은 항상 20개씩 나오는데 문제는 불러오는 속도가 너무 느리다는 점. 아무래도 총 게시글 갯수를 확인하는 것 때문에 그런것 같아서 if문으로 한번만 할 수 있게 조건을 주었다. 그래도 느리다. 한가지 더 신경쓴 점은 RestfulAPI를 적용하기 위해 URL을 단순히 하였고 bbs는 기본적으로 ?page=num 식으로 이루어지므로 value, defaule값 등을 주었다.







+ Recent posts