[꼼꼼한 개발자] 꼼코더

22. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 파라미터 수집(3), @ModelAttribute, RedirectAttributes 본문

Spring/코드로 배우는 스프링 웹 프로젝트

22. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 파라미터 수집(3), @ModelAttribute, RedirectAttributes

꼼코더 2023. 1. 5. 01:30
반응형
 

✍🏻 @ModelAttribute 어노테이션

웹 페이지 구조는 Request에 전달된 데이터를 가지고

필요시 추가적인 데이터를 생성하여 화면에 전달하는 방식으로 동작한다.

 

Model의 경우는 파라미터로 전달된 데이터를 가지고 존재하지 않지만 화면에서는 필요한 데이터를 전달하기 위해 사용.

  • 게시판의 페이지 번호는 파라미터로 전달되지만, 결과 데이터를 반환하려면 Model에 담아서 전달해야 함

 

스프링 MVC의 Controller는 기본적으로

Java Beans 규칙에 맞는 객체는 다시 화면으로 객체를 전달한다.

 

다시 말해 Java Beans의 규칙은 단순히

생성자가 없거나 빈 생성자를 가져야 하며 getter/setter를 가진 클래스의 객체들을 의미한다.

 

앞의 예제는 파라미터로 사용된 SampleDTO의 경우

Java Bean의 규칙에 맞기 때문에 자동으로 다시 화면까지 전달된다.

 

반면 기본 자료형의 경우 파라미터로 선언하여도 화면까지 전달되지 않는다.

 

👨🏻‍💻 SampleController 코드 추가

 

ex04()는 SampleDTO 타입과 int 타입의 데이터를 파라미터로 사용한다.

결과를 확인하기 위해 ‘WEB-INF/views’ 폴더 아래 ‘sample’ 폴더 생성 후

리턴값에서 사용한 ‘ex04’에 해당하는 ex04.jsp를 작성한다.

 

👨🏻‍💻 ex04.jsp 작성

 

💁🏻‍♂️ 결과

‘http://localhost:8080/sample/ex04?name=aaa&age=11&page=9’와 같이 호출 시

화면에 SampleDTO만 전달된 것을 확인할 수 있다.

int 타입으로 선언된 page는 전달되지 않는다.

그럼 @ModelAttribute를 사용해서 pape 값도 전달 되도록 코드를 수정해 보자.

@ModelAttribute는 강제로 전달받은 파라미터를 Model에 담아서 전달할 때 사용하는 어노테이션 @ModelAttribute가 걸린 파라미터는 타입에 관계없이 무조건 Model에 담아져 전달된다.

 

기본 자료형에 @ModelAttribute를 적용할 경우에는 반드시 @ModelAttribute(”page”)와 같이 값(value)을 지정하도록 해야 한다.

 


↪️ RedirectAttributes

Model 타입 외에 스프링 MVC가 자동으로 전달해 주는 타입 중에는 RedirectAttributes가 있다.

RedirectAttributes는 일회성으로 데이터를 전달하는 용도로 사용된다.

기존 Servlet에 response.sendRedirect()와 동일한 용도로 사용된다.

 

// Servlet에서  redirect 방식 
	response.sendRedirect("/home?name=aaa&age=10");

// 스프링 MVC를 이용하는 redirect 처리
	rttr.addFlashAttribute("name", "AAA");
		rttr.addFlashAttribute("age", 10);
		
		return "redirect:/";

RedirectAttribute는 Modle과 같이 파라미터로 선언해서 사용하고

addFlashAttribute(이름, 값) 메서드를 이용해서 화면에 한 번만 사용할 데이터를 전달하기 위해 사용한다.

RedirectAttribute의 용도는 이후 예제 작성 시 여러 번 사용할 예정이다.

 

 


🧹 최종 정리

  • 웹 페이지 구조는 Request에 전달된 데이터를 가지고 필요시 추가적인 데이터를 생성하여 화면에 전달하는 방식으로 동작
  • Model의 경우는 파라미터로 전달된 데이터를 가지고 존재하지 않지만 화면에서는 필요한 데이터를 전달하기 위해 사용.
  •  스프링 MVC의 Controller는 기본적으로Java Beans 규칙에 맞는 객체는 다시 화면으로 객체를 전달한다.
  • Java Beans의 규칙은 생성자가 없거나 빈 생성자를 가지고 있고 getter/setter를 가진 클래스의 객체들을 의미
  • 예제의 파라미터로 사용된 SampleDTO의 경우 Java Bean의 규칙에 맞기 때문에 자동으로 다시 화면까지 전달이 가능했다.
  • 반면 기본 자료형의 경우 파라미터로 선언하여도 화면까지 전달되지 않는다(@ModelAttribute 사용시 가능하다.)
  • @ModelAttribute : 전달받은 파라미터를 강제로 Model에 담아서 전달
  • RedirectAttributes는 일회성으로 데이터를 전달하는 용도로 사용

 

 

 

 

위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.

 

코드로 배우는 스프링 웹 프로젝트 - YES24

이 책은 Spring Framework(이하 스프링)를 사용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책이다. 웹 프로젝트라고 거창하게 표현하지만, 좀 더 구체적으로는 스프링으로 웹

www.yes24.com

 

 

 

 

 
Comments