본문 바로가기

BackEnd/Spring

[코드로 배우는 스프링 웹 프로젝트] ch10 프레젠테이션(웹) 계층의 CRUD 구현 2

728x90
반응형

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);
	}
}​


▷ 해당 게시물의 번호가 존재하는지 확인하고 테스트를 실행
▷ 번호가 있기 때문에 아래와 같은 결과가 출력

 

이번 시간은 프레젠테이션 계층의 조회, 수정, 삭제 및 테스트를 진행해보았습니다.

 

사용하는 타입과 방식에 대해서 구분하는 것이 중요하네요!!

 

계속해서 달려볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형