본문 바로가기
FullStack/41. WEB.WAS

톰켓 MariaDB를 이용한 세션 관리

by nakanara 2022. 1. 21.
반응형

톰켓을 이용한 클러스터링을 구성을 하게 된다면, 고정되어 있는 서버의 경우 TCP로 설정이 가능하지만,
클라우드 관점에서 스케일 In/Out(동적으로 변화) 작업이 이루어진다면 세션을 관리하기가 어려워진다.

대중적으로 Redis기반의 세션 관리를 많이 구성하고 있었지만,
현재 마리아 디비를 데이터베이스를 사용하고 있는 환경이기 때문에 마리아 디비를 기준으로 설정하였다.

톰켓 8.5의 경우 하위 버전의 경우 org.apache.catalina.session.DataSourceStore 가 없을 수 있으므로,
클래스를 찾을 수 없다고 표시된다면 버전 확인이 필요하다.

  1. 테이블 생성
create table tomcat_sessions (

    session_id     varchar(100) not null primary key,
    valid_session  char(1) not null,
    max_inactive   int not null,
    last_access    bigint not null,
    app_name       varchar(255),
    session_data   MEDIUMBLOB,
    KEY kapp_name(app_name)
);
  1. conf/context.xml Resource 선언
<Resource name="appjdbc" 
    auth="Container"
    type="javax.sql.DataSource" 
    driverClassName="org.mariadb.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/app"
    username="app_id" 
    password="password" 
    initialSize="10"
    maxTotal="100"
    maxIdle="10"
    maxWaitMillis ="-1"
    removeAbandonedTimeout="300"
    validationQuery="SELECT 1"
    validationQueryTimeout="1000"
    testOnBorrow="true"
    timeBetweenEvictionRunsMillis="600000"
    />
  1. conf/context.xml PersistentManager 설정
<Manager className="org.apache.catalina.session.PersistentManager"
    maxIdleBackup="10">

    <!-- Tomcat 8.5.x 이상 -->
    <Store className="org.apache.catalina.session.DataSourceStore"
            dataSourceName="appjdbc"
            sessionAppCol="app_name"
            sessionDataCol="session_data"
            sessionIdCol="session_id"
            sessionLastAccessedCol="last_access"
            sessionMaxInactiveCol="max_inactive"
            sessionTable="tomcat_sessions" 
            sessionValidCol="valid_session" />
    </Manager>

참고

#tomcat #session #클러스터링

반응형