
http는 stateless이므로, 상태를 유지하지 않는다. 화면의 이동에 대한 값 유지가 필요한 경우가 많은데 http는 이를 지원하지 않는다. 이것을 가능하게 해주는것이 cookie와 session이다.
// Session이 있으면 가져오고 없으면 null return
HttpSession session = httpServletRequest.getSession(true)
HttpSession session = httpServletRequest.getSession(false)
session.setAttribute("email"), email)
session.setMaxInactiveInterval(1800)
///email은 가져오고 싶은 session의 key
session.getAttrivute("email")
public String checkSession(@SessionAttribute(name="email", required = false) String email, HttpServletRequest request) {
if(email == null) {
return "Login please";
}else {
return email;
}
}
HttpSession session = request.getSession(false);
session.invalidate();
session.removeAttribute("email");
SpringBoot의 was의 기본값은 Tomcat이다. 이 Tomcat의 "SESSION.ser" 파일에 session의 상태가 저장된다.
- 먼저 MySQL과 연동한 뒤 spring-session-jdbc을 종속성에 추가해줘야 한다.
![]()
- MySQL까지 연동하고 server를 실행시키면 다음과 같이 SPRING_SESSION과 SPRING_SESSION_ATTRUBUTES가 자동으로 생성된다.
❗️ 처음에 session 저장소를 이용하여 postman을 통해 여러 user가 다른 이메일 계정으로 로그인 하였을 때 각 user마다 session을 db에 저장하고자 하였는데 계속 다른 계정으로 session을 생성해도 기존의 session에서 update가 되었다. 뭐가 문제인지 찾을려고 엄청 검색해도 알 수가 없어서.. 포기할려던 참에....
postman header 구성을 살펴보았더니 sessionId가 바뀌지 않고 계속 똑같은걸 보게 되었다. 그래서 검색해보니 postman에서 sessionId를 바꾸기 위해서는 수동으로 Cookie를 수정해줘야 했던거다..... ㅠㅠㅠ 그래서 수동으로 sessionId를 수정하니 내가 원했던대로 다양한 유저가 로그인 했을때 각 user의 session이 저장되었다 완성되었다..
저장 공간의 용량
확장성의 문제
이를 해결하기 위해 JWT 라는 로그인 방식을 도입
[Spring Boot] Session을 사용한 로그인 구현
[Spring Boot] Session과 Cache의 기본 저장소 !
[Spring] 스프링 상태유지 기술(쿠키, 세션)