본문 바로가기

WEB개발/WEB, WAS

코헤런스 (Coherence)

 

: 오라클(Oracle)에서 제공하는 분산 인 메모리 데이터 그리드 솔루션입니다.

  • 분산 캐싱과 데이터 공유를 위한 클러스터링 솔루션
  • 대규모 애플리케이션에서 고성능, 확장성, 가용성을 보장
  • 인메모리 데이터 그리드(IMDG, In-Memory Data Grid) 역할 수행
  • 금융, 전자상거래, 실시간 데이터 분석 등 대규모 트랜잭션 처리에 사용됨

 

 

CoherenceWeb 사용 시 세션 값 변경 시 동작 방식

 

Coherence Web은 세션을 Coherence 캐시에 저장하고, 여러 WAS 간에 공유하는 방식입니다. 기본적으로 WAS와 Coherence 두 군데에서 쓰기 작업이 발생하며 특정 WAS에서 세션을 변경하면, 다른 WAS들도 최신 세션을 가져오도록 동기화됩니다.

세션 변경 흐름

 

1️⃣ 사용자가 특정 WAS에서 세션 값을 변경

2️⃣ Coherence 서버에도 변경된 세션 값이 저장됨

3️⃣ 다른 WAS들은 기존 세션을 더 이상 유효하지 않다고 판단하고(Coherence에서 알림) 최신 값으로 갱신

4️⃣ 이후 세션을 다시 조회할 때 Coherence에서 최신 데이터를 가져옴

 

 

만약 유저가 A-WAS에서 B-WAS로 이동하게 된다면


A-WAS에 접속시 세션 키를 NamedCache에 저장하고 B-WAS에서 접속 할때 기존 세션키를 올리면 Coherence의 NamedCache를 조회해서 세션데이터를 유지한다.

 

 

 

Coherence Web에서 세션 변경 시 WAS 간 동기화


 (1) Near Cache Invalidation 방식

 

WAS는 Near Cache(로컬 캐시)를 유지하여, 세션 데이터를 빠르게 조회, 특정 WAS에서 세션을 변경하면, Coherence가 다른 WAS의 로컬 캐시를 무효화(Invalidation) 다른 WAS는 다음 요청 시 Coherence에서 최신 값을 가져옴


✅ 즉각적인 쓰기 작업은 발생하지 않지만, 다음 조회 시 최신 값으로 자동 갱신됨

 (2) 이벤트 기반 데이터 전파 (EntryProcessor, Listeners)


특정 WAS에서 세션이 변경되면, Coherence는 이벤트 리스너(Event Listener)를 통해 다른 WAS에 변경을 알림 다른 WAS가 변경 이벤트를 수신하면 로컬 캐시를 무효화하거나, 변경된 데이터를 바로 반영 가능

✅ 위 코드는 특정 세션의 데이터를 갱신하면서, Coherence를 통해 다른 WAS에서도 변경된 데이터가 반영됨

 

 

세션 저장을 위한 데이터 구조

 

Coherence에서 NamedCache를 사용하여 세션 값을 저장할 수 있음.

 

Key (세션 ID) Value (세션 데이터)
"session-12345" { "userId": 1001, "username": "Alice", "role": "ADMIN" }
"session-67890" { "userId": 1002, "username": "Bob", "role": "USER" }

 

 

 

 

 

 

 

 

 

 

'WEB개발 > WEB, WAS' 카테고리의 다른 글

HTTP Authentication  (0) 2025.03.25
Tomcat - Jasper (JSP Engine)  (0) 2025.03.12
Class Loader & Hot Deploy  (0) 2021.09.23
Jenkins & SVN or Git & Docker  (0) 2021.07.29
TheadLocal & MDC & Log4j2  (0) 2021.07.26