[Spring] Cookie & Session

Jungwoong (David) Yoon·2023년 8월 4일

Spring

목록 보기
1/4

HTTP의 기본 특성 비연결성무상태성 때문에, 서버는 클라이언트를 기억하지 못한다. 하지만 웹을 개발하다보면 때때로 서버가 클라이언트를 기억해줘야하는 순간들이 필요하다.

  • 로그인, 사용자 인증, 등등...

위와 같은 상황을 처리하기 위해 웹에서 cookie나 session을 이용하여 상태를 유지한다.

그럼 Spring에서는 cookie와 session을 어떻게 사용하는지 알아보자.



기존 servlet에서 쿠키에 저장된 값을 가져오려면,
Cookie[] cookieList = request.getCookies()

와 같은 형식의 코드로 쿠키 전체 리스트를 가져와 반복문을 통해 찾고자하는 key 값을 가진 쿠키를 찾아내야 했다.

그런데, Spring에서는 쿠키값을 사용해야 하는 메소드 내부에 @CookieValue 애노테이션을 붙인 변수를 파라미터로 넘기면 알아서 맞는 cookie 값을 매핑해준다.

@CookieValue Long id
// OR
@CookieValue("id") Long userId

Session


Session 저장

  1. HttpServletRequest.getSession() 을 통해 HttpSession 객체를 생성 후,
  2. HttpSessionsetAttribute() 을 사용해 세션에 저장
@PostMapping("/login")
public String login(HttpServletRequest request) {
	...
    
	// 사용자 확인 성공 시, 세션에 저장
    HttpSession session = request.getSession();
    session.setAttribute("user", loginUser);
	
    ...
 }

@SessionAttribute

컨트롤러 밖 (인터셉터 또는 필터 등) 에서 만들어 준 세션 데이터에 접근할 때 사용한다.

@GetMapping("/account")
public String generateForm(@SessionAttribute(required = false) User loginUser) {
	...
}

@SessionAttributes

해당 컨트롤러 내에서만 동작.

  • 즉, 해당 컨트롤러 안에서 다루는 특정 모델 객체를 세션에 넣고 공유할 때 사용.
@Controller
@SessionAttributes({"a", "b", "c", "d"}) 
public class Controller {
	...
}
profile
깨부하는 개발자

0개의 댓글