SlideShare a Scribd company logo
1 of 16
Ehcache
Ehcache 소개
EhCache 는 자바에서 사용되는 오픈 소스 기반의 캐시
-경량이고 빠르다
-확장성 (Scalable)
: 메모리 / 디스크 저장 지원 , 멀티 CPU 의 동시 접근에 튜닝
-JSR107 (Jcache spec) 표준 지원
: Spring Caching 과 Hibernate 통합 가능
-오픈 소스 기반 (Apache 2.0 license)
-분산 캐시 지원 (with Terracotta)
자세한 내용은 http://www.ehcache.org/about/features.html 참조
Ehcache 소개
● JCP ( JAVA Community Process )
자바 표준을 정의하는 표준화 과정
● JSR ( JAVA Specification Requests )
자바 Spec 을 기술하는 공식문서 .
개인 및 조직은 JCP (Java Community Process) 의 회원이 될 수 있으며 JSR 에 언급 된 스펙
에 따라 코드를 개발할 수 있다 . 개발 된 기술적 변화는 JCP 회원들의 검토를 거쳐 승인된
다 .
● JSR107 ( JCACHE – Java Temporary Caching API )
자바 Cache Spec.
객체 생성 , 공유 액세스 , 스풀링 , 무효화 및 JVM 전반에 걸친 일관성을 포함하여 Java
객체의 메모리 캐싱에서 사용할 API 에 대한 기준이 된다 .
Ehcache 변화
2003.10 Greg Luck 에 의해 개발되어 출시
2009.08 Terracotta 에서 Ehcache 인수
2010.04
~ 2011.09
Google-Project 에서 ehcache-spring-annotations.jar 제공
Spring 2.5 ~ 3.1 에서 사용되는 스프링을 위한 anotation 제공 (@Cacheable, @TriggersRemove 등 )
2010.09 BigMemory for Ehcache 출시
2011.05 Software AG 에서 Terracotta 인수
2011.11 Spring Framework 3.1 출시
- 기본적인 캐시 구현체로 EhcacheManager 제공 (org.springframework.cache.ehcache.EhCacheCacheManager)
-Spring 자체 Annotation 제공
2013.12 Ehacahe 2.8 release (net.sf.ehcache)
2014.01 Ehcache 2.9 release
2015.03 Ehcache 3.0.0.m1 release (org.ehcache)
2015.04 Ehcache 2.10 release
2018.03 Ehcache 3.5.2 release
분산 캐시
● Hub and Spoke (Ehcache 에서는 Distributed 라고 표현 )
각 JVM 이 가진 캐시 노드들을 캐시 서버가 중간에서 제어하는 구조
● Replication, Invalidation
각 노드 간 캐시를 노드 자체적으로 클러스터링
EHCache 는 Distributed, Replication, Invalidation 모두 가능 .
Distributed 를 선택할 경우 Terracotta Server 를 사용하며 ,
Replication 를 선택할 경우 변경 통지는 RMI, JGroups, JMS 같은
매커니즘을 플러그인 형태로 선택해서 사용할 수 있다 .
Terracotta Server
- 오픈 소스 기반의 분산 객체 저장소
- JVM 클러스터링 프레임워크
- NAM (NETWORK Attached Memory)
- BigMemory (Full GC 방지 )
- WAS 세션 클러스터링 (HttpSession 복제 )
-Session Grid, DataGrid
Terracotta Server 를 이용한 분산 Cache
Terracotta Server Array
Terracotta Server 는 여러대로 이중화 구성이 가능하며 Active-Passive 모드로
서비스를 하고 , 장애발생 시 자동으로 장애 허용 기능을 제공
Terracotta
driver
데이터 요구에 따른 ehcache 확장 구성
Enterprise Ehcache
● Ehcache License
Ehcache 는 Software AG 회사인 Terracotta 에 의해 유지관리 되며
Ehcache 는 오픈 소스 (Apache 2.0 license) 와
상용 Enterprise 제품 (Terracotta Ehcache) 으로 나뉜다 .
## Ehcache License : http://www.ehcache.org/about/license.html
● Terracotta Ehcache 에서 추가된 기능
- Terracotta Management Console(TMC) 과 함께 웹 기반 모니터링 및 관리 프로그램 제공
-FRS (Fast Restart) 기능 : 디스크에 메모리 내 데이터의 일관된 실시간 기록을 유지하여
엔터프라이즈 급 충돌 복구 기능을 제공
## Terracotta Ehcache : http://www.terracotta.org/terracotta-ehcache/
## Terracotta Ehcache release : https://confluence.terracotta.org/display/release/Home
Ehcache 기본 사용법
1) 라이브러리 추가
ehcache-3.5.2.jar (requires Java 8+)
jar 파일을 직접 다운받아 클래스 패스에 수동으로 추가해주거나 Maven 을 이용하는 경우 dependecy
추가한다 . 이때 버전에 따라 의존성이 있는 API 를 같이 추가해줘야 한다 .
Ehcache 3.x 에서는 cache-api (javax.cache API) 와 SLF4J ( 로깅 시 필요 )
2) CacheManager 생성
Ehcache 에서는 CacheManager 가 모든 Cache 객체를 관리한다 .
CacheManager 는 프로그래밍 방식 혹은 XML 을 통해 생성할 수 있습니다 .
3) Cache 운영
Cache 객체를 로드 해서 add, get, remove
Ehcache 기본 사용법
● Java 에서 CacheManager 생성
Ehcache 기본 사용법
● XML 파일로 CacheManager 생성
Ehcache + Spring
● Spring + ehcache 연동 예시
Ehcache v2 : http://blog.breakingthat.com/2018/03/19/springboot-ehcache-%EC%A0%81%EC%9A%A9
Ehcache v3 : http://www.ehcache.org/blog/2016/05/18/ehcache3_jsr107_spring.html
● Spring Cache annotation
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-annotations-cac
Ehcache 는 Spring 에서 제공하는 cache annotation 을 사용하여 간단하게 비즈니스 로직 캐
싱 ( 메서드 캐싱 ) 이 가능하기 때문에 Java 메서드에 캐싱을 적용함으로써 캐시에 보관된 정
보로 메서드의 실행 횟수를 줄일 수 있다 .
참고 #1
● Ehcache 2.x 기준 Ehcache Architecture 다이어그램
참고 #2
● Ehcache vs Redis vs Memcached
http://vschart.com/compare/ehcache/vs/redis-database/vs/memcached
https://db-engines.com/en/system/Ehcache%3bMemcached%3bRedis

