스프링세션

    스프링 세션 적용하기 (feat. filter)

    🔍 Session 정보 이용하기 ✏️ 1. 컨트롤러에서 HttpSession 클래스 이용하기 HttpSession 클래스를 파라미터로 받으면 session 정보를 사용할 수 있다. ✏️ 2. 필터 또는 인터셉터 이용하기 필자는 세션 정보를 거의 모든 요청 API에서 확인해야 한다. 따라서 Controller에서 session 정보를 불러오는 중복을 해결하기 위해 필터를 이용하였다. @Component class SessionFilter( private val redisSessionRepository: RedisSessionRepository, ): OncePerRequestFilter() { val log = logger() override fun doFilterInternal( request: Http..

    스프링 세션 - 이중 발급과, 인코딩된 세션

    🔍 트러블 슈팅 ✏️Key가 두 개 생성되는 문제 세션을 저장하는 로직은 다음과 같다. @Component class SessionFilter( private val redisSessionRepository: RedisSessionRepository, ): OncePerRequestFilter() { val log = logger() override fun doFilterInternal( request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain ) { val session = getSessionFromCookie(request) --- 1 if (session == null) { val sessionId = r..

    스프링 세션의 이해 - 등장 배경과 그 원리

    🔍 HttpSession ✏️ 세션이 왜 필요한가요? 웹에서 데이터를 전송하는 데 기본적으로 사용되는 HTTP는 본질적으로 상태가 저장되지 않는다. 즉, 동일한 사용자로부터 여러 요청이 들어와도 이를 인식하지 못한다. 그러나 웹 애플리케이션에서 사용자 인증, 장바구니 등과 같은 상태를 유지하는 것이 중요한 시나리오가 있다. 세션은 웹 애플리케이션이 특정 기간 동안 사용자를 인식하고 구분할 수 있게 함으로써 이러한 한계를 극복하는 데 중요한 역할을 한다. ✏️기존 세션의 문제점 전통적인 HttpSession은 컨테이너(ex. Tomcat) 에 종속되어 사용된다. 즉 컨테이너가 세션을 생성하고 애플리케이션에 세션 ID를 제공한다. 이런 방식은 기본적으로 클러스터링 환경에서 실행되는 경우 각 컨테이너가 자체 ..