@SessionAttributes 어노테이션은 Spring MVC에서 사용되며, 특정 모델 속성을 HTTP 세션에 자동으로 추가할 수 있도록 지정합니다. 이렇게 하면 사용자의 세션 간에 해당 속성을 유지할 수 있으며, 사용자가 여러 요청을 하더라도 일관된 상태를 유지할 수 있게 돕습니다.
이 어노테이션은 컨트롤러 클래스 레벨에 적용되며, 어떤 모델 속성이 세션에 저장될지 지정하는 데 사용됩니다.
예를 들어, 사용자의 쇼핑 카트 정보를 세션에 저장하려는 경우 다음과 같이 사용할 수 있습니다.
@Controller
@SessionAttributes("cart")
public class ShoppingCartController {
@ModelAttribute("cart")
public Cart initializeCart() {
return new Cart(); // 새로운 쇼핑 카트 생성
}
@RequestMapping("/addProduct")
public String addProduct(@ModelAttribute("cart") Cart cart, ...) {
// 상품을 카트에 추가하는 로직
return "redirect:/cart";
}
}
이 예제에서는 "cart"
모델 속성이 세션에 자동으로 저장됩니다. 사용자가 요청을 다시 할 때마다 동일한 카트 인스턴스가 사용되므로, 사용자의 상태가 여러 요청간에 유지됩니다.
@SessionAttributes
는 HTTP 세션에 저장될 모델 속성의 이름만 지정하므로, 해당 이름과 일치하는 속성이 모델에 반드시 있어야 합니다.
세션에 저장되는 속성은 클라이언트 요청 간에 유지되므로, 사용하지 않게 되면 명시적으로 제거해야 할 수도 있습니다. 그렇지 않으면, 메모리 누수가 발생할 수 있습니다.
이 어노테이션은 상태를 유지해야 하는 웹 어플리케이션의 특정 부분에 유용하게 사용될 수 있지만, 과도한 사용은 애플리케이션의 복잡성을 높일 수 있으므로 주의가 필요합니다.
@ModelAttribute 어노테이션은 Spring MVC에서 사용되며, 컨트롤러 메서드의 매개변수나 메서드 정의에 사용될 수 있습니다. 이 어노테이션의 용도는 다음과 같습니다.
컨트롤러 메서드의 매개변수에 @ModelAttribute를 사용하면, 해당 매개변수가 HTTP 요청의 속성에서 자동으로 바인딩되어야 함을 나타냅니다. 이를 사용하여 HTML 폼에서 전송된 데이터를 도메인 객체로 자동으로 바인딩할 수 있습니다.
예를 들어, 사용자가 폼을 통해 상품 정보를 제출하는 경우 다음과 같이 사용할 수 있습니다:
@PostMapping("/addProduct")
public String addProduct(@ModelAttribute Product product) {
// 제품 정보 처리
return "redirect:/products";
}
여기서 Product 객체는 HTTP 요청의 파라미터와 자동으로 매핑되며, 해당 필드에 대한 값들이 자동으로 채워집니다.
@ModelAttribute가 적용된 메서드는 해당 컨트롤러의 모든 요청이 처리되기 전에 호출됩니다. 이러한 메서드의 반환 값은 자동으로 모델에 추가되며, 뷰에서 접근 가능하게 됩니다.
예를 들어, 모든 뷰에서 사용할 수 있는 공통 속성이 필요한 경우 다음과 같이 사용할 수 있습니다.
@ModelAttribute("username")
public String getUsername() {
return "JohnDoe"; // 이 값은 모든 뷰에서 "username" 속성으로 접근 가능
}
@SessionAttributes와 함께 사용하면, @ModelAttribute는 세션에 저장된 속성에 접근하는 데 사용될 수 있습니다. 이 경우, @ModelAttribute로 지정된 매개변수는 세션에서 해당 이름의 속성을 찾게 되며, 해당 속성이 없는 경우 모델에서 찾게 됩니다.
@ModelAttribute는 Spring MVC에서 매우 유용하며, 요청 처리의 유연성을 크게 높일 수 있습니다. 요청 파라미터의 자동 바인딩, 공통 모델 속성의 정의, 세션 속성과의 연동 등 다양한 측면에서 활용될 수 있습니다.