More Related Content

What's hot

How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.은석 김은석
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3Ji-Woong Choi
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overviewOpen Source Consulting
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료Ji-Woong Choi
 
Eclipse rcp - first week
Eclipse rcp - first weekEclipse rcp - first week
Eclipse rcp - first weekTaewoo Kim
 
오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0sprdd
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet ArchitectureJU Chae
 
Db프로그래밍 환경 설정(131062 장택순)
Db프로그래밍 환경 설정(131062 장택순)Db프로그래밍 환경 설정(131062 장택순)
Db프로그래밍 환경 설정(131062 장택순)TaekSoon Jang
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우jieunsys
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기Ji-Woong Choi
 
오픈소스 모니터링비교
오픈소스 모니터링비교오픈소스 모니터링비교
오픈소스 모니터링비교sprdd
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Opennaru, inc.
 
Install Rails On Mac OS - RORLab Season 3-2
Install Rails On Mac OS - RORLab Season 3-2Install Rails On Mac OS - RORLab Season 3-2
Install Rails On Mac OS - RORLab Season 3-2창훈 정
 
[오픈소스컨설팅]Zabbix Installation and Configuration Guide
[오픈소스컨설팅]Zabbix Installation and Configuration Guide[오픈소스컨설팅]Zabbix Installation and Configuration Guide
[오픈소스컨설팅]Zabbix Installation and Configuration GuideJi-Woong Choi
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축I Goo Lee
 

What's hot (20)

How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview
 
Servlet3
Servlet3Servlet3
Servlet3
 
[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료
 
Eclipse rcp - first week
Eclipse rcp - first weekEclipse rcp - first week
Eclipse rcp - first week
 
오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0오픈소스컨설팅 클러스터제안 V1.0
오픈소스컨설팅 클러스터제안 V1.0
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
Db프로그래밍 환경 설정(131062 장택순)
Db프로그래밍 환경 설정(131062 장택순)Db프로그래밍 환경 설정(131062 장택순)
Db프로그래밍 환경 설정(131062 장택순)
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
오픈소스 모니터링비교
오픈소스 모니터링비교오픈소스 모니터링비교
오픈소스 모니터링비교
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
주키퍼
주키퍼주키퍼
주키퍼
 
Install Rails On Mac OS - RORLab Season 3-2
Install Rails On Mac OS - RORLab Season 3-2Install Rails On Mac OS - RORLab Season 3-2
Install Rails On Mac OS - RORLab Season 3-2
 
[오픈소스컨설팅]Zabbix Installation and Configuration Guide
[오픈소스컨설팅]Zabbix Installation and Configuration Guide[오픈소스컨설팅]Zabbix Installation and Configuration Guide
[오픈소스컨설팅]Zabbix Installation and Configuration Guide
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축
 

Similar to Backend Master | 2.2 Cache - Ehcache

Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략흥래 김
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회JaM2in
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)Chang-Hwan Han
 
