Spring

Spring Framework_커맨드 객체(Command Object)

onivv 2024. 3. 7. 17:28

Controller는 메서드 인자로 request, response 객체를 가지므로 import servlet req,res... 를 해야했음

완전한 POJO가 아녔음

Controller.java

HttpServletRequest request

클라이언트가 전달해주는 파라미터 데이터를 주입 받기 위해 사용되는 객체로, DTO로 받아올 수 있음

이러한 객체를 커맨드 객체(Command Object)라고함

 

[ 커맨드 객체(Command Object) ] ⭐⭐

  • 현업에서는 컨트롤러 인자로 많이 알려졌지만,
    정확히는 스프링 컨테이너가 관리해주는 컨트롤러의 인자
  • HttpServletRequest를 통해 들어온 요청 파라미터들을
    setter 메서드를 이용해 객체에 정의되어있는 속성에 바인딩되는 객체를 의미함
  • 커맨드 객체는 주로 DTO(Data Transfer Object)를 사용하며,
    request로 받아오는 요청 파라미터의 key값과 동일한 이름의 속성들과 setter 메서드를 가지고 있어야함
  • 자동으로 바인딩 시켜주는 방법은,
    Spring이 내부적으로 request와 Command 객체의 setter 메서드를 이용해 알아서 바인딩 시켜줌
  • 사용자가 입력한 데이터를 받고,
    해당 데이터를 처리하는 비즈니스 로직에 전달하는 역할을 수행함
    처리된 결과나 다음 화면에 필요한 데이터를 다시 사용자에게 전달할 때도 사용됨

이전 Controller.java

 

▶ DTO, DAO, Model, JSP 내장객체, ...

1. DTO

< Spring 컨테이너가 Command 객체에게 해주는 행위가 3가지 >

  • 1) DTO를 set하려면 new되어있어야함, Command객체를 new
         → JSP에서 <jsp:usebean>
  • 2) request에 저장된 정보중 DTO 멤버변수와 같은 파라미터명이 있다면, 해당 값을 자동 추출
  • 3) 추출한 값을 DTO 멤버변수에 Setter를 활용해서 set 가능
         → JSP에서 <jsp:setproperty>

2. DAO

DAO를 직접사용하기에는 DAO의 변경이 자주 일어난다...

인자를 모두 변경해야함... → 결합도가 높은 코드 ㅠㅠ

1) 결합도를 낮추기 위해 의존관계를 활용

2) 의존관계를 만들었으니 @Autowired로 의존주입(DI)하기 

3) @Service로 new해서 메모리에 올려야함

 

3. Model

  • output이 String이라서 View정보를 보내고있지는 않음
    따라서 ModelAndView보다 가벼운 Model 사용
  • import org.springframework.ui.Model
  • 메서드명이 addObject → addAttrivute로 바뀜

4. JSP 내장객체

  • request, response를 통해 불러올 수 있는 JSP 내장객체 : 대표적으로 session