[꼼꼼한 개발자] 꼼코더

34. 코드로 배우는 스프링 웹 프로젝트 - [프레젠테이션(웹) 계층의 CRUD 구현] - 처리와 테스트(등록, 조회, 수정, 삭제) 본문

Spring/코드로 배우는 스프링 웹 프로젝트

34. 코드로 배우는 스프링 웹 프로젝트 - [프레젠테이션(웹) 계층의 CRUD 구현] - 처리와 테스트(등록, 조회, 수정, 삭제)

꼼코더 2023. 1. 9. 23:47
반응형
 

👷🏻‍♂️ 등록 처리와 테스트

BoardController에 POST 방식으로 처리되는 register()를 작성하면 아래와 같다.

👨🏻‍💻 BoardController 작성

register() 메서드는 조금 다르게 String을 리턴 타입으로 지정하고

RedirectAttributes를 파라미터로 지정한다.

 

이는 등록 작업이 끝나면 다시 목록화면으로 이동하기 위함인데

추가적으로 새롭게 등록된 게시물의 번호를 같이 전달하기 위해서 RedirectAttributes를 이용한다.

 

리턴 시에는 ‘redirect:’ 접두어를 사용하는데 이를 이용하면

스프링 MVC가 내부적으로 response.sendRedirect()를 처리해 주기 때문에 편리하다

 

👨🏻‍💻 BoardControllerTest 작성

테스트할 때 MockMvcRequestBuilders의 post()를 이용하면

POST 방식으로 데이터를 전달할 수 있고

param()을 이용해서 전달할 파라미터들을 지정할 수 있다.

이렇게 작성시 최초 작성 시에는 일이 많다고 느껴지지만

매번 입력할 필요가 없기 때문에 오류가 발생하거나 수정하는 경우에도 반복적인 테스트가 수월해진다.

💁🏻‍♂️ 결과

상단에 BoardVO 객체로 올바르게 데이터가 바인딩 된 결과를 볼 수 있고

 

중간에는 SQL의 실행 결과가 보인다

마지막에는 최종 반환 문자열이 확인된다.


👷🏻‍♂️ 조회 처리와 테스트

등록 처리와 유사하게 조회 처리도 BoardController를 이용해서 처리할 수 있다.

특별한 경우가 아니라면 조회는 GET방식으로 처리하므로, @GetMapping을 이용한다.

 

👨🏻‍💻 BoardController 작성

BoardController의 get() 메서드에는 bno 값을 좀 더 명시적으로 처리하는

@RequestParam을 이용해서 지정한다

(파라미터 이름과 변수 이름을 기준으로 동작하기 때문에 생략해도 무방하다.)

 

👨🏻‍💻 BoardControllerTest 작성

특정 게시물을 조회할 때 반드시 ‘bno’라는 파라미터가 필요하므로 param()을 추가하고 실행한다.

💁🏻‍♂️ 결과

파라미터가 제대로 수집되었는지 확인하고 SQL 처리결과를 확인할 수 있다.

마지막에는 Model이 담겨 있는 BoardVO 인스턴스의 내용을 살펴볼 수 있다.


👷🏻‍♂️ 수정 처리와 테스트

수정 작업은 등록과 유사하다.

변경된 내용을 수집해서 BoardVO 파라미터로 처리하고, BoardService를 호출한다.

 

수정 작업을 시작하는 화면의 경우 GET 방식으로 접근하지만

실제 작업은 POST방식으로 동작하므로 @PostMapping으로 처리한다.

 

👨🏻‍💻 BoardController 작성

service.modify()는 수정 여부를 boolean으로 처리한다.

이를 이용해서 성공한 경우에만 RedirectAtrributes에 추가한다.

👨🏻‍💻 BoardControllerTest 작성

 

💁🏻‍♂️ 결과

 


👷🏻‍♂️ 삭제 처리와 테스트

삭제 처리도 조회와 유사하게 BoardController와 테스트 코드를 작성한다.

삭제는 반드시 POST 방식으로만 처리한다.

 

👨🏻‍💻 BoardController 작성

remove()는 삭제 후 페이지의 이동이 필요하여 RedirectAttributes를 파라미터로 사용하고

‘redirect’를 이용해서 삭제 처리 후에 다시 목록 페이지로 이동한다.

 

👨🏻‍💻 BoardControllerTest 작성

MockMvc를 이용해 파라미터를 전달할 때에는 문자열로만 처리해야 한다.

테스트 전에 번호의 존재여부를 확인하고 테스트한다.

💁🏻‍♂️ 결과

SQL이 실행되는 것을 확인할 수 있다.

 


🧹 마무리

경우에 따라서 Controller에 대한 테스트 코드를 작성하지 것에 거부감을 가지는 경우가 많다

대부분 일정에 여유가 없다는 이유로 작성하지 않는 경우가 많은데

 

프로젝트 진행 멤버들의 경험치가 낮을수록 테스트를 먼저 진행하는 습관을 가지는 것이 좋다.

 

반복적으로 ‘입력과 수정’, ‘WAS의 재시작’ 시간을 고려해 보면

Controller에 대한 테스트를 진행하는 선택이 더 빠른 개발의 결과를 낳는 경우가 많다.

 

🧹 최종 정리

RedirectAttributes를 파라미터로 지정하면 이는 등록 작업이 끝나면 다시 지정한 화면으로 이동하기 위함

추가로 리턴 시에는 ‘redirect:’ 접두어를 사용하면 스프링 MVC가 내부적으로 response.sendRedirect()를 처리해 주어 편리하다.

 

MockMvc를 이용해 파라미터를 전달할 때에는 문자열로만 처리해야 한다.

 

 

 

 
Comments