Eclipse RAP - Single Source
Eclipse RAP - Single SourceEclipse RAP - Single Source
Eclipse RAP - Single Sourcecho hyun jong
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현병태 정
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipserbrodiebrodie
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
Apache http component
Apache http componentApache http component
Apache http component흥래 김
 
ibatis_khhan
ibatis_khhanibatis_khhan
ibatis_khhanohgamja3
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack CommunityOpen Source Consulting
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선NAVER D2
 

Similar to Backend Master | 2.2 Cache - Ehcache (20)

Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 
OPENMARU APM 브로셔
OPENMARU APM 브로셔OPENMARU APM 브로셔
OPENMARU APM 브로셔
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Eclipse RAP - Single Source
Eclipse RAP - Single SourceEclipse RAP - Single Source
Eclipse RAP - Single Source
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
Java memory
Java memoryJava memory
Java memory
 
OracleHistory1
OracleHistory1OracleHistory1
OracleHistory1
 
About memcached
About memcachedAbout memcached
About memcached
 
3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
Apache http component
Apache http componentApache http component
Apache http component
 
ibatis_khhan
ibatis_khhanibatis_khhan
ibatis_khhan
 
Ibatis
IbatisIbatis
Ibatis
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선
 

More from Kyunghun Jeon

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionKyunghun Jeon
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalKyunghun Jeon
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitKyunghun Jeon
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationKyunghun Jeon
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleKyunghun Jeon
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleKyunghun Jeon
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenKyunghun Jeon
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsKyunghun Jeon
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Kyunghun Jeon
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Kyunghun Jeon
 

More from Kyunghun Jeon (10)

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker Introduction
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnit
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy Automation
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - Gradle
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - Maven
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build tools
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
 

