세션 저장소로 데이터베이스 사용하기

nn·2022년 2월 4일
0
post-custom-banner

어플리케이션을 재실행하면 로그인이 풀리는 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문입니다.

메모리에 저장되다보니 내장 톰캣처럼 어플리케이션 실행 시 실행되는 구조에서는 배포할 때마다 톰캣이 재시작 될 수밖에 없습니다.

또한 만약 두대 이상의 서버에서 서비스하는 경우엔 톰캣마다 세션을 동기화 해주어야합니다.

세션 저장소를 사용하는 방법
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를 사용하게 되므로 세션이 풀리지 않습니다.

profile
내가 될 거라고 했잖아
post-custom-banner

0개의 댓글