250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- shared lock
- SQL프로그래밍
- BOJ
- 다대일
- 지연로딩
- 즉시로딩
- querydsl
- dfs
- 다대다
- 연결리스트
- 이진탐색
- PS
- 스토어드 프로시저
- JPQL
- 스프링 폼
- 데코레이터
- exclusive lock
- 연관관계
- 비관적락
- fetch
- 동적sql
- 일대다
- 낙관적락
- execute
- CHECK OPTION
- eager
- 백트래킹
- FetchType
- 힙
- 유니크제약조건
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
세션 저장소로 데이터베이스 사용하기 본문
728x90
애플리케이션을 재실행하면 로그인이 풀린다.
이는 세션이 내장 톰캣의 메모리에 저장되기 때문이다.
기본적으로 세션은 WAS의 메모리에서 저장되고 호출된다.
메모리에 저장되다 보니 내장 톰캣처럼 애플리케이션 실행 시 실행되는 구조에선 항상 초기화가 된다.
이 외에도, 2대 이상의 서버에서 서비스하고 있다면 톰캣마다 세션 동기화 설정을 해야만 한다.
그래서 현업에서는 세션 저장소에 대해 다음의 3가지 중 한 가지를 선택한다.
1) 톰캣 세션을 사용한다.
- 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식이다.
- 톰캣(WAS)에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 설정이 필요하다.
2) MySQL과 같은 데이터베이스를 세션 저장소로 사용한다.
- 여러 WAS 간의 공용 세션을 사용할 수 있는 가장 쉬운 방법이다.
- 많은 설정이 필요 없지만, 결국 로그인 요청마다 DB IO가 발생하여 성능상 이슈가 발생할 수 있다.
- 보통 로그인 요청이 많이 없는 백오피스 , 사내 시스템 용도에서 사용한다.
3) Redis, Memcached와 같은 메모리 DB를 세션 저장소로 사용한다.
- B2C 서비스에서 가장 많이 사용하는 방식이다
- 실제 서비스로 사용하기 위해서는 Embedded Redis와 같은 방식이 아닌 외부 메모리 서버가 필요하다.
2번, 데이터베이스를 세션 저장소로 사용하기 위해
spring-session-jdbc를 의존성 등록해준다.
implementation 'org.springframework.session:spring-session-jdbc'
로그인 테스트 시 다음과 같은 에러가 발생했다면
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "SPRING_SESSION" not found; SQL statement:
DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ? [42102-200]
다음 코드를 추가해주면 된다.
spring.session.jdbc.initialize-schema=always
'web.etc' 카테고리의 다른 글
JWT (0) | 2023.02.28 |
---|---|
80번포트로 들어오는 요청을 8080번포트로보내라! (0) | 2023.02.15 |
pythonanywhere - 배포하기 (0) | 2022.06.09 |
CORS (0) | 2022.05.28 |
맥에서 프로세스 종료하기 (포트 닫기) (0) | 2022.05.17 |