민스씨의 일취일장

LogT | Java Spring | View 레이어로 데이터를 보내는 두 가지 객체 Model와 RedirectAttribute 본문

Programming Language & Framework/JAVA & Spring

LogT | Java Spring | View 레이어로 데이터를 보내는 두 가지 객체 Model와 RedirectAttribute

읻민스 2023. 2. 16. 22:39
반응형

View 레이어로 데이터를 보내는 두 가지 방법에 대한 글이다.

Model addAttribute Redirect addFlashAttribute 썸네일 이미지이다.
Model addAttribute Redirect addFlashAttribute

Model.addAttribute & RedirectAttirbute.addFlashAttribute

Controller를 통해 View에 데이터를 전달할 때 사용할 수 있는 객체가 (YdMinS가 현재까지 아는 바로는) 두 가지 있다. 한 가지는 Model 객체를 활용하는 것이고 다른 하나는 RedirectAttribute 객체를 활용하는 것이다.

Model

모델 객체는 View로 데이터를 전달할 때 정말 많이 사용하는 객체이다.

사용법

Conroller에서 Model 객체를 인자로 받고 Model 객체에 속성값을 추가 시켜주면 View에서 참조할 수 있다.

  • Controller
public String test(Model m){
	String msg = "전달할 메시지를 msg에 담아본다"
    // msg에 담은 문자열을 "data"라는 속성에 담는다.
	m.addAttribute("data", msg);
    // 위에서 전달한 data는 test 뷰페이지에서 data로 참조가능하다.
    return "test";
}
  • View
<div>
	${data}
</div>

RedirectAttribute

Controller에서 일련의 작업을 마친 후 이미 존재하는 다른 페이지로 이동하는 경우가 있다. 이럴 경우 보통 redirect를 사용한다. 이 때 이전 페이지들에서 전달받아온 데이터를 redirect 하는 View 페이지에도 전달해야 할 때가 있다. 물론 이 경우에도 Model 객체를 사용할 수 있지만 URL에 모든 정보가 담겨져 간다. 데이터가 많지 않을 경우엔 문제가 되지 않지만 너무 많은 데이터가 Model로 전달되면 예상치 못한 문제가 발생할 수 있어 다른 방법도 배워두면 좋다. RedirectAttribute 객체를 활용하는 것이 그것인데, 데이터를 Session 객체에 담아서 View에서 사용 후 바로 삭제 된다.

사용법

사용법은 Model과 같지만 객체와 메서드 이름만 다르다.

  • Controller
public String test(RedirectAttribute rattr, TestDto testDto){
	// testDto로 전달받은 데이터를 redirect 할 때 또 보내준다.
    rattr.addFlashAttribute("data", testDto);
    return "redirect:/";
}
  • View
<div>
	${data.savedData}
</div>

* savedData는 예시로 testDto에 담겨있는 데이터를 표현한 것이다.

728x90
반응형