본문 바로가기

WebApplication

[Spring] Controller 비즈니스 로직처리(CRUD)

스프링 MVC의 컨트롤러 클래스에 여러 요청/응답 메서드를 작성하고 @RequestMapping 혹은 @GetMapping, @PostMapping 어노테이션을 이용하여 요청 URI를 분기한다.

컨트롤러 작업 역시 지정한 URI로 요청이 가는게 맞는지 확인해야하는데 서버에서 톰캣으로 바로 확인할수도 있지만 별도의 단위테스트를 통해 이를 체크한다. 단위테스트시 MockMvcBuilder를 사용해준다.

컨트롤러에서 메서드별로 작업이 필요한 Mapper를 수행하기 위해 해당 매퍼를 참조하고 구현한 service 인터페이스를 필드로 선언해주고 서비스를 통해 비즈니스 로직을 수행하도록 한다.

객체간의 결합도는 낮추고 응집도는 높여서 보다 객체지향에 맞는 코드를 작성하기 위해 서비스 인터페이스와 구현클래스를 작성해주었다. 서비스 인터페이스에 대한 구현 클래스를 스프링이 탐색할 수 있도록 @service 어노테이션을 필히 추가해주고 rootcontext.xml에 서비스 패키지를 등록해준다.

 

컨트롤러를 통한 CRUD 비즈니스 로직 수행 확인

먼저 회원 등록 컨트롤러를 테스트 하기위해 @PostMapping된 URI 요청을 수행한다. 이때 서비스에서 등록 Mapper를 수행하는 메서드를 호출하고 테스트 결과가 model에 반영되었는지 확인한다. 확인시에는 조회 화면에서 바로 볼 수 있도록 리턴타입을 string 으로 해서 redirect: 하고 직접 화면에서 반영 결과를 보는 것도 좋다. 

조회 컨트롤러를 별도로 테스트 할 때에는 해당 @GetMapping URI로 요청하여 올바르게 데이터가 바인딩되어 조회되는지 확인해주면 된다. (PK 파라미터 반드시 필요) 파라미터가 제대로 수집되는지 확인하기 위해 log4j를 잘 활용하여 중간 로그를 확인해주면서 오류에 대처해야 한다.

삭제 처리의 경우 반드시 post방식으로만 처리해야 하고 삭제 후 페이지 이동이 필요하기때문에 해당 컨트롤러의 파라미터에 Redirect Attribute를 지정해주어 다시 목록 페이지에서 확인이 가능하도록 해야한다. 

컨트롤러 작업에서 가장 중요한 것은 파라미터 처리 인데 이때 사용하는 어노테이션은 @RequstParam @ModelAttribute이 있고 클래스 객체와 Model객체, 기본 데이터 타입을 이용하여 데이터를 바인딩할 수 있다.

스프링 MVC에서 Model을 이용해 데이터를 전달할 때에는 addAttribute()로 파라미터의 name 속성을 지정해주고 전달할 데이터를 넘긴다. Modelt객체는 컨트롤러에서 생성된 데이터를 담아 JSP에 전달하는 역할을 하는 존재이다. 

Model을 이용해 데이터를 화면으로 전달하고 이를 조회할 수 있다 . Model을 사용하는 경우는 주로 컨트롤러에 전달된 데이터를 이용해서 추가 데이터를 가져와야 하는 상황에 사용한다.

 

** controller 리턴타입

- string :: jsp 를 이용하는 경우 jsp 파일 경로 / 파일 이름으로 지정하기 위함

- void :: 호출하는 URL과 동일한 이름의 jsp를 의미

- 객체타입 :: 리턴타입을 vo나 DTO로 지정하여 JSON 데이터로 전송할 때 사용 (@ResponseBody)