Devme/Project

JAVA / SPRING 프로젝트 삼삼하개(3) 마이페이지(개인/업체) 내 작성글, 작성댓글 조회 구현

팀프로젝트가 끝나고 되돌아보는 시간 (3) 마이페이지(개인/업체) 내 작성글, 작성댓글 조회 구현

 

 

내 작성글, 작성댓글을 불러오는 페이지를 작업하면서 돌이킬수 없는 후회가 생겼습니다.

 

바로 테이블 설정.. 

 

구성 당시에는 먼 미래를 생각하며 각게시판을 카테고리화해서 구성하면 데이터가 많이 쌓였을때 성능저하가 생기지 않을까? 라는 의문으로 프로젝트를 구성할때 각 게시판 테이블을 따로 만들었는데(심지어 필드명도 다 다르게..)

우리는 빌드하여 프로젝트로만 활용할 뿐 실제 배포 및 운영은 계획이 없었기에 고려하지 않아도 되는 상황인데다가

검색 기능이나 이렇게 한번에 조회하는 페이지를 구현할때 불필요하게 동일한 코드를 여러번 적게끔 만들었습니다

 

이미 거의 막바지에 다와서 수정하면서 생긴 문제이기도 하고 고치게되면 한둘도 아니고 팀원 모두가 본인이 작성한 코드를 다 수정해야되었기에 그대로 적용하게 되었습니다

 

 

 

작성글 / 작성댓글 탭은 input type = radio 로 구현하였고,

데이터는 한번에 불러온 후 자바스크립트로 5개만 보이고 나머지는 숨김 처리하여 더보기 클릭시 5개씩 추가로 보이게 했습니다.

 

Controller (각 게시판별로 게시글, 댓글 데이터 가져오기)

	@RequestMapping(value = "/cominfo_list.me")
	public String cominfo_list(HttpSession session, Model model) {
		String email = (String)session.getAttribute("email");
		
		ArrayList<BoardlistVO> b_listal = memberSV.getWriteList1(email);
		if(b_listal != null ) {
			model.addAttribute("b_listal", b_listal);
		}
		ArrayList<CommentListVO> c_listal = memberSV.getWriteComment1(email);
		if(c_listal != null ) {
			model.addAttribute("c_listal", c_listal);
		}
		ArrayList<BoardlistVO> b_listfd = memberSV.getWriteList2(email);
		if(b_listfd != null ) {
			model.addAttribute("b_listfd", b_listfd);
		}
		ArrayList<CommentListVO> c_listfd = memberSV.getWriteComment2(email);
		if(c_listfd != null ) {
			model.addAttribute("c_listfd", c_listfd);
		}
		ArrayList<BoardlistVO> b_listfa = memberSV.getWriteList3(email);
		if(b_listfa != null ) {
			model.addAttribute("b_listfa", b_listfa);
		}
		ArrayList<CommentListVO> c_listfa = memberSV.getWriteComment3(email);
		if(c_listfa != null ) {
			model.addAttribute("c_listfa", c_listfa);
		}
		ArrayList<BoardlistVO> b_listah = memberSV.getWriteList4(email);
		if(b_listah != null ) {
			model.addAttribute("b_listah", b_listah);
		}
		ArrayList<CommentListVO> c_listah = memberSV.getWriteComment4(email);
		if(c_listah != null ) {
			model.addAttribute("c_listah", c_listah);
		}
		ArrayList<BoardlistVO> b_listco = memberSV.getWriteList5(email);
		if(b_listco != null ) {
			model.addAttribute("b_listco", b_listco);
		}
		ArrayList<CommentListVO> c_listco = memberSV.getWriteComment5(email);
		if(c_listco != null ) {
			model.addAttribute("c_listco", c_listco);
		}
		ArrayList<BoardlistVO> b_listp = memberSV.getWriteList6(email);
		if(b_listp != null ) {
			model.addAttribute("b_listp", b_listp);
		}
		ArrayList<CommentListVO> c_listp = memberSV.getWriteComment6(email);
		if(c_listp != null ) {
			model.addAttribute("c_listp", c_listp);
		}
		ArrayList<BoardlistVO> b_listm = memberSV.getWriteList7(email);
		if(b_listm != null ) {
			model.addAttribute("b_listm", b_listm);
		}
		ArrayList<CommentListVO> c_listm = memberSV.getWriteComment7(email);
		if(c_listm != null ) {
			model.addAttribute("c_listm", c_listm);
		}
		
		return "YM/cominfo_write";
	}

 

 

