HTTP의 비상태성(Stateless)을 극복하고 사용자 상태를 유지하기 위해 사용하는 세션(Session) 기술을 정리했다.
Spring MVC에서 세션을 활용한 로그인 구현 방법을 분석했다.
HttpSession을 통한 상태 관리
자바 웹 개발에서는 HttpSession 객체를 사용하여 서버 메모리에 사용자 정보를 저장한다.
@PostMapping("/login")
public String login(String id, String pw, HttpServletRequest request) {
User user = userService.authenticate(id, pw);
if (user != null) {
// 1. 인증 성공 시 세션 생성 및 정보 저장
HttpSession session = request.getSession();
session.setAttribute("loginUser", user);
return "redirect:/home";
}
return "loginFail";
}
@GetMapping("/mypage")
public String myPage(HttpSession session) {
// 2. 세션 정보 확인을 통한 로그인 상태 체크
User user = (User) session.getAttribute("loginUser");
if (user == null) return "redirect:/login";
return "mypage";
}
세션 기반 로그인 프로세스
- 로그인 요청: 사용자가 인증 정보를 전송한다.
- 세션 생성: 서버는 인증 성공 시 고유 세션 ID를 생성하여 서버 메모리에 저장한다.
- 세션 ID 전달: 생성된 ID를 쿠키에 담아 브라우저로 전송한다.
- 상태 유지: 브라우저는 이후 요청 시 세션 ID를 포함한 쿠키를 전송하며, 서버는 이를 통해 사용자를 식별한다.
세션 관리 지침
로그아웃 시 session.invalidate()를 호출하여 정보를 제거해야 한다.
세션은 서버 자원을 소모하므로 저장 데이터 크기를 적절히 조절해야 한다.
사용자 편의성과 서버 부하 간의 균형 유지가 세션 관리의 핵심인 것 같다.