참고 : https://pupli.net/2017/03/06/how-to-configure-spring-session-with-jdbc-for-mysql/
Springboot에서 Session 정보를 Mysql DB에 연동하는 방법에 대해 적어 보겠습니다.
Dependency는 다음과 같습니다.
저는 Maven을 사용합니다.
pom.xml
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
application.properties 파일에 다음과 같이 작성합니다.
spring.session.store-type=jdbc
server.compression.enabled=true
server.use-forward-headers=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/css,application/javascript
logging.file=logbook-server.log
spring.datasource.url=jdbc:mysql:DB서버 IP/DB 이름
spring.datasource.username=ID입력
spring.datasource.password=PW입력
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# Number of ms to wait before throwing an exception if no connection is available.
spring.datasource.tomcat.max-wait=10000
# Maximum number of active connections that can be allocated from this pool at the same time.
spring.datasource.tomcat.max-active=50
# Validate the connection before borrowing it from the pool.
spring.datasource.tomcat.test-on-borrow=true
spring.jpa.hibernate.ddl-auto=create // 기존에 생성된 테이블들 삭제하고 새로 만드는 옵션
// jpa, 하이버네이트에 대한 간략한 설명은 요기 블로그를 보쟝. http://bcho.tistory.com/906
Table을 2가지 만든다.
SPRING_SESSION에는 생성시간, 등의 Session의 기본 속성에 대한 데이터를 저장하고,
SPRING_SESSION_ATTRIBUTES에는 유저의 Token Key와 저장한 데이터의 Key/Value 정보가 저장된다.
CREATE TABLE SPRING_SESSION (
SESSION_ID CHAR(36),
CREATION_TIME BIGINT NOT NULL,
LAST_ACCESS_TIME BIGINT NOT NULL,
MAX_INACTIVE_INTERVAL INT NOT NULL,
PRINCIPAL_NAME VARCHAR(100),
CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (SESSION_ID)
) ENGINE=InnoDB;
CREATE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (LAST_ACCESS_TIME);
CREATE TABLE SPRING_SESSION_ATTRIBUTES (
SESSION_ID CHAR(36),
ATTRIBUTE_NAME VARCHAR(200),
ATTRIBUTE_BYTES BLOB,
CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_ID, ATTRIBUTE_NAME),
CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_ID) REFERENCES SPRING_SESSION(SESSION_ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE INDEX SPRING_SESSION_ATTRIBUTES_IX1 ON SPRING_SESSION_ATTRIBUTES (SESSION_ID);
테이블 이름은 꼭 위와 같이 해야 한다. 기본 옵션으로 저 이름으로 되어 있는 것 같다.
다르게 해보려 했으나 옵션 설정을 아직 잘 모르겠다. 아시는 분은 댓글 부탁드려욧!
이제 Jdbc Session을 적용시켜야 한다.
이것은 SpringBoot에서는 간단히 다음과 같이 @EnableJdbcHttpSession 어노테이션을 @Configuration 어노테이션과 함께 작성해 주면 적용된다.
@Configuration
@EnableJdbcHttpSession
public class HttpSessionConfig {
}
@EnableJdbcHttpSession에 대한 설명은 Spring문서 에서 자세히 확인할 수 있는데,
@Configuration 어노테이션이 달린 클래스와 함께 사용하면
SessionRepositoryFilter라는 클래스를 Bean으로 등록해 활성화시킨다고 한다.
SessionRepositoryFilter클래스는 Spring 서버가 HttpSession을 지원하도록 활성화시킨다.. 정도로 이해하고 있습니다.
이렇게 구성하면 DB에 세션 정보가 잘 저장되는 것을 볼 수 있습니다.
'Web > Spring' 카테고리의 다른 글
Annotations (0) | 2021.03.25 |
---|---|
[Spring] MVC 구조 Model(DTO(VO) DAO BO) Controller View (0) | 2018.01.30 |
[Spring] @Autowired와 @Resource의 차이 (1) | 2017.11.19 |
[Spring] Annotation으로 Bean 등록하기 (0) | 2017.11.19 |
[Spring boot] spring과 spring boot 개발 방식의 차이 (0) | 2017.11.19 |
[SpringBoot] STS 이용해서 Spring Boot 시작하기(Gradle 사용) (0) | 2017.10.22 |