반응형
Redis 없이 Tomcat 세션 클러스터링 구현 방법 (DeltaManager vs BackupManager)
Tomcat 클러스터링을 구성할 때 많은 개발자들은 Redis 같은 외부 세션 저장소를 떠올립니다. 하지만 Redis 없이도 Tomcat 자체 기능으로 세션을 공유할 수 있습니다. 이 글에서는 Redis 없이 세션 클러스터링을 구성하는 방법과 실무에서 가장 많이 쓰는 DeltaManager / BackupManager 설정 방법을 소개합니다.
✅ 목차
- Tomcat 세션 클러스터링이란?
- Redis 없이 가능한 세션 공유 방식
- DeltaManager vs BackupManager 비교
- 실제 설정 예제
- 주의사항 및 실무 팁
📌 Tomcat 세션 클러스터링이란?
세션 클러스터링(Session Clustering)이란, 하나의 서버에서 생성된 세션을 다른 서버에서도 접근 가능하게 만들어주는 기술입니다.
로드밸런싱 구조에서 세션이 공유되지 않으면 로그인 유지가 불가능하므로, 반드시 구현해야 합니다.
📌 Redis 없이 가능한 세션 공유 방식
Tomcat은 Redis 없이도 자체적으로 세션 복제 기능을 제공합니다. 대표적으로 다음 두 가지 방식이 있습니다:
| 방법 | 설명 |
|---|---|
| DeltaManager | 변경된 세션만 복제 (성능 ↑, 안정성 ↓) |
| BackupManager | 세션 전체를 백업 (안정성 ↑, 자원 소모 ↑) |
📌 DeltaManager vs BackupManager 비교
| 항목 | DeltaManager | BackupManager |
|---|---|---|
| 복제 방식 | 변경분만 전송 | 전체 세션 백업 |
| 동기화 타이밍 | 실시간 | 요청 시점에 따라 다름 |
| 성능 | 빠름 | 느림 |
| 안정성 | 세션 유실 위험 ↑ | 복구 정확도 ↑ |
| 실무 추천 | 세션 작을 때 적합 | 세션 클 때 적합 |
📌 Tomcat 세션 클러스터링 설정 예제 (DeltaManager)
[context.xml 공통 설정]
<Context>
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true" />
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Channel>
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000" />
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6" />
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.jsp" />
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false" />
</Cluster>
</Context>
🔁 이 설정은 모든 Tomcat 인스턴스에 동일하게 적용해야 합니다.
📌 실무 팁
- Sticky Session 없이도 세션 유지 가능 (로드밸런서에서 세션공유 허용해야 함)
- 세션에 저장되는 객체는 반드시
Serializable구현 필요 - Tomcat 간 시스템 시간이 다르면 세션 복제가 꼬일 수 있음 → NTP 동기화 필수
- 업로드나 대용량 세션 데이터 공유는 피할 것
✅ 마무리
Redis가 없어도 충분히 세션 클러스터링은 가능합니다. 특히 레거시 JSP 시스템이나 내부망 시스템
🔔 다음 글 예고
[Tomcat + Apache 로드밸런싱 구성 방법 - mod_jk vs mod_proxy]
반응형
'웹개발 > 서버 운영 & 인프라' 카테고리의 다른 글
| Nginx와 Apache 차이점 총정리: 어떤 웹서버를 써야 할까? (1) | 2025.08.02 |
|---|---|
| 리눅스에서 crontab으로 서비스 자동 재시작 설정하는 방법 (실무 예제 포함) (5) | 2025.08.01 |
| AWS EC2에 WAR 파일 배포, 실무에서는 이렇게 합니다 (Tomcat 환경 기준) (1) | 2025.07.19 |
| Sticky Session 없이 Tomcat 세션 공유? 실무에서 직접 설정한 방법 정리 (4) | 2025.07.19 |
| Apache + Tomcat 로드밸런싱 구성 방법 (mod_jk vs mod_proxy 실무 설정 예제) (0) | 2025.06.26 |