https://bobo12.tistory.com/300
(3) 조회 처리와 테스트
▷ 등록 처리와 유사하게 조회 처리도 BoardController를 이용해 처리 가능
▷ 특별한 경우가 아니라면 조회는 GET 방식으로 처리하므로, @GetMapping을 이용
◎ src/main/java → org.codehows.controller → BoardController 클래스 수정
...(생략)... @GetMapping("/get") public void get(@RequestParam("bno") Long bno, Model model) { log.info("get"); model.addAttribute("board", service.get(bno)); } }
▷ BoardController의 get() 메소드에는 bno 값을 좀 더 명시적을 처리하는 @RequestParam을 이용해서 지정
▷ 화면 쪽으로 해당 번호의 게시물을 전달해야 하므로 Model을 파라미터로 지정
◎ src/test/java → org.codehows.controller → BoardControllerTests 클래스 수정
...(생략)... @Test public void testGet() throws Exception { log.info(mockMvc.perform(MockMvcRequestBuilders .get("/board/get") .param("bno", "2")) .andReturn() .getModelAndView().getModelMap()); } }
위 코드의 결과는 아래와 같이 SQL의 처리 결과를 확인할 수 있습니다.
(4) 수정 처리와 테스트
▷ 등록과 유사하며, 변경된 내용을 수집해 BoardVO 파라미터로 처리하고, BoardService를 호출
▷ 수정 작업을 시작하는 화면의 경우 GET 방식으로 접근하지만 실제 작업은 POST 방식으로 동작
▶ @PostMapping을 이용해서 처리
◎ src/main/java → org.codehows.controller → BoardController 클래스 수정
...(생략)... @PostMapping("/modify") public String modify(BoardVO board, RedirectAttributes rttr) { log.info("modify: " + board); if(service.modify(board)) { rttr.addFlashAttribute("result", "success"); } return "redirect:/board/list"; } }
service.modify()는 수정 여부를 boolean으로 처리하므로 성공한 경우에만 RedirectAttributes에 추가
◎ src/test/java → org.codehows.controller → BoardControllerTests 클래스 수정
...(생략)... @Test public void testModify() throws Exception { String resultPage = mockMvc .perform(MockMvcRequestBuilders.post("/board/modify") .param("bno", "1") .param("title", "수정된 테스트 새글 제목") .param("content", "수정된 테스트 새글 내용") .param("writer", "user00") ).andReturn().getModelAndView().getViewName(); log.info(resultPage); } }
실행시키면 콘솔창에는 아래와 같이 update sql문이 나타납니다.
(5) 삭제 처리와 테스트
▷ 삭제 처리도 조회와 유사하게 BoardController와 테스트 코드를 작성
▶ 삭제는 반드시 POST 방식으로만 처리
◎ src/main/java → org.codehows.controller → BoardController 클래스 수정
...(생략)... @PostMapping("/remove") public String remove(@RequestParam("bno") Long bno, RedirectAttributes rttr) { log.info("remove: " + bno); if(service.remove(bno)) { rttr.addFlashAttribute("result", "success"); } return "redirect:/board/list"; } }
◎ src/test/java → org.codehows.controller → BoardControllerTests 클래스 수정
...(생략)... @Test public void testRemove() throws Exception { // 삭제전 데이터베이스에 게시물 번호 확인할 것 String resultPage = mockMvc .perform(MockMvcRequestBuilders.post("/board/remove") .param("bno", "25") ).andReturn().getModelAndView().getViewName(); log.info(resultPage); } }
▷ 해당 게시물의 번호가 존재하는지 확인하고 테스트를 실행
▷ 번호가 있기 때문에 아래와 같은 결과가 출력
이번 시간은 프레젠테이션 계층의 조회, 수정, 삭제 및 테스트를 진행해보았습니다.
사용하는 타입과 방식에 대해서 구분하는 것이 중요하네요!!
계속해서 달려볼게요~!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Spring' 카테고리의 다른 글
[코드로 배우는 스프링 웹 프로젝트] ch11 화면 처리 2 (0) | 2023.03.29 |
---|---|
[코드로 배우는 스프링 웹 프로젝트] ch11 화면 처리 1 (0) | 2023.03.29 |
[코드로 배우는 스프링 웹 프로젝트] ch10 프레젠테이션(웹) 계층의 CRUD 구현 1 (0) | 2023.03.28 |
[코드로 배우는 스프링 웹 프로젝트] ch09 비즈니스 계층 (0) | 2023.03.28 |
[코드로 배우는 스프링 웹 프로젝트] ch08 영속/비즈니스 계층의 CRUD 구현 2(create, read, update, delete) (0) | 2023.03.28 |