Frudy
2k
2019-06-04 16:34:30 작성 2019-06-04 17:41:39 수정됨
8
2024

게시판프로그램 중복코드 줄이기! (view)


안녕하세요.


포트폴리오에 게시판 많이 만들죠?

제가 만드는 게시판도 view쪽 리팩토링이 끝나서,


제가 중복코드를 줄였던 이 경험이,

다른 게시판만드는 분들에게 도움이 되었으면 좋겠습니다.


내용은 View(jsp)에 한해서만 먼저 작성해보겠습니다.


ㅡㅡㅡㅡㅡ


생각보다 게시판의 종류가 많아서 그만큼 페이징도 많이들어갑니다.

제가 만든 게시판도,


(1) FAQ 게시판

(2) 나의 문의목록 게시판

(3) 사용자가 문의한 목록 게시판 (관리자입장)

(4) 관리자인 내가 답변한 목록 게시판 (관리자입장)

(5) FAQ 검색 게시판 (ㅁㅁㅁ내용을 검색하면 그 내용에 대한 게시판도 필요하죠)

정말많았습니다.


[최초]


그래서 무려 5개의 페이지에, 저 내용이 빨간줄만 다르고 중복코드로 존재했습니다.

이 버전이, 1년전 학원에서 배웠던 버전이였고, 최근까지 저는 저 수준밖에 안됬습니다.


1. 매번 paging의 변수를 새로 계산하는것을 개선


jsp가 5개죠? 컨트롤러도 5개가 필요했습니다.

startPage, endPage, startRow, endRow, totalRowCount..... 매번 계산했습니다.


수정사항 하나생기면 5개를 수정해야했습니다. 끔찍하죠?



그래서 따로 Paging클래스와 PagingDto클래스를 만들었습니다.


(1) 한 화면에 보여줄 페이지 갯수

(2) 한 페이지에 보여줄 글 갯수를 매개로 paging변수를 얻어오고,


(1) 현재 페이지번호와

(2) 전체 글 갯수를 매개로 pagingDto를 얻어오면,


startRow, endRow, startPage, endPage, nextPage, prevPage...

기타 모든 페이징에 필요한것이 pagingDto에 저장되어있습니다,


그래서 페이징 관련 계산 코드가,  5개의 컨트롤러에서 사라졌습니다.

나중에 어..페이징계산 어떻게 했더라...  찾아보지않아도 되구요.


[1차수정]


그래서 이렇게 바뀌었습니다.


사실, view단에서

${startPage > pagePerView} 이런 내용이나,

${startPage + pagePerView} 이런내용 들어있으면 안됩니다.

이것역시 비즈니스 로직이기 때문이죠.


이런것들까지 한방에 해결했습니다.


(Paging, PagingDto클래스 사용법이 좀 불편하죠? 제가 클래스디자인 실력이 부족해서 그렇습니다.)



2.  paging에 대한 jsp코드가 웹페이지마다 중복되는 것을 개선


아직 멀었습니다. Controller에서만 개선했지, 

여전히 5개의 jsp페이지에 저러한 코드가 여전히 중복되게 존재했습니다.



그것을 이 한줄로 대체했습니다.


???? 게시판마다 경로가 다른대 어떻게 모두 하나로 통합했냐면요,


이부분을 이렇게 대체했기 때문입니다.

패러미터부분은 모두 [현재 페이지번호]로 동일하고, 경로만 다르니까요.


물론, 페이징마다 패러미터에 [현재 페이지번호]말고 다른 패러미터도 필요한일이 간혹 있습니다.


예를들면, [선택한 카데고리에 해당하는 게시글] 의 경우

저는 categroyPaging.jsp로 하나 더 만들고 include 시켰었습니다.



위 두가지 방법으로,

1. Controller 5개에 중복되었던 java 페이징코드까지 모두 제거하였습니다.

2. jsp파일 5개에, 중복되었던 jsp 페이징코드까지 모두 제거하였습니다.


7
3
  • 댓글 8

  • 두더지
    273
    2019-06-04 16:55:14

    리펙토링 해가는 모습 되게 멋있으세요! ㅎㅎ

    이왕 하신거 이제 페이징처리를 스크립트로 처리로 리펙토링 한번더 해보시면 좋을거같아요.

    페이징페이지 (ex. 리스트) 에서 레이어로 화면을 띄운다던지, 더 간단하게 ajax 로 페이지를 띄워야 할 경우

    동적으로 그려내야할 경우도 많이있어서 스크립트로 페이징을 처리하게 한다면 더 좋을거 같네요 ㅎㅎ

    0
  • Frudy
    2k
    2019-06-04 16:59:36

    두더지

    저두 하고시퍼요! 하지만 아직 그부분에 지식이없네요............ 흑흑

    얼른 이거 완성하고 edwith의 백엔드인강, UI인강 듣고

    게시판 버전업하구싶어요!

    0
  • 노넨
    610
    2019-06-04 17:19:04

    멋지십니다!!

    0
  • 하두
    9k
    2019-06-04 17:25:12
    밑그림, 그리고 전략적인 고민에 바탕한
    0
  • 배우고싶은이
    749
    2019-06-04 18:59:02

    오 예 ~~~~ 짝짝짝.

    0
  • 답정너심판자
    396
    2019-06-04 21:59:59

    잘하셨네요.


    더 세련된 방법은 아래를 검색해보세요.

    pageable

    methodArgumentResolve

    1
  • Frudy
    2k
    2019-06-05 09:45:38
    0
  • 이상한우울
    47
    2019-06-10 01:18:39

     boardType에 insert하고 view만 복붙해서 이름바꾸기만 하면 돌아가게끔.. 만들었는데 저도 하다가 중간에 면접에 합격해서 정신없이 다른 언어 보느라 포폴 멈춘 상태거든요. 게시판 진짜 정석코드가 있으면 참 좋읕텐데 저도 그걸 못 찾겠더라고여 ㅠㅠ 리팩토링 리뷰 다음에도 부탁드려요!


    https://github.com/KimMinseong999/footballReserve/tree/master/footballReserve/src/main/webapp/WEB-INF/views/board


    (controller로에 페이징처리해놓은건... 아 지금이라도 뜯어고치고 싶네요.) 

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.