JBoss Data Grid PostgreSQL Cache Store 사용하기
JBoss Data Grid(infinispan)을 사용하여 PostgreSQL로 Persistence Cache Store를 설정하여 성능을 향상시키세요.
JBoss Datagrid 퍼시스턴스 구성
Infinispan 에 저장된 데이터가 예기치 못한 장애나 서버 작업으로 인하여 유실되었을 경우를 대비해 File이나 DB 로 Persistence 하게 저장할 수 있도록 하는 Persistence 와 캐시스토어 설정과 사용방법에 대해 예제를 통하여 살펴봅니다.
이 예제는 Infinispan 6.0.1 버전을 기반으로 하였으며, JBoss Data Grid 버전으로는 6.2.0 버전에 해당합니다.
참조로 Infinispan 과 JBoss Data Grid 간의 버전 맵핑은 아래의 테이블에서 참조합니다.
Persistence 캐시 스토어 컴포넌트
Infinispan의 In-Memory 에 저장된 데이터를 영구히 저장하고 읽어 오는 방법으로 Persistence와 캐시 스토어를 설정할 수 있습니다.
persistence – 캐시에 데이터가 없는 경우 Persistence 데이터 저장소로 부터 데이터를 로드합니다.
캐시 스토어 ( Cache Store) – 캐시 로더를 확장 한 것으로 Persistence 데이터 저장소에 데이터를 저장하는 기능을 합니다.
캐시 저장소 유형 – 캐시 저장소 타입에는 다음과 같은 것들이 있습니다.
- File System Based Cache Stores : 파일 기반 캐시 스토어
- Remote Cache Stores : 리모트 캐시 스토어
- Custom Cache Stores : 사용자 정의형 캐시 스토어
- LevelDB Cache Store : LevelDB 캐시 스토어
- JDBC 기반 캐시 스토어 : JdbcBinaryCacheStore, JdbcStringBasedCacheStore, JdbcMixedCacheStore
이 예제에서는 stringKeyedJdbcStore 를 이용하여 PostgreSQL DB로 Persistence 저장합니다.
실습 – Infinispan 6.0.1 ( JBoss Data Grid 6.2) 에서 Persistence를 위한 캐시 로더와 캐시 스토어 설정하기
1. 개발 환경 구성
1.1. Eclipse 개발 환경
JDBC Cache Store 를 위한 샘플 프로젝트의 형태는 아래의 그림과 같습니다.
pom.xml 파일을 작성하여 Eclipse Maven Project 로 프로젝트를 구성합니다.
Cache에 대한 정의와 DB Persistence 설정을 위한 JdbcStoreTest.xml 파일과 Cache 에 Put/Get 을 하기 위한 자바 클래인 JdbcStoreTest.java 를 작성합니다.
1.2. pom.xml 작성
Maven 프로젝트에 대한 artifact는 MyFirstDatagrid 라는 이름으로 버전 0.0.1-SNAPSHOT으로 생성하였습니다.
pom.xml 파일 내용은 아래와 같습니다.
4.0.0 MyFirstDatagrid MyFirstDatagrid 0.0.1-SNAPSHOT 6.0.1.Final 9.1-901.jdbc4 org.infinispan infinispan-core ${version.org.infinispan} org.infinispan infinispan-cachestore-jdbc ${version.org.infinispan} postgresql postgresql ${version.org.postgresql} c3p0 c3p0 0.9.1.2
2. XML 로 namedCache 정의하기
JdbcStoreTest.xml 파일에 캐시로더와 캐시스토어로 stringKeyedJdbcStore 를 사용하며 PostgreSQL DB 에 저장하고 로드하게 됩니다.
3. 캐시를 사용하는 자바 애플리케이션 코드 작성하기
코드의 내용은 “JdbcStoreTest.xml” 파일에서 “persistentCache”에 대한 정의 내용을 읽고 stringKeyedJdbcStore 로 정의된 PostgreSQL 에 저장된 데이터를 로딩하게 됩니다.
최초 실행 시에는 데이터베이스에 저장된 데이터가 없기 때문에 “cache.get()” 실행 시 “null” 이 출력 됩니다. 다음 로직이 1~100 까지 “cache.put”을 수행하게 cache 에 데이터가 저장됨과 동시에 JDBC 를 통하여 PostgreSQL DB 에도 데이터가 저장되게 됩니다.
애플리케이션을 두 번째 실행하게 되면 첫 번째 실행 시 DB 캐시 스토어에 저장되었던 데이터가 출력되어 최초 “null” 값이 아닌 “value99” 형태로 순차적으로 값이 출력됩니다.
JdbcStoreTest.java 코드는 아래와 같습니다.
package infinispan.sample;import org.infinispan.Cache;
import org.infinispan.manager.DefaultCacheManager;public class JdbcStoreTest {
public static void main (String args []) throws Exception {
Cache cache = new DefaultCacheManager ( "JdbcStoreTest.xml").getCache("persistentCache");
for (int i = 1; i <= 100; i++) { System.out.println ( "Key ="+ java.lang.Integer.toString (i) + ", Value ="+ cache.get (java.lang.Integer.toString (i))); } for (int i=1; i<=100; i++) { cache.put (java.lang.Integer.toString (i), "value"+ java.lang.Integer.toString (i)); } } } [/code] [/av_textblock] [/av_one_full] [av_one_full first min_height='' vertical_alignment='av-align-top' space='' row_boxshadow='' row_boxshadow_width='10' row_boxshadow_color='' custom_margin='' margin='0px' av-desktop-margin='' av-medium-margin='' av-small-margin='' av-mini-margin='' mobile_breaking='' mobile_column_order='' border='' border_style='solid' border_color='' radius='' min_col_height='' padding='' av-desktop-padding='' av-medium-padding='' av-small-padding='' av-mini-padding='' svg_div_top='' svg_div_top_color='#333333' svg_div_top_width='100' svg_div_top_height='50' svg_div_top_max_height='none' svg_div_top_flip='' svg_div_top_invert='' svg_div_top_front='' svg_div_top_opacity='' svg_div_top_preview='' svg_div_bottom='' svg_div_bottom_color='#333333' svg_div_bottom_width='100' svg_div_bottom_height='50' svg_div_bottom_max_height='none' svg_div_bottom_flip='' svg_div_bottom_invert='' svg_div_bottom_front='' svg_div_bottom_opacity='' svg_div_bottom_preview='' fold_type='' fold_height='' fold_more='자세히 보기' fold_less='Read less' fold_text_style='' fold_btn_align='' column_boxshadow='' column_boxshadow_width='10' column_boxshadow_color='' background='bg_color' background_color='' background_gradient_direction='vertical' background_gradient_color1='#000000' background_gradient_color2='#ffffff' background_gradient_color3='' src='' background_position='top left' background_repeat='no-repeat' highlight='' highlight_size='' fold_overlay_color='' fold_text_color='' fold_btn_color='theme-color' fold_btn_bg_color='' fold_btn_font_color='' size-btn-text='' av-desktop-font-size-btn-text='' av-medium-font-size-btn-text='' av-small-font-size-btn-text='' av-mini-font-size-btn-text='' animation='' animation_duration='' animation_custom_bg_color='' animation_z_index_curtain='100' parallax_parallax='' parallax_parallax_speed='' av-desktop-parallax_parallax='' av-desktop-parallax_parallax_speed='' av-medium-parallax_parallax='' av-medium-parallax_parallax_speed='' av-small-parallax_parallax='' av-small-parallax_parallax_speed='' av-mini-parallax_parallax='' av-mini-parallax_parallax_speed='' fold_timer='' z_index_fold='' css_position='' css_position_location='' css_position_z_index='' av-desktop-css_position='' av-desktop-css_position_location='' av-desktop-css_position_z_index='' av-medium-css_position='' av-medium-css_position_location='' av-medium-css_position_z_index='' av-small-css_position='' av-small-css_position_location='' av-small-css_position_z_index='' av-mini-css_position='' av-mini-css_position_location='' av-mini-css_position_z_index='' link='' linktarget='' link_hover='' title_attr='' alt_attr='' mobile_display='' mobile_col_pos='0' id='' custom_class='' template_class='' aria_label='' av_uid='av-oudpoz' sc_version='1.0'] [av_textblock fold_type='' fold_height='' fold_more='자세히 보기' fold_less='Read less' fold_text_style='' fold_btn_align='' textblock_styling_align='' textblock_styling='' textblock_styling_gap='' textblock_styling_mobile='' size='' av-desktop-font-size='' av-medium-font-size='' av-small-font-size='' av-mini-font-size='' font_color='' color='' fold_overlay_color='' fold_text_color='' fold_btn_color='theme-color' fold_btn_bg_color='' fold_btn_font_color='' size-btn-text='' av-desktop-font-size-btn-text='' av-medium-font-size-btn-text='' av-small-font-size-btn-text='' av-mini-font-size-btn-text='' fold_timer='' z_index_fold='' id='' custom_class='' template_class='' av_uid='av-luxxqzmd' sc_version='1.0' admin_preview_bg='']4-2. Postgres 에 저장된 데이터 확인해 보기
최초 실행 후에는 Persistence 데이터가 PostgreSQL 에 저장된 것을 확인 할 수 있습니다.
stringKeyedJdbcStore 형태로 캐시스토어를 사용하게 되면 데이터베이스에는 key 값을 Primary 로 하여 Value 는 Binary 로 저장됩니다.
각 레코드는 아래의 그림과 같이 저장됩니다.
Reference & Related Links
- Red Hat JBoss Data Grid 6.2 Administration and Configuration Guide - https://access.redhat.com/site/documentation/en-US/Red_Hat_JBoss_Data_Grid/6.2/html-single/Administration_and_Configuration_Guide/index.html#sect-JdbcStringBasedStores
- Red Hat JBoss Data Grid Version Information – https://access.redhat.com/site/documentation/en-US/Red_Hat_JBoss_Data_Grid/6.2/html/Getting_Started_Guide/Red_Hat_JBoss_Data_Grid_Version_Information.html
- JBoss Datagrid download – https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=data.grid&productChanged=yes
클라우드 네이티브 가상화 – 가상화도 클라우드 네이티브 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3OpenShift Virtualization 소개: 가상화도 클라우드 네이티브로
/in OPENMARU, Red Hat, Tech Talk/by 오픈마루 마케팅1이제는 클라우드 네이티브 (Cloud Native) 기반 온프레미스 2.0 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3