일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CS
- 정보처리기사
- package-private
- 세마포어
- 뮤텍스
- 메모리
- 컴퓨터공학
- Effective Java
- 알고리즘
- 스터디
- 신입사원
- 개발
- 프로그래밍
- 신입
- Public
- 자바
- java
- 디지털
- 깃
- IT
- 컴퓨터과학
- 운영체제
- 공채
- 우리카드
- OS
- 깃허브
- spring
- 이펙티브 자바
- github
- 스프링
- Today
- Total
주니어 개발자 성장기
2. Spring Session 본문
Overview
이번에는 Spring Session을 쓰는 이유와 도입 과정에 대해 다룬다.
Session in Spring Security
기본적으로 Spring Security
에서는 세션 저장소로 Tomcat
서버가 사용된다. 즉, 메모리에 Session
이 저장된다.
이 때, JSESSION 이라는 이름으로 활용되며, 브라우저는 Set-Cookie
헤더로 JSESSIONID
를 받게 된다.
구체적인 세션 생성 내용은 아래를 통해 학습할 수 있다. 정리가 잘 되어 있다.
Session Management in Tomcat - Junhyunny’s Devlogs
문제는 메모리(내장 톰캣)에 Session 정보를 저장하다보니 분산 환경에서 각 WAS가 갖는 Session
정보가 다르기 때문에 분산 환경의 이점을 활용할 수가 없게 된다.(서버 과부하 또는 세션 불일치 문제가 발생)
그래서 분산 환경에서는 Session Clustering
을 사용하게 된다. 문제는 톰캣으로 세션 클러스터링 하는 방법이 꽤 만만치 않아 보인다. 굳이 알고 싶다면 아래 링크에서 확인 해볼 수 있다. (나는 별로 안알고 싶다.)
‘톰캣 세션 클러스터링’ 사용 방법 알아보기 - 디딤365
Spring Session
이런 상황에서 최선의 대안으로 Spring Session을 접했다.
Spring Session :: Spring Session (공식 문서)
Spring Session은 유저의 세션 정보를 관리하기 위한 API와 구현체를 제공한다.
Spring Session provides an API and implementations for managing a user’s session information.
공식 문서를 요약하면 HttpSession
의 구현체를 제공하면서 Session Clustering
, Session Management
을 더욱 쉽게 만들어 준다고 한다. 또한, RDB, NoSQL, Redis 등 다양한 저장소를 지원한다.
의존성 추가
저번 포스팅에 build.gradle
에 Spring Session 을 추가하지 않아서 의존성 추가가 필요하다.
우선 DB를 Session Storage
로 구축하려고 하기 때문에 Spring Session의 jdbc 의존성을 추가해 준다.
//Spring Session
implementation 'org.springframework.session:spring-session-jdbc'
주의할 점은 start.spring.io 에서 Spring Session 의존성을 추가하면 의존성에 다음과 같이 추가된다.
//Spring Session
implementation 'org.springframework.session:spring-session-core'
문제는 이걸 의존성으로 추가하면 이것만으로는 jdbc 설정이 안된다. 한 4시간 동안 삽질한 끝에 알아냈다.
RDB를 Session Storage
로 사용하고자 한다면 뒤에 core가 아닌 jdbc 가 붙은 의존성을 추가해야 편리하다. (core만 쓰면 나머지는 수동으로 구현해야하는 듯 하다.)
그리고 /src/main/resources/application.properties/
에 다음과 같은 설정을 추가하라고 되어 있다.
spring.session.store-type=jdbc # Session store type.
문제는 이 프로퍼티가 core
와 jdbc
둘 다에서 인식이 안된다는 것이다. 그래서 찾아 봤더니 아마도 더 이상 해당 프로퍼티를 지원하지 않는 것 같다. (왜 공식문서를 방치해 놓는 지는 모르겠다.)
자세한 사항은 아래를 참고
결과
이렇게 까지 한 후에 H2 콘솔을 확인해보면 H2 DB에 SPRING_SESSION
, SPRING_SESSION_ATTRIBUTES
2가지 테이블이 생성되어 있으며 Session이 생성될 때마다 H2 DB에 저장된다. 성공!
다음 포스팅에서는 Spring Security를 사용한 일반 로그인을 다뤄 보려고 한다. See you next time!
'예제 > Session' 카테고리의 다른 글
4. Spring Security - 인증 과정 이해하기 (2) (0) | 2023.06.15 |
---|---|
3. Spring Security - 인증 과정 이해하기 (1) (0) | 2023.05.27 |
1. 설정 (0) | 2023.05.16 |
0. 프로젝트 목적 (0) | 2023.05.16 |