-
세션 저장소로 데이터베이스 사용하기IT/SpringBoot&AWS 2022. 5. 12. 08:40
참고도서 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
현재까지 [ 기본 페이지 접속 > OAuth 2를 사용한 로그인 ] 를 구현해봤다.
그런데 내장 톰캣을 재실행하면 로그인이 풀리는 문제가 있다.
원인 : 세션이 내장 톰캣의 메모리에 저장되기 때문
기본적으로 HTTP는 stateless 특성을 가지고 있기 때문에 서버<->클라이언트 1번의 요청/응답 후 연결이 끊어진다.
그래서 일반적으로 로그인 후 사용자 상태를 유지하기 위해서 세션에 사용자 정보를 저장해서 처리한다.
다시 정리해보면 아래와 같다.
1. 웹 페이지에 최초 접속 시 톰캣에서 쿠키에 JSESSIONID를 내려줌
- 아래 캡쳐와 같이 최초 페이지 접속 시 톰캣에서 908~A4B1 인 JSESSIONID를 통해 사용자를 구분한다.
2. 로그인하면 톰캣에서 다시 JSESSIONID를 내려주고, 해당 값은 톰캣의 메모리에 저장
3. 탭을 새로 열어서 동일 페이지 접속하는 경우에도, 브라우저는 로컬에 저장되어 있는 JSESSIONID 쿠키 값을 request에 실어서 보내고, 톰캣은 새로운 JSESSIONID를 생성하지 않음 (= response에 새로운 JSESSINID를 보내지 않음)
4. 로그아웃을 하면 기존 JSESSIONID 쿠키는 폐기되고 페이지 재접속 시 새로운 JSESSIONID를 response로 내려줌
세션은 실행되는 톰캣과 같은 WAS 내 메모리에 저장되고 호출되기 때문에, WAS를 재실행하는 경우 기존 정보가 사라지는 문제가 있다.
또 WAS가 1대가 아닌 2대 이상인 경우, 각 장비간 세션 공유를 위한 추가 설정이 필요하다.
그래서 별도 세션 관리하는 서버를 두고 해당 서버와 통신하는 방법을 사용하거나, 사용자가 많지 않은 경우 데이터베이스에 세션 저장소를 두고 처리하는 방법이 있는데 해당 도서에서는 데이터베이스를 사용한 세션 저장 방법을 안내하고 있다.
참고: https://csslab.tistory.com/121
'IT > SpringBoot&AWS' 카테고리의 다른 글
[이슈] IntelliJ - DB Browser 통한 AWS RDS 접속 오류 해결 방안 (0) 2022.05.12 [AWS] 서버 HOST명 변경하기 (0) 2022.05.12 [용어] 템플릿 엔진이란? (0) 2022.05.11 [IntelliJ] error: no suitable method found for assertThat(String) 해결 방법 (0) 2022.05.10 [IntelliJ] error: variable name not initialized in the default constructor private final String name; 해결 방법 (0) 2022.05.10