기본적으로 세션은 실행되는 WAS의 메모리에서 저장되고 호출됨
세션이 애플리케이션 실행 시 실행되는 구조인 내장 톰켓의 메모리에 저장되어 있어 항상 초기화됨
== 배포할 때마다 톰캣이 재시작됨
2대 이상의 서버에서 서비스하고 있으면 톰캣마다 세션 동기화 설정을 해야 함
세션 저장소
- 톰캣 세션
- 일반적으로 기본으로 선택되는 방식
- 톰캣(WAS)에 세션 저장돼서 2대 이상의 WAS가 구동되는 환경에서는 세션 공유를 위한 추가 설정이 필요함
- MySQL과 같은 데이터베이스
- 여러 WAS 간의 공용 세션 사용 가능한 가장 쉬운 방법
- 많은 설정이 필요 없지만 로그인 요청마다 DB IO가 발생해 성능 이슈 발생 가능
- 로그인 요청 많이 없는 백오피스, 사내 시스템 용도에서 사용됨
- Redis, Memcached와 같은 메모리 DB
- B2C 서비스에서 가장 많이 사용하는 방식
- 실제 서비스로 이용 위해서는 Embedded Redis와 같은 방식이 아닌 외부 메모리 서버가 필요함
spring-session-jdbc 등록
build.gradle
compile('org.springframework.session:spring-session-jdbc')
application.properties
spring.session.store-type=jdbc
h2-console에서 세션 위한 테이블 2개 (SPRING_SESSION, SPRING_SESSION_ATTRIBUTE)가 생성됨
스프링 재시작할 경우 H2도 재시작되어 세션이 풀림
-> AWS의 데베 서비스인 RDS 사용하면 풀리지 않음