세션 저장소로 데이터베이스 사용하기
어플리케이션을 재실행하면 로그인이 풀리는 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문입니다.
메모리에 저장되다보니 내장 톰캣처럼 어플리케이션 실행 시 실행되는 구조에서는 배포할 때마다 톰캣이 재시작 될 수밖에 없습니다.
또한 만약 두대 이상의 서버에서 서비스하는 경우엔 톰캣마다 세션을 동기화 해주어야합니다.
세션 저장소를 사용하는 방법
1) 톰캣 세션사용- 일반적으로 선택되는 방식 - 두대 이상의 WAS가 구동되면 톰캣들간의 세션 공유를 위한 추가 설정이 필요함.
2) MySQL 데이터베이스를 세션 저장소로 사용
- 여러 WAS간의 공용 세션을 사용할 수 있는 방법 - 많은 설정이 필요하진 않지만 로그인 요청마다 DB IO가 발생할 수 있음
3) Redis,Memcached와 같은 메모리 DB를 세션 저장소로 사용
- B2C 서비스에서 가장 많이 사용함 - 외부 메모리 서버가 필요함
위 세가지 방법중에서 데이터 베이스를 세션 저장소르 사용하여 진행하겠습니다.
데이터베이스를 세션 저장소로 사용하기
의존성 등록
build.gradel에 다음과 같이 spring-session-jdbc를 추가하겠습니다.
implementation('org.springframework.session:spring-session-jdbc')
프로퍼티 설정 추가
application.properties에 세션 저장소를 jdbc로 선택하도록 아래의 코드를 추가합니다.
spring.session.store-type=jdbc
H2 세션 스키마 확인
h2-console에 접속하면 세션을 위한 테이블이 두개 생성된 것을 볼 수 있습니다.
JPA로 인해 자동으로 생성되었기 때문에 별도의 추가 설정은 필요가 없습니다.
이후 AWS로 배포하면 AWS의 RDS를 사용하게 되므로 세션이 풀리지 않습니다.
Author And Source
이 문제에 관하여(세션 저장소로 데이터베이스 사용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nnoshel/세션-저장소로-데이터베이스-사용하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)