스프링 부트와 AWS로 혼자 구현하는 웹 서비스
: 인텔리제이, JPA, JUnit 테스트, 그레이들, 소셜 로그인, AWS 인프라로 무중단 배포까지
이동욱 저
Table of Content
현재 서비스의 상태
어플리케이션을 재실행하면 로그인이 풀리게 된다.
→ 그 이유는 Session이 내장 톰캣의 메모리에 저장되기 때문
•
기본적으로 세션은 실행되는 WAS(Web Application Server)의 메모리에서 저장되고 호출
•
따라서 내장 톰캣처럼 어플리케이션이 실행 시 실행되는 구조에서는 항상 초기화 됨(휘발성)
•
이는 배포 또는 서버를 재시작 할 때마다 초기화 된다는 말
•
2대 이상의 서버에서 서비스 한다면 그 2개의 세션이 동기화(일관적으로 작동) 설정 되어야 한다.
따라서 현업에서는 세션 저장소에 대해 다음 3가지 중 한가지를 선택한다고 한다.
1.
톰캣 세션을 사용
a.
일반적으로 별다른 설정하지 않을때 기본 선택되는 방식
b.
톰캣들간의 세션 공유를 위한 추가설정 필요(동기화 필요)
2.
MySQL과 같은 데이터베이스를 세션 저장소로 사용
a.
여러 WAS간 공용 세션을 사용 할 수 있는 쉬운 방법
b.
많은 설정은 필요없더라도 로그인 요청마다 DB에 I/O가 발생하여 성능상 이슈가 발생 가능
c.
로그인 요청이 많이 없는 백오피스, 인트라넷 시스템 용도에서 적절
3.
Redis, Memcached와 같은 메모리 DB를 세션 저장소로 사용
a.
B2C 서비스에서 가장 많이 사용하는 방식
b.
실제 서비스를 사용하기 위해서는 외부 메모리 서버가 필요
데이터베이스를 세션 저장소로 사용해보기
JDBC 의존성 등록 build.gradle
우선 build.gradle에 의존성을 추가하여 JDBC로 DB커넥터를 사용하고자 한다.
dependencies {
...
// JDBC
implementation 'org.springframework.session:spring-session-jdbc'
}
...
Java
복사
application.properties에서 JDBC로 세션 저장소를 선택
application.properties 에서 세션 저장소를 JDBC로 설정
spring.session.store-type=jdbc
Java
복사
위 처럼 설정하면 이제 세션은 JDBC에 따라 데이터베이스에서 저장되게 된다.
하지만 아직은 DB를 H2(인메모리) 데이터베이스를 사용하고 있기 때문에 동일하게 재시작하면 DB자체도 휘발되기 때문에 로그인 세션이 사라지게 되지만 추후 MySQL로 데이터베이스를 연결하면 정상적으로 데이터베이스에 세션이 저장되게 된다.
Related Posts
Search