티스토리 뷰
반응형
로그인을 한 후 애플리케이션을 재실행하면 로그아웃이 되어있다.
그 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문이다.
세션은 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
링크
TAG
- java
- go 특징
- 코딩테스트
- hashcode
- Python
- 주생성자
- 1차 인터뷰
- postman collection
- solidity
- Squash and merge
- mysql
- python3
- string
- pm.test
- 확장 함수
- Basic Type
- downTo
- squash merge
- 2차 인터뷰
- pm.expect
- 코틀린
- graphql
- postman
- DGS Framework
- 네이버 2022 공채
- git
- Kotlin
- postman tests
- Kotlin In Action
- github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함