Spring MVC 핸들러 메소드 @SessionAttributes

Spring Web MVC

백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글

@SessionAttributes

@SessionAttributes는 모델 정보를 HTTP 세션에 저장해주는 애노테이션이다.

가령 다음과 같이 사용할 수 있다.

@Controller
@SessionAttributes("event")
public class SampleController {
    @GetMapping("/events")
    @ResponseBody
    public Event getEvent(Model model) {
        Event newEvent = new Event();
        newEvent.setLimit(50);
        model.addAttribute("event",newEvent);
        return event;
    }
}

HttpSession을 메소드 Argument로 직접 사용할 수 있지만 @SessionAttributes 애노테이션에 설정한 이름에 해당하는 모델 정보를 자동으로 세션에 넣어준다.

왜 세션에 모델을 넣는가?

어떤 상황에 세션에 모델을 저장해놓을까?

이 기능을 왜 쓰는지 알아보자.

여러가지 이유가 있겠지만, 가령 예를 들어보자.

첫 번째 페이지에서 이름을 입력받고, 두 번째 페이지에서 닉네임을 입력받고, 세 번째 페이지에서 나이를 입력받는 웹사이트를 상상해보라.

이 때 두 번째 페이지에서는 첫 번째 페이지에 입력한 이름을 표시해주고, 세 번째 페이지에서는 첫 번째, 두 번째 페이지에서 입력한 이름과 닉네임을 표시하고 싶은 경우가 있다고 하자.

이 경우 세션에 모델을 저장해놓으면 꺼내서 재활용 할 수 있기 때문에 편리할 수 있다.

@SessionAttributes는 Method Argument가 아니잖아?

그렇다. 그래서 @SessionAttributes와 같이 사용할 수 있는 Method Argument로 SessionStatus가 존재한다.

@Controller
@SessionAttributes("event")
public class SampleController {
    @GetMapping("/events")
    @ResponseBody
    public Event getEvent(Model model, SessionStatus sessionStatus) {
        Event newEvent = new Event();
        newEvent.setLimit(50);
        model.addAttribute("event",newEvent);
        sessionStatus.setComplete();
        return event;
    }
}

sessionStatus.setComplete()는 세션이 끝나는 시점의 핸들러에서 호출함으로써 세션 처리 완료를 알려주고 세션을 비울 때 사용한다.

Reference

인프런 백기선님의 스프링 Web MVC



© 2022. by minkuk

Powered by minkuk