HTTP의 기본 특성 비연결성과 무상태성 때문에, 서버는 클라이언트를 기억하지 못한다. 하지만 웹을 개발하다보면 때때로 서버가 클라이언트를 기억해줘야하는 순간들이 필요하다.
위와 같은 상황을 처리하기 위해 웹에서 cookie나 session을 이용하여 상태를 유지한다.
그럼 Spring에서는 cookie와 session을 어떻게 사용하는지 알아보자.
Cookie[] cookieList = request.getCookies()
와 같은 형식의 코드로 쿠키 전체 리스트를 가져와 반복문을 통해 찾고자하는 key 값을 가진 쿠키를 찾아내야 했다.
그런데, Spring에서는 쿠키값을 사용해야 하는 메소드 내부에 @CookieValue 애노테이션을 붙인 변수를 파라미터로 넘기면 알아서 맞는 cookie 값을 매핑해준다.
@CookieValue Long id
// OR
@CookieValue("id") Long userId
HttpServletRequest.getSession() 을 통해 HttpSession 객체를 생성 후,HttpSession 의 setAttribute() 을 사용해 세션에 저장@PostMapping("/login")
public String login(HttpServletRequest request) {
...
// 사용자 확인 성공 시, 세션에 저장
HttpSession session = request.getSession();
session.setAttribute("user", loginUser);
...
}
컨트롤러 밖 (인터셉터 또는 필터 등) 에서 만들어 준 세션 데이터에 접근할 때 사용한다.
@GetMapping("/account")
public String generateForm(@SessionAttribute(required = false) User loginUser) {
...
}
해당 컨트롤러 내에서만 동작.
@Controller
@SessionAttributes({"a", "b", "c", "d"})
public class Controller {
...
}