spring 3.1에서 ehcache 활용 전략

69
제 13회 한국 스프링 사용자 모임 세미나 제 13회 한국 스프링 사용자 모임 세미나 : 김흥래 Spring 3.1에서 Ehcache 활용전략 14:40 ~ 15:20 15:30 ~ 16:00 : 석종일 SpringFramework in Scala : 김영한 Type-safe querying using Querydsl 16:10 ~ 16:50 : 백기선 Spring MVC를 손쉽게 테스트하기 13:00 ~ 13:40 : 윤성준 RESTful API(including Mobile) with Spring 3.1 13:50 ~ 14:30

Upload: -

Post on 20-May-2015

8.275 views

Category:

Documents


4 download

DESCRIPTION

KSUG에서 발표한 자료입니다. Spring 3.1환경에서 Ehcache를 활용하는 방법에 대한 내용입니다.

TRANSCRIPT

Page 1: Spring 3.1에서 ehcache 활용 전략

제 13회 한국 스프링 사용자 모임 세미나제 13회 한국 스프링 사용자 모임 세미나

: 김흥래

Spring 3.1에서 Ehcache 활용전략14:40 ~ 15:20

15:30 ~ 16:00

: 석종일

SpringFramework in Scala

: 김영한

Type-safe querying using Querydsl16:10 ~ 16:50

: 백기선

Spring MVC를 손쉽게 테스트하기13:00 ~ 13:40

: 윤성준

RESTful API(including Mobile) with Spring 3.113:50 ~ 14:30

Page 2: Spring 3.1에서 ehcache 활용 전략

SPRING 3.1에서Ehcache 활용 전략

김흥래김흥래김흥래김흥래

Page 3: Spring 3.1에서 ehcache 활용 전략

NHN INS NHN INS NHN INS NHN INS 경영지원개발팀에서경영지원개발팀에서경영지원개발팀에서경영지원개발팀에서그룹웨어를그룹웨어를그룹웨어를그룹웨어를 개발하고개발하고개발하고개발하고 있습니다있습니다있습니다있습니다....

자바카페자바카페자바카페자바카페(JAVACAFE) (JAVACAFE) (JAVACAFE) (JAVACAFE) 커뮤니티에서커뮤니티에서커뮤니티에서커뮤니티에서5555년째년째년째년째 운영진으로운영진으로운영진으로운영진으로 활동하고활동하고활동하고활동하고 있습니다있습니다있습니다있습니다.

발표자발표자발표자발표자

김흥래

Page 4: Spring 3.1에서 ehcache 활용 전략

AGENDA

� WARMING-UP� Cache개념잡기� Ehcache소개

� Ehcache 활용하기활용하기활용하기활용하기� 다양한 Architecture� 우리서비스는?

� Ehcache 가이드가이드가이드가이드� 기본사용법� Spring 3.0� Cache 동기화

� Cache 모니터모니터모니터모니터링링링링

� DEMO

Page 5: Spring 3.1에서 ehcache 활용 전략

WARMING-UP

Page 6: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

롱테일(LONG TAIL) 법칙

20%의의의의요구가요구가요구가요구가시스템의시스템의시스템의시스템의 80%의의의의리소스를리소스를리소스를리소스를 점유한다는점유한다는점유한다는점유한다는법칙법칙법칙법칙

자주자주자주자주사용되는사용되는사용되는사용되는데이터데이터데이터데이터는는는는 Cache 사용으로사용으로사용으로사용으로 성능을성능을성능을성능을 대폭대폭대폭대폭향상향상향상향상시킬시킬시킬시킬수수수수있다있다있다있다.

