티스토리 뷰

반응형

로그인을 한 후 애플리케이션을 재실행하면 로그아웃이 되어있다.

 

그 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문이다.

 

세션은 WAS의 메모리에 저장되고 호출되기 때문에, 실행 시 항상 초기화가 된다.

 

서버가 한 개가 아니라 다수의 서버를 사옹하는 경우 세션 동기화 설정을 해야 한다.

 

세션 저장소는 다음 3가지 방식 중 하나로 선택된다.

 

1) WAS 세션 사용

  • 다른 설정이 없으면 기본으로 사용되는 방식
  • WAS에 저장이 되기 때문에 다수의 WAS를 사용하는 경우 세션 공유 설정이 필요

 

2) 데이터베이스 사용 ⇐ 사용할 방식

  • 여러 WAS 간 공용 세션 사용 가능
  • 많은 설정이 필요 없음
  • 요청마다 BD IO가 발생하여 성능상 이슈가 발생할 수 있음
  • 로그인 요청이 많이 없는 경우에 사용

 

3) Redis, Memacache와 같은 메모리 DB 사용

  • B2C 서비스에서 가장 많이 사용
  • 실제 서비스로 사용하기 위해서는 Embedded Redis와 같은 방식이 아닌 외부 메모리 서버가 필요
  • 클라우드를 사용해서 배포를 할 때 더 많은 사용료를 지불해야 함

 

build.gradle에 spring-session-jdbc 등록

compile('org.springframework.session:spring-session-jdbc')

위의 내용을 이미지와 같이 dependencies에 추가해 준다.

 

새로고침 버튼

그리고 새로고침을 한다.

 

spring.session.store-type=jdbc

application.properties에 위의 내용을 추가한다.

 

 

실행하고 로그인을 한 뒤 h2-conole로 접속하면 SPRING_SESSION, SPRING_SESSION_ATTRIBUTES라고 2개의 테이블이 생성된 것을 알 수 있다. (JPA가 세션 테이블을 자동 생성하였다.)

 

재실행을 하면 H2도 재시작이 되어 세션이 풀리지만, AWS에 배포를 하면 AWS의 데이터 서비스 RDS을 사용하여 세션이 풀리지 않는다.

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함