ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    반응형

    댓글

Designed by Tistory.