Spring 3.1에서 ehcache 활용 전략
Upcoming SlideShare
Loading in...5
×
 

Spring 3.1에서 ehcache 활용 전략

on

  • 7,243 views

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

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

Statistics

Views

Total Views
7,243
Views on SlideShare
7,243
Embed Views
0

Actions

Likes
14
Downloads
111
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Spring 3.1에서 ehcache 활용 전략 Spring 3.1에서 ehcache 활용 전략 Presentation Transcript

  • 제 13회 한국 스프링 사용자 모임 세미나: 백기선 13:00 ~ 13:40 Spring MVC를 손쉽게 테스트하기: 윤성준 13:50 ~ 14:30 RESTful API(including Mobile) with Spring 3.1: 김흥래 14:40 ~ 15:20 Spring 3.1에서 Ehcache 활용전략: 석종일 15:30 ~ 16:00 SpringFramework in Scala: 김영한 16:10 ~ 16:50 Type-safe querying using Querydsl
  • SPRING 3.1에서Ehcache 활용 전략 김흥래
  • NHN INS 경영지원개발팀에서 있습니다.그룹웨어를 개발하고 있습니다. 발표자자바카페(JAVACAFE)자바카페(JAVACAFE) 커뮤니티에서 있습니다.5년째 운영진으로 활동하고 있습니다 김흥래
  • AGENDA WARMING-UP Cache 개념잡기 Ehcache 소개 Ehcache 활용하기 다양한 Architecture 우리 서비스는? Ehcache 가이드 기본사용법 Spring 3.0 Cache 동기화 모니터링 Cache 모니터링 DEMO
  • WARMING-UP
  • WARMING-UP : CACHE 개념잡기롱테일(LONG TAIL) 법칙 (출처 http://www.longtail.com) 의 20%의 요구가 시스템의 80%의 리소스를 점유한다는 법칙 의 데이터는 향상시킬 있다. 자주 사용되는 데이터는 Cache 사용으로 성능을 대폭 향상시킬 수 있다
  • WARMING-UP : CACHE 개념잡기CACHE? 데이터를 평소 자주 사용되는 데이터를 저장해두는 임시 저장소 생성에 많은 비용이 필요한 정보를 저장해두는 임시 저장소 정보를 CPU L1, L2 Cache Disk Cache DNS Cache Query Cache
  • WARMING-UP : CACHE 개념잡기웹서비스 관점의 CACHE 웹 페이지 화면 Browser Cache Apache Cache DB 조회 결과 Ibatis Oscache 공유 메모리 Terracotta BigMemory Static 자원 Ehcache 비싼 비용의 연산 결과
  • WARMING-UP : CACHE 개념잡기LOCAL CACHE vs GLOBAL CACHE Local Cache 로컬 장비 내에서만 사용되는 캐시 로컬 자원을 활용 (메모리, 디스크) 빠른 결과 다른 서버와 데이터 공유가 어려움 Global Cache 다수의 서버가 공유하는 캐시 데이터 분산 저장 (확장성) 로컬 캐시보다 느리다. (네트워크 트래픽) 데이터 공유가 상대적으로 쉬움
  • WARMING-UP : CACHE 개념잡기다양한 CACHE
  • WARMING-UP : CACHE 개념잡기다양한 CACHE
  • WARMING-UP : Ehcache 소개EHCACHE 오픈소스 기반의 빠른 캐시 엔진 JSR107 JCache 표준 지원 경량의 간단한 Local Cache 메모리, 메모리 디스크) 다양한 확장 지원 (메모리 디스크 복제) 분산 캐시 지원 (동기 / 비동기 복제 동기
  • WARMING-UP : Ehcache 소개ENTERPRISE DATA CACHE (출처 http://www.ehcache.org) 가 를 있다. 기업에서 사용하는 시스템의 70%가 직간접적으로 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 표준을 완벽하게 지원한다 는
  • WARMING-UP : Ehcache 소개EHCACHE BUNDLING (출처 http://www.ehcache.org) 직접 사용하는 형태가 아니라 번들 형태로 사용되는 경우 크다. Hibernate에 의한 활용 비중이 가장 크다 에
  • WARMING-UP : Ehcache 소개TERRACOTTA 서버 오픈소스 기반의 분산 객체 저장소 JVM 클러스터링 프레임워크 NAM (Natwork Attached Memory) 방지) BigMemory (FullGC 방지 복제) WAS 세션 클러스터링 (HttpSession 복제 Session Grid, Data Grid
  • WARMING-UP : Ehcache 소개EHCACHE ENTERPRISE 서버 Ehcache 분산 캐시 기능 강화 Replication Cache RMI Replicated Caching JGroups Replicated Caching JMS Replicated Caching Distributed Cache Terracotta Server Array CacheManager Sharing
  • WARMING-UP : Ehcache 소개LICENCE Ehcache 배포판 Commercial Version OpenSource Version 를 로 Ehcache를 Local Cache로 사용 할 경우 기능상의 차이 없음. 점은 없음 OpenSource 버전의 경우 Apache 2.0 License
  • WARMING-UP : Ehcache 소개EHCACHE VERSION 별 비중 (출처 http://www.ehcache.org) 다양한 버전이 아직 많이 사용되고 있다 있다. 버전이다. 현재 최신 버전은 2012년 11월에 배포된 2.6.2 버전이다 년 월에
  • 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
  • EHCACHE 활용하기
  • Ehcache 활용하기 : 다양한 Architecture서비스를 만들어 볼까요?
  • Ehcache 활용하기 : 다양한 ArchitectureSTAND ALONE Local Session Cache 서버 (www.test.com)
  • Ehcache 활용하기 : 다양한 ArchitectureSTAND ALONE
  • Ehcache 활용하기 : 다양한 ArchitectureSTAND ALONE 몰린다. 사용자가 몰린다 대로 늘려야겠다. 서버를 2대로 늘려야겠다 은 처리하지? Session은 어떻게 처리하지
  • Ehcache 활용하기 : 다양한 ArchitectureSTICKY SESSION Local Session Cache 서버(www1.test.com) Local Session Cache L4 www.test.com 서버 (www2.test.com)
  • Ehcache 활용하기 : 다양한 ArchitectureSTAND ALONE
  • Ehcache 활용하기 : 다양한 ArchitectureSTICKY SESSION 서버가 2대라 좋긴 한데 대라 하나의 서버에 장애가 발생하면 장애 서버의 Session 정보가 버리네? 전부 날라가 버리네 서버간에 Session 정보를 없을까? 공유할 수 없을까
  • Ehcache 활용하기 : 다양한 ArchitectureSESSION CLUSTERING Local Session Cache 서버(www1.test.com) Session Clustering (Replication) Local Session Cache L4 www.test.com 서버 (www2.test.com)
  • Ehcache 활용하기 : 다양한 ArchitectureSESSION CLUSTERING
  • Ehcache 활용하기 : 다양한 ArchitectureSESSION CLUSTERING 가 잘되네. Business가 너무 잘되네 증가하는 사용자를 감당하기 힘들다. 늘리자. 힘들다 장비를 두 배로 늘리자 어라???? 어라 장비를 두 배로 늘렸는데 성능은 더 떨어진 거 같아 같아. 문제지? 도대체 뭐가 문제지
  • Ehcache 활용하기 : 다양한 ArchitectureWEB SESSION Local Session Cache 서버(www1.test.com) Terracotta Web Session Server Local Session Cache L4 www.test.com 서버 (www2.test.com)
  • Ehcache 활용하기 : 다양한 ArchitectureWEB SESSION 증가하네. 사용자가 계속 증가하네 늘리자. 장비를 더 늘리자 가만.... 가만 이 걸까? Session이 꼭 필요한 걸까
  • Ehcache 활용하기 : 다양한 ArchitectureAUTHENTICATION COOKIE Local Cache Cookie 서버(www1.test.com) Cookie Local Cookie Cache L4 www.test.com 서버 (www2.test.com)
  • Ehcache 활용하기 : 다양한 ArchitectureAUTHENTICATION COOKIE 을 Session을 사용하지 않으니까 서버의 확장성은 좋은데 정보를 사용자 Cookie에 에 불안하네. 저장하니 불안하네 없을까? 다른 방법은 없을까 사용자 Unique한 정보는 한 어디에 저장해야 할까할까?
  • Ehcache 활용하기 : 다양한 ArchitectureSSO + CACHE REPLICATION Local Cache 서버(www1.test.com) Cache Replication Local Cache L4 서버 (www2.test.com) www.test.com Single Sign On Authentication
  • Ehcache 활용하기 : 다양한 ArchitectureSSO + CACHE REPLICATION 를 Cookie를 사용하지 않아서 좋긴 한데 사용자 Unique한 정보를 한 실시간으로 복제하려니 엄청나네.. 서버간의 트래픽이 엄청나네 를 도입해볼까? Global Cache를 도입해볼까
  • Ehcache 활용하기 : 다양한 ArchitectureGLOBAL CACHE Local Cache 서버(www1.test.com) Global Cache Local Cache L4 www.test.com 서버 (www2.test.com) Single Sign On Authentication
  • Ehcache 활용하기 : 다양한 ArchitectureGLOBAL CACHE 사용자 인증은 Session대신에 SSO를 이용하고 대신에 를 사용자 Unique한 정보는 한 Global Cache에 저장하고 에 Static한 정보들은 한 Local Cache를 활용하니 를 좋아요. 너무 너무 좋아요 ^^
  • Ehcache 활용하기 : 다양한 Architecture우리서비스는? Ehcache Ehcache SSO Memcached ... Cloud Ehcache L4
  • EHCACHE 가이드
  • Ehcache 가이드 : 기본사용법개요 라이브러리 ehcache-core-2.5.2.jar 환경설정 (ehcache.xml) Cache 객체명, Data Size, 유효기간, 동기화 정책 CacheManager 생성 모든 Cache 객체를 관리한다. Cache Operation Cache 객체 로드 add(), get(), remove() 캐시 한다.” “캐시 대상이 되는 모든 객체는 Serializable 되어야 한다
  • Ehcache 가이드 : 기본사용법MAVEN 설정 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.5.2</version> </dependency> Local Cache 용도로만 사용 할 경우 등록하면 된다. 설정시 ehcache-core.jar 라이브러리만 등록하면 된다
  • Ehcache 가이드 : 기본사용법환경설정 : 캐시 정책
  • Ehcache 가이드 : 기본사용법환경설정 : 캐시 정책 maxElementsInMemory = “20000” // 저장될 객체의 최대수 eternal = “false” // 시간 설정 무시 옵션 timeToIdleSeconds = “600” // 설정된 시간 동안 Idle 상태시 갱신 (10분) 분 시간) timeToLiveSeconds = “3600” // 설정된 시간 동안 유지 후 갱신 (1시간 시간 overflowToDisk = “false” // 메모리 부족시 디스크 저장 옵션 diskPersistent = “false” // 디스크 저장 사용 옵션 memoryStoreEvictionPolicy = “LRU” // 데이터 제거 알고리즘 옵션 statistics = “true” // JMX 통계정보 갱신 옵션
  • Ehcache 가이드 : 기본사용법CacheManager 생성 모든 Cache 객체는 CacheManager에 의해서 관리 에 생성시에 CacheManager 생성시에 Singleton Mode와 Instance Mode 와 2가지 Mode를 지원 가지 를 // Singleton Mode CacheManager.newInstance(); String[] cacheNames = manager.getCacheNames(); // Instance Mode CacheManager manager1 = CacheManager.newInstance("src/config/ehcache1.xml"); CacheManager manager2 = CacheManager.newInstance("src/config/ehcache2.xml"); String[] cacheNamesForManager1 = manager1.getCacheNames(); String[] cacheNamesForManager2 = manager2.getCacheNames();
  • Ehcache 가이드 : 기본사용법CACHE OPERATION 한다. 모든 Cache 객체는 Serializable 되어야 한다 만약 Serializable 되지 않은 객체가 디스크에 저장되면 정상적 으로 저장되지 않는다 않는다. // Add, Get CacheManager singletonManager = CacheManager.create(); singletonManager.addCache("testCache"); Cache test = singletonManager.getCache("testCache"); // Remove CacheManager singletonManager = CacheManager.create(); singletonManager.removeCache("sampleCache1");
  • 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();
  • Ehcache 가이드 : SPRING 3.0SPRING 3.0 Spring Framework 기반의 캐시 추상화 제공 (CacheManager) Ehcache-Spring Integration을 이용한 Annotation 제공 을 (Google Project) http://code.google.com/p/ehcache-spring-annotations/ 이제 그만! “이제 그만 을 사용합시다.” 고민하지 말고 이제부터는 Spring 3.1을 사용합시다
  • Ehcache 가이드 : SPRING 3.1SPRING 3.1 기본적인 캐시 구현체 제공 JDK ConcurrentMap-based Cache Ehcache-based Cache Spring Framework 차원의 Annotation 제공
  • Ehcache 가이드 : SPRING 3.1CONCURRENTMAP-BASED CACHE 에 JDK에 기본 포함된 ConcurrentMap을 이용하여 캐시 을 java.util.concurrent.ConcurrentMap 설정이 비교적 간단 기능이 단순 동기화가 필요없는 간단한 Cache 모델에 적합
  • Ehcache 가이드 : SPRING 3.1EHCACHE-BASED CACHE 를 Ehache를 이용하여 캐시 StandAlone 캐시서버 Hibernate L2 Cache 나 JMX나 패킷을 이용한 데이터 동기화 Terracotta Server Array를 이용한 Distributed Cache 제공 를 RMI를 이용한 Replication 제공 를
  • Ehcache 가이드 : SPRING 3.1CACHE ANNOTATION @Cacheable @CacheEvict 캐시 설정을 위한 SpEL 제공 Custom Annotation 사용가능
  • Ehcache 가이드 : SPRING 3.1CACHE 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); }
  • Ehcache 가이드 : Cache 동기화CACHE REPLICATION
  • Ehcache 가이드 : Cache 동기화캐시 동기화 방식 의 Ehcache의 경우 데이터 복제를 위한 3가지 방식을 지원 가지 RMI 방식 자바에서 기본적으로 제공하는 RMI를 사용 검증된 안전한 기술 JGroups 방식 UDP 기반의 라이브러리 JBoss Session Clustering JMS 방식 JMS 메시지를 이용하여 데이터 동기화
  • Ehcache 가이드 : Cache 동기화캐시 동기화 방식 (RMI 방식)
  • Ehcache 가이드 : Cache 동기화환경설정 : NODE 식별 정책 (RMI 방식)
  • Ehcache 가이드 : Cache 동기화환경설정 : NODE 식별 정책 (RMI 방식) CacheManagerPeerProvider Node 식별을 위해 필요한 설정 RMICacheManagerPeerProviderFactory 제공 CacheManagerPeerListener 데이터 수신을 위해 필요한 설정 RMICacheManagerPeerListenerFactory 제공 CacheEventLisenver 각 Cache 별로 동기화 방식 설정
  • Ehcache 가이드 : Cache 동기화환경설정 : NODE 식별 정책 (RMI 방식) 있다. Node 식별을 위해 UDP 방식이나 TCP 방식을 선택할 수 있다 UDP 방식 peerDiscovery = automatic Node 추가시 설정파일의 변경이 필요없다. 네트워크에서 멀티캐스트를 허용해야 한다. TCP 방식 peerDiscovery = manual Node 추가시 설정파일의 변경이 필요하다.
  • Ehcache 가이드 : Cache 동기화환경설정 : 캐시 동기화 정책 (RMI 방식)
  • Ehcache 가이드 : Cache 동기화환경설정 : 캐시 동기화 정책 (RMI 방식) replicatePuts = “false” // 정보가 추가되었을 때 동기화 여부 replicateUpdates = “false” // 정보가 수정되었을 때 동기화 여부 replicateRemovals = “true” // 정보가 삭제되었을 때 동기화 여부 replicateAsynchronously = “false” // 동기화 작업의 Async 여부 replicateUpdatesViaCapy = “false” // 복제 데이터를 보낼지 삭제 메시지를 보낼지 여부
  • CACHE 모니터링
  • 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
  • CACHE 모니터링MBean 설정 <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" > <property name="configLocation" value="classpath:ehcache.xml"></property> <property name="shared" value="true"/> </bean> <bean id="mbeanServer“ class="org.springframework.jmx.support.MBeanServerFactoryBean"> <property name="locateExistingServerIfPossible" value="true"/> </bean> <bean id="managementService" class="net.sf.ehcache.management.ManagementService" 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>
  • CACHE 모니터링Statistics 옵션 <cache name="sampleCache" maxElementsInMemory="20000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" statistics="true"> </cache>
  • DEMO
  • QUIZ오늘의 QuizSpring 3.1에서 캐쉬 생성을 위한 에서 은Annotation은 ( 이다. ) 이다
  • DEMOSpecial Thanks. 다운받으세요.소스는 아래 SVN 서버에서 다운받으세요https://javacafe-demo.googlecode.com/svn