Backend Master | 2.2 Cache - Ehcache

  • 2. Ehcache 소개 EhCache 는 자바에서 사용되는 오픈 소스 기반의 캐시 -경량이고 빠르다 -확장성 (Scalable) : 메모리 / 디스크 저장 지원 , 멀티 CPU 의 동시 접근에 튜닝 -JSR107 (Jcache spec) 표준 지원 : Spring Caching 과 Hibernate 통합 가능 -오픈 소스 기반 (Apache 2.0 license) -분산 캐시 지원 (with Terracotta) 자세한 내용은 http://www.ehcache.org/about/features.html 참조
  • 3. Ehcache 소개 ● JCP ( JAVA Community Process ) 자바 표준을 정의하는 표준화 과정 ● JSR ( JAVA Specification Requests ) 자바 Spec 을 기술하는 공식문서 . 개인 및 조직은 JCP (Java Community Process) 의 회원이 될 수 있으며 JSR 에 언급 된 스펙 에 따라 코드를 개발할 수 있다 . 개발 된 기술적 변화는 JCP 회원들의 검토를 거쳐 승인된 다 . ● JSR107 ( JCACHE – Java Temporary Caching API ) 자바 Cache Spec. 객체 생성 , 공유 액세스 , 스풀링 , 무효화 및 JVM 전반에 걸친 일관성을 포함하여 Java 객체의 메모리 캐싱에서 사용할 API 에 대한 기준이 된다 .
  • 4. Ehcache 변화 2003.10 Greg Luck 에 의해 개발되어 출시 2009.08 Terracotta 에서 Ehcache 인수 2010.04 ~ 2011.09 Google-Project 에서 ehcache-spring-annotations.jar 제공 Spring 2.5 ~ 3.1 에서 사용되는 스프링을 위한 anotation 제공 (@Cacheable, @TriggersRemove 등 ) 2010.09 BigMemory for Ehcache 출시 2011.05 Software AG 에서 Terracotta 인수 2011.11 Spring Framework 3.1 출시 - 기본적인 캐시 구현체로 EhcacheManager 제공 (org.springframework.cache.ehcache.EhCacheCacheManager) -Spring 자체 Annotation 제공 2013.12 Ehacahe 2.8 release (net.sf.ehcache) 2014.01 Ehcache 2.9 release 2015.03 Ehcache 3.0.0.m1 release (org.ehcache) 2015.04 Ehcache 2.10 release 2018.03 Ehcache 3.5.2 release
  • 5. 분산 캐시 ● Hub and Spoke (Ehcache 에서는 Distributed 라고 표현 ) 각 JVM 이 가진 캐시 노드들을 캐시 서버가 중간에서 제어하는 구조 ● Replication, Invalidation 각 노드 간 캐시를 노드 자체적으로 클러스터링 EHCache 는 Distributed, Replication, Invalidation 모두 가능 . Distributed 를 선택할 경우 Terracotta Server 를 사용하며 , Replication 를 선택할 경우 변경 통지는 RMI, JGroups, JMS 같은 매커니즘을 플러그인 형태로 선택해서 사용할 수 있다 .
  • 6. Terracotta Server - 오픈 소스 기반의 분산 객체 저장소 - JVM 클러스터링 프레임워크 - NAM (NETWORK Attached Memory) - BigMemory (Full GC 방지 ) - WAS 세션 클러스터링 (HttpSession 복제 ) -Session Grid, DataGrid
  • 7. Terracotta Server 를 이용한 분산 Cache
  • 8. Terracotta Server Array Terracotta Server 는 여러대로 이중화 구성이 가능하며 Active-Passive 모드로 서비스를 하고 , 장애발생 시 자동으로 장애 허용 기능을 제공 Terracotta driver
  • 9. 데이터 요구에 따른 ehcache 확장 구성
  • 10. Enterprise Ehcache ● Ehcache License Ehcache 는 Software AG 회사인 Terracotta 에 의해 유지관리 되며 Ehcache 는 오픈 소스 (Apache 2.0 license) 와 상용 Enterprise 제품 (Terracotta Ehcache) 으로 나뉜다 . ## Ehcache License : http://www.ehcache.org/about/license.html ● Terracotta Ehcache 에서 추가된 기능 - Terracotta Management Console(TMC) 과 함께 웹 기반 모니터링 및 관리 프로그램 제공 -FRS (Fast Restart) 기능 : 디스크에 메모리 내 데이터의 일관된 실시간 기록을 유지하여 엔터프라이즈 급 충돌 복구 기능을 제공 ## Terracotta Ehcache : http://www.terracotta.org/terracotta-ehcache/ ## Terracotta Ehcache release : https://confluence.terracotta.org/display/release/Home
  • 11. Ehcache 기본 사용법 1) 라이브러리 추가 ehcache-3.5.2.jar (requires Java 8+) jar 파일을 직접 다운받아 클래스 패스에 수동으로 추가해주거나 Maven 을 이용하는 경우 dependecy 추가한다 . 이때 버전에 따라 의존성이 있는 API 를 같이 추가해줘야 한다 . Ehcache 3.x 에서는 cache-api (javax.cache API) 와 SLF4J ( 로깅 시 필요 ) 2) CacheManager 생성 Ehcache 에서는 CacheManager 가 모든 Cache 객체를 관리한다 . CacheManager 는 프로그래밍 방식 혹은 XML 을 통해 생성할 수 있습니다 . 3) Cache 운영 Cache 객체를 로드 해서 add, get, remove
  • 12. Ehcache 기본 사용법 ● Java 에서 CacheManager 생성
  • 13. Ehcache 기본 사용법 ● XML 파일로 CacheManager 생성
  • 14. Ehcache + Spring ● Spring + ehcache 연동 예시 Ehcache v2 : http://blog.breakingthat.com/2018/03/19/springboot-ehcache-%EC%A0%81%EC%9A%A9 Ehcache v3 : http://www.ehcache.org/blog/2016/05/18/ehcache3_jsr107_spring.html ● Spring Cache annotation https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-annotations-cac Ehcache 는 Spring 에서 제공하는 cache annotation 을 사용하여 간단하게 비즈니스 로직 캐 싱 ( 메서드 캐싱 ) 이 가능하기 때문에 Java 메서드에 캐싱을 적용함으로써 캐시에 보관된 정 보로 메서드의 실행 횟수를 줄일 수 있다 .
  • 15. 참고 #1 ● Ehcache 2.x 기준 Ehcache Architecture 다이어그램
  • 16. 참고 #2 ● Ehcache vs Redis vs Memcached http://vschart.com/compare/ehcache/vs/redis-database/vs/memcached https://db-engines.com/en/system/Ehcache%3bMemcached%3bRedis

