-
[Spring Framework]스프링 커맨드 객체Spring Framework 2021. 1. 1. 11:37반응형
이 글에서는 Spring MVC의 View 페이지에서 서버로 데이터를 넘기고, 받는 방법에 대해서 알아보려고 합니다. 대표적으로 로그인, 회원가입할 때 사용자가 입력한 정보를 가지고 와서, DTO에 저장을 하는 것들이 있는데요.
@RequestParam 방식
view.jsp
@RequestParam을 사용한 Controller
보통 스프링 기초 책에서 자주 보이고, 보편적으로 많이 사용하는 방식 입니다.
여기서 주의해서 봐야 할 점은 Controller의 View에서 요청한 파라미터(parameter)를 받는 방식 입니다. @RequestParam 애노테이션을 사용해서 매개변수로서 받아오고 있습니다. 그리고 이 매개변수를 서비스 인터페이스에 넣어, DB와 동작을 하고 있습니다.
제가 생각하는 장점은 요청한 파라미터가 어떤 것인지 명확하게 알 수 있다는 점 입니다. 생략하는 점이 없기 때문에 어떤 파라미터를 요청해서, 어떤 데이터가 DB와 통신을 하는지 알 수 있습니다.
단점은 요청한 파라미터 마다 @RequestParam을 사용해야 하기 때문에, 회원가입처럼 많은 데이터를 동시에 요청하는 경우에는 코드가 지저분해지고, 길어집니다. 아이디, 비밀번호, 이메일, 이름, 나이 등등 기입해야 할 데이터가 많으니까요.
커맨드 객체(Command Object) 방식
view.jsp
Command_Controller.java
@RequestParam 애노테이션을 사용하지 않고, 요청 파라미터를 가지고 오고 있습니다. 신기하죠?
메서드의 매개변수로 DTO 객체를 이용하고, 그 객체를 이용해 DB와 동작하는 메서드에 사용하고 있습니다. 이는 HttpServletRequest가 알아서 요청 파라미터를 컨트롤러의 매개변수로 존재하는 DTO에 바인딩시켜줍니다. 이때 바인딩은 setter 메서드를 이용하고요.
지켜야 할 점은 요청 파라미터의 속성값과 DTO의 객체 속성 값의 이름이 같아야 합니다. 그래야 자동으로 찾아서, 바인딩할 수 있습니다.
제가 생각하는 장점은 @RequestParam에 비해 다량의 데이터를 동시에 받아들일 때 (ex.회원가입) 반복되는 코드를 제거함으로써, 코드의 양을 줄일 수 있습니다. 그래서 Model 객체에 데이터를 담을 때 DTO의 객체 변수 하나만 이용하면 됩니다.
수정 사항
2021년 1월 6일
오타 및 문장 수정
참고 문헌
medium.com/webeveloper/modelattribute-와-커맨드-객체-command-object-42c14f268324
반응형'Spring Framework' 카테고리의 다른 글
앵귤러, 스프링부트를 이용한 Oauth2 회원가입 문제 (0) 2021.06.23 하이버네이트의 네이밍 전략 (0) 2021.04.29 서블릿이란? (0) 2020.09.15 [Spring Framework] IoC container / Scope (0) 2020.07.27 웹 서버란? (0) 2020.07.04