BackEnd/Spring

스프링 5일차(데이터베이스 단일 테이블에서 카테고리를 이용해 여러 게시판 사용하기)

JaeHa.K 2021. 8. 27. 18:36
728x90

지난 시간에는 게시판에 CRUD기능 구현을 했었습니다. Insert, Select, Update, Delete로 게시판을 등록하고, 읽고, 수정하고, 삭제하는 기능 구현을 해봤었는데, 오늘은 카테고리 3가지를 설정하고 각 카테고리 별로 게시판 내용이 바뀌고, 잘못된 접근을 막아서 에러페이지가 안뜨도록 잡는 것도 해볼 예정입니다~

 

1. 우선 각 게시판으로 접근할 수 있도록 링크를 걸어줍니다.

<a href="./board?sb_cate=1">자유게시판</a> |
<a href="./board?sb_cate=2">공지사항</a> |
<a href="./board?sb_cate=3">문의게시판</a>


<!-- 이런식으로 나오겠죠? -->
자유게시판 | 공지사항 | 문의게시판

파라미터 값을 갖고 이동하는 것을 볼 수 있습니다.

 

 

2.  Controller 작업을 해줍니다.

	@Autowired
	private Util util;
    
	@RequestMapping(value = "/board", method = RequestMethod.GET)
	public ModelAndView board(HttpServletRequest request) {
		int sb_cate = util.str2Int2(request.getParameter("sb_cate"));
        
		ModelAndView mv = new ModelAndView("board");
		List<TestDTO> boardList = testService.boardList(sb_cate);

		mv.addObject("list", boardList);
		mv.addObject("sb_cate",sb_cate);
		return mv;
	}

(Util은 Integer.parseInt를 하기 위한 컴포넌트입니다.)

 

위의 내용 대로라면 파라미터를 잡아 Service로 던져서 값을 받아 저장해둔 "list"라는 변수와, 받은 파라미터값 그대로 다시 돌려주기 위한 "sb_cate"라는 변수가 생성되었음을 볼 수 있습니다.

 

 

3. Service 작업을 해줍니다.

	public List<TestDTO> boardList(int sb_cate){
		return testDAO.boardList(sb_cate);
	}

 

 

4. DAO 작업을 해줍니다.

	public List<TestDTO> boardList(int sb_cate){
		return sqlSession.selectList("test.boardList", sb_cate);
	}

 

 

5. Mapper 작업을 해줍니다.

	<select id="boardList" resultType="TestDTO">
		SELECT * FROM sbboardview WHERE sb_cate=#{sb_cate}
	</select>

받아온 파라미터 값을 갖고 view에서 해당되는 카테고리의 게시글 리스트를 뽑아냅니다.

 

이런식으로 각 게시판 카테고리 별로 리스트가 추출되는 것을 볼 수 있습니다.

 

하지만 여기서 문제점이 발생합니다. 파라미터값을 꼭 받도록 설정되어 있기 때문에 이 상태에서 주소창에 파라미터값을 다 지운다거나, 없는 파라미터 값을 입력하면 에러페이지가 뜰 것입니다.

 

그리고 제가 지금 어느 카테고리의 게시판에 있는지 알 수 가 없습니다.

 

이 두가지를 해결해보겠습니다.

 

 

6. Controller로 이동합니다.

	@Autowired
	private Util util;
    
	@RequestMapping(value = "/board", method = RequestMethod.GET)
	public ModelAndView board(HttpServletRequest request) {
		//int sb_cate = util.str2Int2(request.getParameter("sb_cate"));
        //ModelAndView mv = new ModelAndView("board");
		//List<TestDTO> boardList = testService.boardList(sb_cate);
		//mv.addObject("list", boardList);
		//mv.addObject("sb_cate",sb_cate);
		//return mv;
        
        int sb_cate = 1;
		
		if(request.getParameter("sb_cate") != null || util.str2Int(request.getParameter("sb_cate"))) {
			sb_cate = util.str2Int2(request.getParameter("sb_cate"));
		}
		ModelAndView mv = new ModelAndView("board");//jsp
		
		List<TestDTO> boardList = testService.boardList(sb_cate);
		String category = testService.getCategory(sb_cate);
		mv.addObject("category", category);
		mv.addObject("list", boardList);
		mv.addObject("sb_cate",sb_cate);
		return mv;
	}

주석 처리된 부분은 맨 처음 설정한 부분이고, 아래 쪽은 추가된 설정을 포함한 버전입니다.

달라진 점이 눈에 들어 오시나요?

 

파라미터 값이 NULL인지, 또는 파라미터 값을 parseInt 했을 때 변환되는 값이 있는지 없는지(참고로 util.str2Int는 아래와 같습니다.) 확인하여, True라면 파라미터 값을 갖고 Service로 날라가도록 하였습니다. 만약에 false라면 위에 int sb_cate = 1; 이라고 변수를 설정했기 떄문에 1이라는 값을 갖고 Service로 넘어가겠죠?

		try {
			Integer.parseInt(str);
			return true;
		} catch (Exception e) {
			return false;
		}

 

String category = testService.getCategory(sb_cate);
mv.addObject("category", category); 이 부분이 이제 게시판에서 카테고리 명을 보여줄 친구입니다.

 

 

7. Mapper에 카테고리 이름을 갖고 올 수 있는 sql문만 생성하면 끝납니다.

	<select id="getCategory" resultType="String">
		SELECT sc_category from scategory WHERE sc_no=#{sb_cate}
	</select>

 

짜잔~

 

Ajax를 사용하면 페이지 전환 없이 내용이 바뀌겠죠? ㅎㅎ 그 부분은 차차 해보도록 하겠습니다.

해당 게시판에서 글쓰기 기능 사용시 해당 카테고리 값을 갖고 날라갈 수 있도록 하는 기능은 jQuery에서 다뤘습니다~

반응형