[JAVA] CRUD 토이 프로젝트 - 완

Hyeonseok Jeong·2023년 8월 27일
0

Java

목록 보기
5/5

오늘로서 간단한 CRUD 토이 프로젝트가 마무리 되었다.

진행

  • 전체 댓글 삭제 권한

  • Comment controller | BoardDetailController


package com.CRUDp.web.admin.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.CRUDp.web.admin.dto.BoardDto;
import com.CRUDp.web.admin.dto.CmtDto;
import com.CRUDp.web.admin.service.BoardDetailService;

@WebServlet("/admin/board/detail")
public class BoardDetailController extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String cmt = req.getParameter("comment");

		String boardId_ = req.getParameter("board_id");
		int boardId = boardId_ != null && !boardId_.equals("") ? Integer.parseInt(boardId_) : 0;

		String page_ = req.getParameter("page");
		int page = page_ != null && !page_.equals("") ? Integer.parseInt(page_) : 1;

		BoardDto boardDetail = new BoardDto();
		BoardDto nextPost = new BoardDto();
		BoardDto prevPost = new BoardDto();
		int cmtCount = 0;

		BoardDetailService service = new BoardDetailService();
		List<CmtDto> cmtList = new ArrayList<>();

		service.setBoardHit(boardId);
		nextPost = service.getNextPost(boardId);
		prevPost = service.getPrevPost(boardId);
		boardDetail = service.getBoardDetailService(boardId);
		cmtList = service.getCmtList(boardId, page);
		cmtCount = service.getCmtCount(boardId);

		req.setAttribute("detailBoard", boardDetail);
		req.setAttribute("nextPost", nextPost);
		req.setAttribute("prevPost", prevPost);
		req.setAttribute("cmtList", cmtList);
		req.setAttribute("cmtCount", cmtCount);

		req.getRequestDispatcher("/WEB-INF/view/admin/board/detail/detail.jsp").forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("UTF-8");
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html; charset=UTF-8");

		HttpSession session = req.getSession();

		String user = (String) session.getAttribute("userId");

		String cmtAction = req.getParameter("cmt-action");
		String boardId_ = req.getParameter("board_id");
		int boardId = boardId_ != null && !boardId_.equals("") ? Integer.parseInt(boardId_) : 0;
		BoardDetailService service = new BoardDetailService();
		// 사용자 인지 확인 &

		if (cmtAction.equals("등록")) {
			if (user != null) {
				String cmt = req.getParameter("comment");
				String writerId = (String) session.getAttribute("userId");

				service.setCmt(cmt, writerId, boardId);

				resp.sendRedirect("/admin/board/detail?board_id=" + boardId);

			} else {
				resp.sendRedirect("/admin/signIn");
			}
		} else if (cmtAction.equals("X")) {
			if (user != null) {

				String cmtId_ = req.getParameter("cmtId");
				int cmtId = cmtId_ != null && !cmtId_.equals("") ? Integer.parseInt(cmtId_) : 0;
				service.deleteCmt(cmtId, user);

				resp.sendRedirect("/admin/board/detail?board_id=" + boardId);
			}
		}

	}

}

오늘은 전체 댓글 삭제 관련 기능만 하면 끝나는 부분이라서 금방 끝이났다
기존에 일반 유저와 다른점은 단디 View 단에서 모든 삭제 버튼이 보여지게끔 하는 부분과
서비스단에서 어드민인지에 대한 체크만 해주면 되었다.

  • Service
	public int deleteCmt(int cmtId, String user) {
		int result = 0;
		boolean adminState = boardDao.selectAdminMember(user);

		if (adminState) {
			result = boardDao.deleteCmt(cmtId);
		}

		return result;
	}

위의 코드처럼 BoardDao.selectAdminMember(user); 부분으로 어드민인지에 대하여 체크하여 모든 댓글을 삭제할 수 있게된다.

사진


할 말

총 4일정도 사실상 3일정도로 프로젝트를 마무리하였다.

이번 프젝은 토이프젝답게 짧게 끝난 프로젝트였다 프로젝트를 마무리하면서 보니 코드들을 뜯어 고치고 싶은 마음도 든다 하지만 이후 또 다른 프로젝트를 하면서 반면교사 삼아 해당 코드를 나두고 진행해보는것도 좋을것같아 고치면 좋을점을 적고 두고두고 보면서 작업할 예정이다.

고칠점

  1. 코드의 간결성
  2. 코드의 효율
  • 위의 두개는 사실 이유가 비슷하다고 봐도 좋을것같다 DTO 로직을 처음 짤때 ADMIN 상태값을 추가하여 만들게 되면 코드를 더 효율적으로 만들 수 있을것 같기때문에 간결과 효율이 두개를 잡을 수 있을것 같다. (아니면 DB 테이블을 따로 ADMIN 만 만들어 두는 것도 방법일 것 같다 굿)
  1. Controller단과 Service단의 애매한 분별
  • 분명 서비스와 컨트롤부분을 나누어서 후에 취업 후 작업을 효율적으로 할 수 있도록 내 생각대로 나누어 봤는데 이부분은 좀더 경험이 축척되어야 어떤식으로 각 단을 나눌지 알 수있을것 같다.
    (결국 연습이 답이다)
  1. Dao단 나누기
  • 이번 프로젝트에서는 크게 나누면 로그인, 회원가입, 게시판 출력, 게시판 등록, 게시판 삭제, 댓글 등록, 댓글 삭제, 관리자 기능으로 나누어지는데 이렇게 적은 갯수로만 나누어지다보니 Board DAO단에 댓글과 게시판 부분을 합치게 되었는데 이부분은 나누어서 작업하는게 더 좋지 않았을까한다.
  1. 사용자 상태유지
  • 이부분은 Session으로 사용자의 상태를 유지시켰는데 기존에 프론트 앤드로 작업할때는 토큰으로만 작업하다 Session으로 작업하니 먼가 이게 맞나..? 하는 생각이 들었다. 찾아보니 Session으로 상태유지를 하는것도 프로젝트에서 사용하는 방법이었지만 사용자가 많아지면 Session 저장하는 메모리에도 한계가 있으니 토큰으로 상태유지하는 방법을 찾아 사용해보는게 좋을 것 같다.
    (Spring 프로젝트에서는 토큰으로 해볼 예정)

마무리

이렇게 고칠점들을 적어보니 더 확실하게 고칠점들과 보안할점들이 크게 다가오는 것 같고
이번 프로젝트 코드들을 뜯어보면서 초심을 잃지 않고 코드를 단순 작업하듯이 작성하는 개발자가 아닌 좀더 효율적이고 창의적인 코드를 작성하는 개발자가 되었으면 좋겠다

끝!

하기전에 깃허브 코드를 남깁니다~

깃허브

profile
풀스텍 개발자

0개의 댓글