Mapper (Mybatis)

<!-- 내 작성글 리스트 -->
<select id="getWriteList" parameterType="String" resultType="BoardlistVO">
select * from (
	select doc_no as num, doc_subject as subject, doc_date as write_date from adopt_list where doc_email = #{email}
	union all
	select doc_no as num, doc_subject as subject, doc_date as write_date from free_doc where doc_email = #{email}
	union all
	select doc_no as num, fadoc_subject as subject, fadoc_date as write_date from free_auth where fadoc_r_email = #{email}
	union all
	select doc_no as num, doc_subject as subject, doc_date as write_date from adopt_home where doc_email = #{email}
	union all
	select doc_no as num, doc_subject as subject, doc_date as write_date from community where doc_email = #{email}
	union all
	select doc_no as num, doc_subject as subject, doc_date as write_date from payang where doc_email = #{email}
	union all
	select doc_no as num, doc_subject as subject, doc_date as write_date from missing where doc_email = #{email}
) order by write_date desc
</select>
 
<!-- 내 댓글 리스트 -->
<select id="getWriteComment" parameterType="String" resultType="CommentListVO">
select * from (
	select doc_content as content, doc_date as write_date, doc_no from adopt_reply where doc_email = #{email}
	union all
	select doc_content as content, doc_date as write_date, doc_no from fdoc_refly where doc_email = #{email}
	union all
	select doc_content as content, doc_date as write_date, doc_no from free_auth_reply where doc_email = #{email}
	union all
	select doc_content as content, doc_date as write_date, doc_no from adopt_home_reply where doc_email = #{email}
	union all
	select doc_content as content, doc_date as write_date, doc_no from doc_comment where doc_email = #{email}
	union all
	select doc_content as content, doc_date as write_date, doc_no from payang_reply where doc_email = #{email}
	union all		
	select doc_content as content, doc_date as write_date, doc_no from missing_reply where doc_email = #{email}
) order by write_date desc
</select>

from절에 서브쿼리를 사용하여 여러테이블에 있는 데이터를 한번에 조회할수 있었지만,

테이블을 따로 식별할 수 없어 Sevice단에서 메소드로 구분지었습니다.

 

 

cominfo_write.jsp (작성글/작성댓글 관리)

 if(boardlist_m.size() != 0){%>
 	<h5> 실종게시판(<%=boardlist_m.size() %>) </h5>
  		
   	 	<table>
   			<thead>
   				<tr><th>글번호</th><th>제목</th><th>작성일</th></tr>
   			</thead>
    		<tbody>
    		<%	
    			for(BoardlistVO b_list : boardlist_m){	
    		%>
    		<tr class = "boardlist tr">
    			<td><a class="path" href=""><%=b_list.getNum() %></a></td>
    			<td><a class="path" href=""><%=b_list.getSubject() %></a></td>
    			<td><a class="path" href=""><%=b_list.getWrite_date() %></a></td>
    		</tr>
   			<% } %>
  			</tbody>
 		</table>
   
 		<input type="button" id="check17" value="더보기">
  			<div class="error17"></div>
 		<% }} else{%>
 		<p> 작성글이 없습니다. </p>
 		<% } %>

각 게시판별로 테이블이 따로이고 필드명도 다 다르다보니 mapper에서도 for문을 돌릴래도 불가하여,

테이블 별로 데이터를 조회하여 ArrayList 타입으로 가져왔습니다.

 

 

** 나중에 네이버 카페의 작성글/작성댓글을 보며 게시판별로 조회하진 않는다는 것을 알게되었습니다.

   게시판의 성격이 중요하지 않다면 따로 구분하여 조회하지 않고 한번에 조회해도 좋을것 같다는 생각이 들었고,

   아니면 미리보기 성격으로 작성글관리 페이지에서 글제목을 클릭하면 아래로 슬라이딩되면서 글 내용의 일부를 확인 할 수 있다던가

   하는 기능을 넣어보는것도 좋을 것 같습니다.