(출처 http://www.longtail.com)

Page 7: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

CACHE?

� 평소평소평소평소자주자주자주자주사용되는사용되는사용되는사용되는데이터데이터데이터데이터를를를를저장해두는저장해두는저장해두는저장해두는임시임시임시임시저장소저장소저장소저장소

� 생생생생성성성성에에에에많은많은많은많은비용이비용이비용이비용이필요한필요한필요한필요한정보정보정보정보를를를를저장해두는저장해두는저장해두는저장해두는임시임시임시임시저장소저장소저장소저장소

� CPU L1, L2 Cache� Disk Cache� DNS Cache� Query Cache

Page 8: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

웹서비스 관점의 CACHE

� 웹웹웹웹페이지페이지페이지페이지화면화면화면화면

� Browser Cache� Apache Cache

� DB 조회조회조회조회결과결과결과결과

� Ibatis Oscache

� 공유공유공유공유메모리메모리메모리메모리

� Terracotta BigMemory

� Static 자원자원자원자원

� Ehcache

� 비싼비싼비싼비싼비용의비용의비용의비용의연산연산연산연산결과결과결과결과

Page 9: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

LOCAL CACHE vs GLOBAL CACHE

� Local Cache

�로컬장비내에서만사용되는캐시

�로컬자원을활용 (메모리, 디스크)�빠른결과

�다른서버와데이터공유가어려움

� Global Cache

�다수의서버가공유하는캐시

�데이터분산저장 (확장성)�로컬캐시보다느리다. (네트워크트래픽)�데이터공유가상대적으로쉬움

Page 10: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

다양한 CACHE

Page 11: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : CACHE 개념잡기

다양한 CACHE

Page 12: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

EHCACHE

� 오픈소스오픈소스오픈소스오픈소스기반의기반의기반의기반의빠른빠른빠른빠른캐시캐시캐시캐시엔진엔진엔진엔진

� JSR107 JCache 표준표준표준표준지원지원지원지원

� 경량의경량의경량의경량의간단한간단한간단한간단한 Local Cache

� 다양한다양한다양한다양한확장확장확장확장지원지원지원지원 (메모리메모리메모리메모리, 디스크디스크디스크디스크)

� 분산분산분산분산캐시캐시캐시캐시지원지원지원지원 (동기동기동기동기 / 비동기비동기비동기비동기복제복제복제복제)

Page 13: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

ENTERPRISE DATA CACHE

(출처 http://www.ehcache.org)

기업에서기업에서기업에서기업에서사용하는사용하는사용하는사용하는시스템의시스템의시스템의시스템의 70%가가가가직간접적으로직간접적으로직간접적으로직간접적으로 Ehcache를를를를사용하고사용하고사용하고사용하고있다있다있다있다.

Page 14: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

JSR107 JCACHE 완벽지원

� JCP (Java Community Process)

� 자바표준을정의하는표준화과정

� JSR (Java Specification Requests)

� 자바 Spec을기술하는공식문서� JSR107 JCACHE – Java Temporary Caching API

� 자바 Cache Spec� Ehcache는는는는 JSR107 표준을표준을표준을표준을완벽하게완벽하게완벽하게완벽하게지원한다지원한다지원한다지원한다.

Page 15: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

EHCACHE BUNDLING

(출처 http://www.ehcache.org)

직접직접직접직접사용하는사용하는사용하는사용하는형태가형태가형태가형태가 아니라아니라아니라아니라번들번들번들번들형태로형태로형태로형태로사용되는사용되는사용되는사용되는경우경우경우경우Hibernate에에에에의한의한의한의한활용활용활용활용비중이비중이비중이비중이가장가장가장가장크다크다크다크다.

Page 16: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

TERRACOTTA 서버

� 오픈소스오픈소스오픈소스오픈소스기반의기반의기반의기반의분산분산분산분산객체객체객체객체저장소저장소저장소저장소

� JVM 클러스터링클러스터링클러스터링클러스터링프레임워크프레임워크프레임워크프레임워크

� NAM (Natwork Attached Memory)

� BigMemory (FullGC 방지방지방지방지)

� WAS 세션세션세션세션클러스터링클러스터링클러스터링클러스터링 (HttpSession 복제복제복제복제)

� Session Grid, Data Grid

Page 17: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

EHCACHE ENTERPRISE 서버

� Ehcache 분산분산분산분산캐시캐시캐시캐시기능기능기능기능강화강화강화강화

� Replication Cache

� RMI Replicated Caching� JGroups Replicated Caching� JMS Replicated Caching

� Distributed Cache

�Terracotta Server Array�CacheManager Sharing

Page 18: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

LICENCE

� Ehcache 배포판배포판배포판배포판

� Commercial Version� OpenSource Version

� Ehcache를를를를 Local Cache 로로로로사용사용사용사용할할할할경우경우경우경우기능상의기능상의기능상의기능상의차이차이차이차이점은점은점은점은없음없음없음없음.

� OpenSource 버전의버전의버전의버전의경우경우경우경우Apache 2.0 License

Page 19: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

EHCACHE VERSION 별 비중

(출처 http://www.ehcache.org)

다양한다양한다양한다양한버전이버전이버전이버전이아직아직아직아직많이많이많이많이사용되고사용되고사용되고사용되고있다있다있다있다. 현재현재현재현재최신최신최신최신버전은버전은버전은버전은 2012년년년년 11월에월에월에월에배포된배포된배포된배포된 2.6.2 버전이다버전이다버전이다버전이다.

Page 20: Spring 3.1에서 ehcache 활용 전략

WARMING-UP : Ehcache 소개

RELEASE NOTE

2012. 11 : Ehcache 2.6.2 Released

2012. 04 : Ehcache 2.5.2 Released

2011. 11 : Ehcache 2.5 Released

2011. 05 : Terracotta Joins Software AG

2011. 04 : Ehcache 2.4.2 Released

2010. 11 : BigMemory for Ehcache GA

2009. 08 : Terracotta acquires Ehcache

Page 21: Spring 3.1에서 ehcache 활용 전략

EHCACHE 활용하기

Page 22: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

서비스를 만들어 볼까요?

Page 23: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

STAND ALONE

SessionLocalCache

서버 (www.test.com)

Page 24: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

STAND ALONE

Page 25: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

STAND ALONE

사용자가사용자가사용자가사용자가몰린다몰린다몰린다몰린다.서서서서버버버버를를를를 2대로대로대로대로늘려야겠다늘려야겠다늘려야겠다늘려야겠다.

Session은은은은어떻게어떻게어떻게어떻게처리하지처리하지처리하지처리하지?

Page 26: Spring 3.1에서 ehcache 활용 전략

L4

www.test.com

Ehcache 활용하기 : 다양한 Architecture

STICKY SESSION

SessionLocalCache

서버(www1.test.com)

SessionLocalCache

서버 (www2.test.com)

Page 27: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

STAND ALONE

Page 28: Spring 3.1에서 ehcache 활용 전략

서버가서버가서버가서버가 2대라대라대라대라좋긴좋긴좋긴좋긴한데한데한데한데하나의하나의하나의하나의서버에서버에서버에서버에장애가장애가장애가장애가발생하면발생하면발생하면발생하면장애장애장애장애서버의서버의서버의서버의 Session 정보가정보가정보가정보가전부전부전부전부날라가날라가날라가날라가버리네버리네버리네버리네?

서버간에서버간에서버간에서버간에 Session 정보를정보를정보를정보를공유할공유할공유할공유할수수수수없을까없을까없을까없을까?

Ehcache 활용하기 : 다양한 Architecture

STICKY SESSION

Page 29: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

SESSION CLUSTERING

L4

www.test.com

SessionLocalCache

서버(www1.test.com)

SessionLocalCache

서버 (www2.test.com)

Session Clustering(Replication)

Page 30: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

SESSION CLUSTERING

Page 31: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

SESSION CLUSTERING

Business 가가가가너무너무너무너무잘되네잘되네잘되네잘되네.증가하는증가하는증가하는증가하는사용자를사용자를사용자를사용자를감당하기감당하기감당하기감당하기힘들다힘들다힘들다힘들다. 장비를장비를장비를장비를두두두두배로배로배로배로늘리자늘리자늘리자늘리자.

어라어라어라어라????

장비를장비를장비를장비를두두두두배로배로배로배로늘렸는데늘렸는데늘렸는데늘렸는데성능은성능은성능은성능은더더더더떨어진떨어진떨어진떨어진거거거거같아같아같아같아.도대체도대체도대체도대체뭐가뭐가뭐가뭐가문제지문제지문제지문제지?

Page 32: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

WEB SESSION

L4

www.test.com

SessionLocalCache

서버(www1.test.com)

SessionLocalCache

서버 (www2.test.com)

TerracottaWeb Session

Server

Page 33: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

WEB SESSION

사용자가사용자가사용자가사용자가계속계속계속계속증가하네증가하네증가하네증가하네.장비를장비를장비를장비를더더더더늘리자늘리자늘리자늘리자.

가만가만가만가만....

Session이이이이꼭꼭꼭꼭필요한필요한필요한필요한걸까걸까걸까걸까?

Page 34: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

AUTHENTICATION COOKIE

L4

www.test.com

LocalCache

서버(www1.test.com)

LocalCache

서버 (www2.test.com)

Cookie

Cookie

Cookie

Page 35: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

AUTHENTICATION COOKIE

Session을을을을사용하지사용하지사용하지사용하지않으니까않으니까않으니까않으니까서버의서버의서버의서버의확장성은확장성은확장성은확장성은좋은데좋은데좋은데좋은데정보를정보를정보를정보를사용자사용자사용자사용자 Cookie에에에에저장하니저장하니저장하니저장하니불안하네불안하네불안하네불안하네.

다른다른다른다른방법은방법은방법은방법은없을까없을까없을까없을까?

사용자사용자사용자사용자 Unique한한한한정보는정보는정보는정보는어디에어디에어디에어디에저장해야저장해야저장해야저장해야할까할까할까할까?

Page 36: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

SSO + CACHE REPLICATION

L4

www.test.com

LocalCache

서버(www1.test.com)

LocalCache

서버 (www2.test.com)

Cache Replication

Single Sign OnAuthentication

Page 37: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

SSO + CACHE REPLICATION

Cookie를를를를사용하지사용하지사용하지사용하지않아서않아서않아서않아서좋긴좋긴좋긴좋긴한데한데한데한데사용자사용자사용자사용자 Unique한한한한정보를정보를정보를정보를실시간으로실시간으로실시간으로실시간으로복제하려니복제하려니복제하려니복제하려니서버간의서버간의서버간의서버간의트래픽이트래픽이트래픽이트래픽이엄청나네엄청나네엄청나네엄청나네..

Global Cache 를를를를도입해볼까도입해볼까도입해볼까도입해볼까?

Page 38: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

GLOBAL CACHE

L4

www.test.com

LocalCache

서버(www1.test.com)

LocalCache

서버 (www2.test.com)

Single Sign OnAuthentication

GlobalCache

Page 39: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

GLOBAL CACHE

사용자사용자사용자사용자인증은인증은인증은인증은Session대신에대신에대신에대신에 SSO를를를를이용하고이용하고이용하고이용하고

사용자사용자사용자사용자 Unique한한한한정보는정보는정보는정보는Global Cache 에에에에저장하고저장하고저장하고저장하고

Static한한한한정보들은정보들은정보들은정보들은Local Cache 를를를를활용하니활용하니활용하니활용하니

너무너무너무너무너무너무너무너무좋아요좋아요좋아요좋아요. ^^

Page 40: Spring 3.1에서 ehcache 활용 전략

Ehcache 활용하기 : 다양한 Architecture

우리서비스는?

L4

Ehcache

SSO Memcached

Cloud

Ehcache

Ehcache

...

Page 41: Spring 3.1에서 ehcache 활용 전략

EHCACHE 가이드

Page 42: Spring 3.1에서 ehcache 활용 전략

� 라이브러리라이브러리라이브러리라이브러리

� ehcache-core-2.5.2.jar

� 환경설정환경설정환경설정환경설정 (ehcache.xml)

� Cache 객체명, Data Size, 유효기간, 동기화정책

� CacheManager 생성생성생성생성

� 모든 Cache 객체를관리한다.

� Cache Operation

� Cache 객체로드� add(), get(), remove()

Ehcache 가이드 : 기본사용법

개요

“캐시캐시캐시캐시대상이대상이대상이대상이되는되는되는되는모든모든모든모든객체는객체는객체는객체는 Serializable 되어야되어야되어야되어야한다한다한다한다.”

Page 43: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

MAVEN 설정

<dependency>

<groupId> net.sf.ehcache </groupId>

<artifactId> ehcache-core </artifactId>

<version> 2.5.2</version>

</dependency>

Local Cache 용도로만용도로만용도로만용도로만사용사용사용사용할할할할경우경우경우경우

설정시설정시설정시설정시 ehcache-core.jar 라이브러리만라이브러리만라이브러리만라이브러리만등록하등록하등록하등록하면면면면된다된다된다된다.

Page 44: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

환경설정 : 캐시 정책

Page 45: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

환경설정 : 캐시 정책

maxElementsInMemory = “20000” // 저장될저장될저장될저장될객체의객체의객체의객체의최대수최대수최대수최대수

eternal = “false” // 시간시간시간시간설정설정설정설정무시무시무시무시옵션옵션옵션옵션

timeToIdleSeconds = “600” // 설설설설정정정정된된된된시간시간시간시간동안동안동안동안 Idle 상태시상태시상태시상태시 갱신갱신갱신갱신 (10분분분분)

timeToLiveSeconds = “3600” // 설정된설정된설정된설정된시간시간시간시간동안동안동안동안유지유지유지유지후후후후갱신갱신갱신갱신 (1시간시간시간시간)

overflowToDisk = “false” // 메모리메모리메모리메모리부족시부족시부족시부족시디스크디스크디스크디스크저장저장저장저장옵션옵션옵션옵션

diskPersistent = “false” // 디스크디스크디스크디스크저장저장저장저장사용사용사용사용옵션옵션옵션옵션

memoryStoreEvictionPolicy = “LRU” // 데이터데이터데이터데이터제거제거제거제거알고리즘알고리즘알고리즘알고리즘 옵션옵션옵션옵션

statistics = “true” // JMX 통계정보통계정보통계정보통계정보갱신갱신갱신갱신옵옵옵옵션션션션

Page 46: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

CacheManager 생성

� 모든모든모든모든 Cache 객체는객체는객체는객체는 CacheManager에에에에의해서의해서의해서의해서관리관리관리관리

� CacheManager 생성시생성시생성시생성시에에에에 Singleton Mode 와와와와 Instance Mode 2가지가지가지가지Mode를를를를지원지원지원지원

// Singleton ModeCacheManager.newInstance(); String[] cacheNames = manager.getCacheNames();

// Instance ModeCacheManager manager1 =

CacheManager.newInstance("src/config/ehcache1.xml"); CacheManager manager2 =

CacheManager.newInstance("src/config/ehcache2.xml"); String[] cacheNamesForManager1 = manager1.getCacheNames(); String[] cacheNamesForManager2 = manager2.getCacheNames();

Page 47: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

CACHE OPERATION

� 모든모든모든모든 Cache 객체는객체는객체는객체는 Serializable 되어야되어야되어야되어야한다한다한다한다.

� 만약만약만약만약 Serializable 되지되지되지되지않은않은않은않은객체가객체가객체가객체가 디스크에디스크에디스크에디스크에저장되면저장되면저장되면저장되면정상적정상적정상적정상적으로으로으로으로저장되지저장되지저장되지저장되지않는다않는다않는다않는다.

// Add, GetCacheManager singletonManager = CacheManager.create(); singletonManager.addCache("testCache"); Cache test = singletonManager.getCache("testCache");

// RemoveCacheManager singletonManager = CacheManager.create(); singletonManager.removeCache("sampleCache1");

Page 48: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : 기본사용법

CACHE 관리정보 조회

� 사용중인사용중인사용중인사용중인 Cache 객체의객체의객체의객체의리소스리소스리소스리소스사용량을사용량을사용량을사용량을구할구할구할구할 수수수수있다있다있다있다.

� 다양한다양한다양한다양한통계통계통계통계정보도정보도정보도정보도제공한다제공한다제공한다제공한다.

Cache cache = manager.getCache("sampleCache1");

// 리소스사용량int elementsInMemory = cache.getSize();long elementsInMemory = cache.getMemoryStoreSize();long elementsInMemory = cache.getDiskStoreSize();

// 통계정보int hits = cache.getHitCount();int hits = cache.getMemoryStoreHitCount();int hits = cache.getDiskStoreCount();int hits = cache.getMissCountNotFound();int hits = cache.getMissCountExpired();

Page 49: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.0

SPRING 3.0

� Spring Framework 기반의기반의기반의기반의캐시캐시캐시캐시추상화추상화추상화추상화제공제공제공제공 (CacheManager)

� Ehcache-Spring Integration 을을을을이용한이용한이용한이용한 Annotation 제공제공제공제공(Google Project)

� http://code.google.com/p/ehcache-spring-annotations /

“이제이제이제이제그만그만그만그만!고민하지고민하지고민하지고민하지말고말고말고말고이제부터는이제부터는이제부터는이제부터는 Spring 3.1을을을을사용합시다사용합시다사용합시다사용합시다.”

Page 50: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.1

SPRING 3.1

� 기본적인기본적인기본적인기본적인 캐시캐시캐시캐시구현체구현체구현체구현체제공제공제공제공

� JDK ConcurrentMap-based Cache� Ehcache-based Cache

� Spring Framework 차원의차원의차원의차원의 Annotation 제공제공제공제공

Page 51: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.1

CONCURRENTMAP-BASED CACHE

� JDK에에에에기본기본기본기본포함된포함된포함된포함된 ConcurrentMap 을을을을이용하여이용하여이용하여이용하여캐시캐시캐시캐시

� java.util.concurrent.ConcurrentMap

� 설정이설정이설정이설정이비교적비교적비교적비교적간단간단간단간단

� 기능이기능이기능이기능이단순단순단순단순

� 동기화가동기화가동기화가동기화가필요없는필요없는필요없는필요없는간단한간단한간단한간단한 Cache 모델에모델에모델에모델에적합적합적합적합

Page 52: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.1

EHCACHE-BASED CACHE

� Ehache를를를를이용하여이용하여이용하여이용하여캐캐캐캐시시시시

� StandAlone 캐시서버캐시서버캐시서버캐시서버

� Hibernate L2 Cache

� JMX나나나나패킷을패킷을패킷을패킷을이용한이용한이용한이용한데이터데이터데이터데이터동기화동기화동기화동기화

� Terracotta Server Array 를를를를이용한이용한이용한이용한 Distributed Cache 제공제공제공제공

� RMI를를를를이용한이용한이용한이용한 Replication 제공제공제공제공

Page 53: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.1

CACHE ANNOTATION

� @Cacheable

� @CacheEvict

� 캐시캐시캐시캐시설정을설정을설정을설정을위한위한위한위한 SpEL 제공제공제공제공

� Custom Annotation 사용가능사용가능사용가능사용가능

Page 54: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : SPRING 3.1

CACHE ANNOTATION

@Cacheable (value=" sampleCache ", key=" #boardId ")

public List<Board> findBoardList(String boardId) {

return boardRepository.selectBoardList(boardId);

}

@CacheEvict (value=" sampleCache ", key=" #boardId ")

public void editBoard(Board board) {

boardRepository.updateBoard(board);

}

Page 55: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

CACHE REPLICATION

Page 56: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

캐시 동기화 방식

� Ehcache의의의의경우경우경우경우데이터데이터데이터데이터복제를복제를복제를복제를위한위한위한위한 3가지가지가지가지방식을방식을방식을방식을지원지원지원지원

� RMI 방식방식방식방식

� 자바에서기본적으로제공하는 RMI를사용� 검증된안전한기술

� JGroups 방식방식방식방식

� UDP 기반의라이브러리� JBoss Session Clustering

� JMS 방식방식방식방식

� JMS 메시지를이용하여데이터동기화

Page 57: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

캐시 동기화 방식 (RMI 방식)

Page 58: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

환경설정 : NODE 식별 정책 (RMI 방식)

Page 59: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

환경설정 : NODE 식별 정책 (RMI 방식)

� CacheManagerPeerProvider

� Node 식별을위해필요한설정� RMICacheManagerPeerProviderFactory제공

� CacheManagerPeerListener

� 데이터수신을위해필요한설정

� RMICacheManagerPeerListenerFactory제공

� CacheEventLisenver

� 각 Cache 별로동기화방식설정

Page 60: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

환경설정 : NODE 식별 정책 (RMI 방식)

� Node 식별을식별을식별을식별을위해위해위해위해 UDP 방식이나방식이나방식이나방식이나 TCP 방식을방식을방식을방식을선택할선택할선택할선택할수수수수있다있다있다있다.

� UDP 방식방식방식방식

� peerDiscovery = automatic

� Node 추가시설정파일의변경이필요없다.� 네트워크에서멀티캐스트를허용해야한다.

� TCP 방식방식방식방식

� peerDiscovery = manual

� Node 추가시설정파일의변경이필요하다.

Page 61: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

환경설정 : 캐시 동기화 정책 (RMI 방식)

Page 62: Spring 3.1에서 ehcache 활용 전략

Ehcache 가이드 : Cache 동기화

환경설정 : 캐시 동기화 정책 (RMI 방식)

replicatePuts = “false” // 정보가정보가정보가정보가추가되었을추가되었을추가되었을추가되었을때때때때동기화동기화동기화동기화여부여부여부여부

replicateUpdates = “false” // 정보가정보가정보가정보가수정되었을수정되었을수정되었을수정되었을때때때때동기화동기화동기화동기화여부여부여부여부

replicateRemovals = “true” // 정보가정보가정보가정보가삭제되었을삭제되었을삭제되었을삭제되었을때때때때동기화동기화동기화동기화여부여부여부여부

replicateAsynchronously = “false” // 동기화동기화동기화동기화작업의작업의작업의작업의 Async 여부여부여부여부

replicateUpdatesViaCapy = “false” // 복제복제복제복제데이터를데이터를데이터를데이터를보낼지보낼지보낼지보낼지삭제삭제삭제삭제메시지를메시지를메시지를메시지를보낼지보낼지보낼지보낼지여부여부여부여부

Page 63: Spring 3.1에서 ehcache 활용 전략

CACHE 모니터링

Page 64: Spring 3.1에서 ehcache 활용 전략

CACHE 모니터링

TOMCAT JMX 옵션

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port = 18001

-Dcom.sun.management.jmxremote.ssl = false

-Dcom.sun.management.jmxremote.authenticate = true

-Dcom.sun.management.jmxremote.password.file =

/home1/irteam /apps/tomcat/conf/jmxremote.password

-Dcom.sun.management.jmxremote.access.file =

/home1/irteam /apps/tomcat/conf/jmxremote.access

Page 65: Spring 3.1에서 ehcache 활용 전략

CACHE 모니터링

MBean 설정

<bean id= "ehcache " class="org.springframework.cache.ehcache.EhCacheM anagerFactoryBean" >

<property name= "configLocation" value="classpath:ehcache.xml"></pr operty>

<property name= "shared" value="true"/>

</bean>

<bean id= "mbeanServer “

class="org.springframework.jmx.support.MBeanServerF actoryBean">

<property name= "locateExistingServerIfPossible" value="true"/>

</bean>

<bean id= "managementService " class="net.sf.ehcache.management.ManagementServic e" init-method="init">

<constructor-arg ref= "ehcache "/>

<constructor-arg ref= "mbeanServer "/>

<constructor-arg index= "2" value="true"/>

<constructor-arg index= "3" value="true"/>

<constructor-arg index= "4" value="true"/>

<constructor-arg index= "5" value="true"/>

</bean>

Page 66: Spring 3.1에서 ehcache 활용 전략

CACHE 모니터링

Statistics 옵션

<cache name= "sampleCache"

maxElementsInMemory= "20000"

eternal= "false"

timeToIdleSeconds= "300"

timeToLiveSeconds= "600"

overflowToDisk= "false"

diskPersistent= "false"

diskExpiryThreadIntervalSeconds= "120"

memoryStoreEvictionPolicy= "LRU"

statistics="true" >

</cache>

Page 67: Spring 3.1에서 ehcache 활용 전략

DEMO

Page 68: Spring 3.1에서 ehcache 활용 전략

QUIZ

오늘의 Quiz

Spring 3.1에서에서에서에서캐쉬캐쉬캐쉬캐쉬생성을생성을생성을생성을위한위한위한위한

Annotation 은은은은 ( ) 이다이다이다이다.

Page 69: Spring 3.1에서 ehcache 활용 전략

DEMO

Special Thanks.

소스는소스는소스는소스는아래아래아래아래 SVN 서버에서서버에서서버에서서버에서다운받으세요다운받으세요다운받으세요다운받으세요.

https://javacafe-demo.googlecode.com/svn