Editor's Notes

  1. Ehcache는 자바에서 사용되는 오픈소스 기반의 캐시로 자바 표준 캐시 스펙 지원하며 분산 캐싱을 지원합니다. 분산처리가 필요하지 않은 경우 Ehcache는 독립적인 캐시 데몬을 가지지 않고 어플리케이션 구동 시 내부적으로 동작하기 때문에 원격 캐시 서버 사용으로 생길 수 있는 네트워크 지연 또는 단절로 인한 데이터 유실이 거의 없으므로 local cahce를 처리하기에 용이합니다. http://jdm.kr/blog/207
  2. JSR이란 자바 스펙을 기술하는 공식문서이고 그 중 JSR107은 자바의 표준 캐시 스펙으로 java 객체의 메모리 캐싱에서 사용할 API에 대한 기준입니다. 이런 JSR107 스펙으로 구현된게 ehcache 이며, 따라서 ehcache는 JSR 107에 기반한 구현체입니다. Ehcache는 JSR107 스펙을 지원하기 때문에 Spring 이나 hibernate와 같은 인기있는 라이브러리 또는 프레임워크와 같이 통합해서 폭넓게 사용할 수 있습니다.
  3. Ehcache는 2003년 10월 Greg Luck에 의해 개발되었으며 2009년 전까지는 크게 주목 받지 못했으나 terracotta 에서 ehcache를 인수하면서 주목 받기 시작합니다. Terracotta는 2004년 부터 기업을 위한 인-메모리 데이터 관리 솔루션 공급업체입니다. 이런 테라 코타에 ehcache가 인수되면서 Big Memory 등 다양한 기술들이 나오게 되며 특히 기존에는 분산캐시기능이 약했는데 이 부분이 강해지게 됩니다. 원래 기존 ehcache 에서 분산 캐싱은 복제 방식만 가능했는데 테라코타 덕에 글로벌 캐시를 두고 분산 처리하는 방식까지 지원하게 됐습니다. 현재는 테라코타 서버를 이용한 분산 처리방식만 사용 Ehcache의 변화에서 Spring annotation과 관련된 부분이 포함되어있는데 이 부분은, ehcache를 사용하려면 라이브러리를 로드해서 객체를 생성하고 객체를 가지고 메소드를 콜 해야했는데 스프링을 통해 캐시 추상화(CacheManager)를 하면 스프링 어노테이션이 붙은 메서드와 연관된 캐시의 이름만으로 쉽게 사용 할 수 있어서 Spring과 함께 많이 사용되기 때문입니다. -------------------------------------------------------------------------------------------- 스프링 3.1 이전에는 스프링에서 어노테이션을 직접 제공하지 않아서 스프링에서 어노테이션을 쓸 수 잇도록 구글 프로젝트에 보면 ehcache spring Integration이라는 프로젝트가 있었고 여기서 만든 jar파일을 import 해서 사용함 하지만 스프링 3.1로 넘어가면서 별도로 import 하지 않아도 됨 RedisCacheManager는 스프링 3.2에서 제공 Google-project(ehcache-spring-annotations) : https://code.google.com/archive/p/ehcache-spring-annotations/ Spring anotation : http://www.ehcache.org/documentation/2.8/integrations/spring.html
  4. Distributed(분산) , Replication(복제), Invalidation(무효화) 분산 캐싱은 크게 [각 캐시 노드들을 중간에서 제어하는 구조] 와 [각 노드 들끼리 자체적으로 클러스터링 하는 구조 ] 두 가지로 나눠집니다. Hub and Spoke 구조는 각 JVM이 가진 캐시 노드들을 캐시 서버가 중간에서 제어하는 구조로 각 노드에서 데이터가 변경 되면 중앙의 캐시 서버에 변경사항을 전달하면 캐시 서버가 다시 나머지 노드에 변경 사항을 전달합니다. Replication(복제)의 경우 각 노드간 캐시를 노드 자체적으로 클러스터링 하는데, 이 경우는 한 노드에서 변경이 발생하면 나머지 노드에 직접 변경을 알려줍니다. Ehcache는 두 기능 모두를 지원하며 Ehcache 3버전을 기준으로 일반적으로 중앙에서 제어하는 Terracotta Server를 사용합니다. (Ehcache 홈페이지에서 기존 Ehcache2버전에서는 RMI 방식을 선택하는 등의 연계 문서가 존재하지만 Ehcache3에서는 사라짐 ) http://www.mukgee.com/?tag=%EB%B6%84%EC%82%B0%EC%BA%90%EC%89%AC
  5. 테라코타 서버는 오픈소스 기반의 분산 객체 저장소로 JVM 클러스트링, NAM, Big Memorry 등의 기능을 지원합니다. NAM은 네트워크상에 가상에 메모리로 아주 큰 메모리 서버를 의미합니다. BigMemory를 사용하면 캐시에서 "힙 (off-heap) 저장소“ 라고 하는, 객체 힙 외부에 추가 유형의 메모리 저장소를 사용해서, 메모리에 대한 가비지 컬랙션이 일어날 수 있는데 사용자 입장에서 가비지 컬렉션을 느끼지 못하도록 합니다.
  6. Ehcache에서는 테라코타 서버를 이용해서 분산 캐싱을 할 수 있는데 그림과 같이 Terracotta server는 각 캐시 노드들의 허브 역할을 하는 분산 캐시 서버 역할을 하며 여러 캐시 노드의 동기화를 지원하며 캐시의 동기화를 위한 부하는 Terracotta server에 위임하게 됩니다. 서버 측의 Ehcache 클러스터 계층 관리자는 고유 식별자로 식별됩니다.  특정 클러스터 계층 관리자의 고유 식별자를 사용하여 여러 캐시 관리자가 동일한 클러스터 계층 관리자에 연결하여 캐시 데이터를 공유 할 수 있습니다. http://www.ehcache.org/documentation/3.5/clustered-cache.html
  7. Terracotta Server는 여러 대로 이중화 구성을 할 수 있는데, 이 구성을 Terracotta Server Array라고 불립니다. Terracptta 소개 : http://softwareag.biworks.co.kr/wp-content/uploads/2014/08/Terracotta%20Overview_Ver0.1_KR.pdf NEXTREE (분산캐시-EhCache+Terracotta Server Array ) : http://webcache.googleusercontent.com/search?q=cache:cGOOyTmyIdQJ:nextree.co.kr/p3151/+&cd=4&hl=ko&ct=clnk&gl=kr
  8. 이처럼 Ehcache는 사용자의 요구에 맞게 확장되며 사용할 수 있습니다. Terracptta 소개 : http://softwareag.biworks.co.kr/wp-content/uploads/2014/08/Terracotta%20Overview_Ver0.1_KR.pdf
  9. 라이선스가 애매 오픈 소스긴 한데 상용화 버전이 별도로 존재 코어 기능은 동일하지만 관리요소나 분산처리 모니터링 기능들이 다름 그런데 Ehcache License 에서 확인해보면 상용 관련 링크가 깨져있고 Terracotta Ehcache 에서 확인해보면 상용화 되면서 추가된 부분이 나오지만 실제 다운로드를 받을수 없어서 실제 라이선스 범위가 어디까지 인지 확인이 안됨.
  10. http://www.ehcache.org/documentation/3.5/getting-started.html
  11. http://www.ehcache.org/documentation/3.5/getting-started.html
  12. http://www.ehcache.org/documentation/3.5/getting-started.html
  13. http://www.ehcache.org/documentation/3.5/getting-started.html Spring 캐시 추상화 : https://blog.outsider.ne.kr/1094 EHCache (ehcache-spring-annotations, ehcache.xml, @Cacheable) : http://sjh836.tistory.com/129 대상 메서드가 실행될 때마다 해당 메서드가 같은 인자로 이미 실행되었는지 확인하여 비용이 큰 메서드(CPU든 IO든)를 같은 파라미터로는 딱 한 번만 실행할 수 있습니다.
  14. https://dzone.com/articles/role-caching-large-scale
  15. 해당 데이터가 존재한다면 실제 메서드를 실행하지 않고 결과를 반환하고 존재하지 않는다면 메서드를 실행하고 그 결과를 캐싱한 뒤에 사용자에게 반환해서 다음 번 호출 시에 사용할 수 있게 한다. 물론 이 접근방법은 얼마나 많이 호출하든지 간에 입력(혹은 인자)이 같으면 출력(결과)도 같다는 것을 보장하는 메서드에서만 동작 http://sjh836.tistory.com/129