[Tomcat] WAR 배포 환경에서 Redisson 으로 Session 공유하기

식빵·2023년 11월 19일
0

Tomcat Redisson 세션 공유 세팅법

공식문서에 을 참조해서 작성한 방법입니다.

1. ${TOMCAT_HOME}/conf/server.xml 내용 추가

server.xml 원래 있던 내용들은 생략하고, 필요한 부분만 작성해봤습니다.
추가!!! 라고 주석 단 부분만 잘 추가하면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <GlobalNamingResources>
    <!-- UserDatabase 부분은 default 로 있지만 생략함. -->
    
    <!-- 추가!!! -->
    <Resource name="bean/redisson"
              auth="Container"
              factory="org.redisson.JndiRedissonFactory"
              configPath="${catalina.base}/conf/redisson.yaml"
              closeMethod="shutdown"/>
  </GlobalNamingResources>
  
  <Service name="Catalina">
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        
        <!-- 자기 프로젝트에 맞게 추가!!! -->
        <Context path="/redisson_test_0" docBase="./redisson_test_0.war" reloadable="true" emptySessionPath="true" sessionCookiePath="/" sessionCookieName="REDISSON_JSESSIONID" />
        
        <!-- 자기 프로젝트에 맞게 추가!!! -->
        <Context path="/redisson_test_1" docBase="./redisson_test_1.war" reloadable="true" emptySessionPath="true" sessionCookiePath="/" sessionCookieName="REDISSON_JSESSIONID" />
      </Host>
    </Engine>
  </Service>
</Server>
  • <Context>emptySessionPath="true" sessionCookiePath="/" 를 꼭 추가해준다.
  • sessionCookieName 은 필수가 아니다, 세팅 안하면 우리가 흔히 아는
    JSESSIONID 를 세션쿠키로 사용한다.
  • docBase 에서 ./${TOMCAT_PATH}/webapps 디렉토리 경로를 의미합니다.
  • docBase 는 꼭 *.war 만 쓸 필요는 없습니다. 그냥 일반 디렉토리 경로로 적어줘도 됩니다.




2. ${TOMCAT_HOME}/conf/context.xml 내용 추가

추가!!! 라고 주석 단 부분만 잘 추가하면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
  
    <!-- 추가!!! -->
    <ResourceLink name="bean/redisson"
                  global="bean/redisson"
                  type="org.redisson.api.RedissonClient" />
    <!-- 추가!!! -->
    <Manager className="org.redisson.tomcat.JndiRedissonSessionManager"
             readMode="REDIS"
             jndiName="bean/redisson" />
  
    <!-- 추가!!! -->
    <Manager className="org.redisson.tomcat.RedissonSessionManager"
             configPath="${catalina.base}/conf/redisson.conf"
             readMode="REDIS" updateMode="DEFAULT" broadcastSessionEvents="false"
             keyPrefix=""/>
</Context>



3. redisson.yaml 파일 생성 및 작성

${TOMCAT_HOME}/conf/redisson.yaml 경로에 생성, 내용은 아래처럼

singleServerConfig:
  address: "redis://localhost:6379"

혹시라도 아이디/비번을 입력하고 싶다면?

singleServerConfig:
  address: "redis://myId:myPassWord@localhost:6379"



4. redisson.conf 파일 생성 및 작성

${TOMCAT_HOME}/conf/redisson.conf 경로에 파일 생성, 내용은 아래처럼

singleServerConfig:
  idleConnectionTimeout: 10000
  connectTimeout: 10000
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500
  username: 
  password: 
  subscriptionsPerConnection: 5
  clientName: null
  address: "redis://localhost:6379"
  subscriptionConnectionMinimumIdleSize: 1
  subscriptionConnectionPoolSize: 50
  connectionMinimumIdleSize: 24
  connectionPoolSize: 64
  database: 0
  dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
codec: !<org.redisson.codec.MarshallingCodec> {}
transportMode: "NIO"




5. redisson 관련 jar -> tomcat lib 에 추가하기

공식문서에서 제공하는 2개의 jar 를 다운로드 받습니다.

  • redisson-all-3.24.3.jar
  • redisson-tomcat-9-3.24.3.jar (이건 자기 톰캣 버전 맞춰서!)

이후에 해당 jar 파일 2개를 ${TOMCAT_HOME}/lib 경로에 넣습니다.



+. redisson 참고링크:

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글