ObjectCache클래스 (2007년 11월)
----------------------------------------------------------------

1. 소개

어플리케이션의 성능을 향상시키기 위한 ObjectCache클래스와 이를 이용한 간단한 Server/Client프로그램입니다.
캐쉬 데이터 관리는 LRU알고리즘을 이용하여 관리되며, 디폴트 생성자로 캐쉬 객체를 생성할 때 ObjectCache클래스 내에서
사용되는 환경변수의 디폴트 값은 다음과 같습니다.
    * JVM 힙메모리에서 사용 가능한 최대 사용량 기본값 : 80%
    * 캐쉬 데이터가 캐쉬내에서 유효한 기본 시간 : 1시간
    * 캐쉬 데이터 리스트의 데이터 기본 갯수 : 1000개

ObjectCache클래스는 다음과 같은 특징을 가지고 있습니다.
    * 싱글톤 패턴에 의해 유일한 단일 객체가 되며 Static영역에서 객체가 생성됩니다.
    * synchronized에 따라 데이터의 무결성을 보장합니다.
    * LRU 알고리즘에 의해 지정된 리스트 사이즈가 넘을 경우 삭제합니다.
    * 기본메서드 get(String key), set(String key, Object value), delete(String key) 메서드를 가집니다.
    * Fault Tolerant한 환경을 지원하기 위해 ObjectCache메모리 감시자가 존재하여
      사용자로부터 최대 메모리 허용치를 입력받아서 캐쉬 메모리 용량을 검사하고, 용량초과시 데이터를 삭제합니다.
      또한 캐쉬에 저장되는 데이터의 유효 시간을 지정하여 유효 시간이 지난 데이터도 함께 자동 삭제합니다.


2. 개발 및 테스트 환경

    * 운영체제: WindowsXP
    * 자  바  : JDK1.6.0
    * IDE툴   : Eclipse3.2.0
    * 테스트  : Junit4, Ant1.7.0
    * CharSet : UTF-8

 

3. 패키지설명

ObjectCacheProject폴더 이하 파일 및 디렉토리
    * lib        : 컴파일 및 테스트를 위한 확장라이브러리를 포함합니다.
    * src        : ObjectCache 및 Client/Server 프로그램의 소스입니다.
    * test.bat   : 도스 프롬프트하에서 Junit테스트 케이스를 실행하기 위한 배치파일입니다.
    * build.xml  : 도스 프롬프트하에서 Junit테스트 케이스를 실행하기 위한 설정파일입니다.
    * client.bat : 통신환경을 위한 클라이언트 프로그램 실행파일입니다.
    * server.bat : 통신환경을 위한 서버 프로그램 실행파일입니다.

 

4. 시작하기

1) 객체생성
  객체를 생성하기 위한 public static 메서드가 3가지 존재합니다.
      - getInstance(double maxCacheMemoryRatio, long maxCacheDataAge, long maxlistSize)
      - getInstance(long maxlistSize)
      - getInstance()

2) 기본 메서드
      - set(String key, Object value) : key와 value로 데이터를 캐쉬 메모리에 저장합니다.
      - get(String key) : key값으로 캐쉬 메모리로부터 데이터를 취득해 옵니다. (이때 LRU알고리즘에 의해 상위의 우선순위를 부여 받습니다)
      - delete(String key) : key값으로 캐쉬 메모리에 저장된 데이터를 삭제합니다.

3) Server/Client 프로그램
  ObjectCache를 테스트하기 위한 Server/Client환경의 서비스 프로그램입니다.
  Server는 가상 Database와 연동이 되어 있어서 Client의 메세지를 저장하고, 저장한 메세지를 검색할 수 있는 환경을 제공합니다.
  Client로부터 메세지 검색 요청을 받게 되면 1차 검색은 Cache를 통해 이뤄지고 Cache에서 히트시 검색된 메세지를 Cache로부터 전송하게 됩니다.
  Cache에서 히트하지 못한 경우 Database에서 2차 검색을 실시하고 Database에도 해당 메세지가 존재하지 않을 경우,
  "해당 데이터 없음" 메세지를 Client에게 전송하게 됩니다.
      - server.bat 을 먼저 실행 후 client.bat 을 실행합니다.

4) 테스트 케이스
  단위 테스트를 위해 Junit을 사용하였습니다.
      - 도스환경에서의 테스트는 test.bat 파일을 실행하므로써 테스트 결과를 확인할 수 있습니다. (파일을 열어 JAVA_HOME의 위치를 지정하여 주십시요.)
      - 이클립스 환경에서는 ObjectCacheTest.java 파일로 테스트를 실시하면 됩니다.

번호 제목 글쓴이 날짜 조회 수
347 java.util.Optional 에서의 map() 함수의 이해 황제낙엽 2026.06.24 666
346 linux(ubuntu) 의 jdk 21 이 설정된 환경에서 jdk 17 로 다운그레이드 절차 황제낙엽 2025.09.22 1532
345 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 2458
344 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 2038
343 [ChatGPT] JDBC API에서 java.sql과 javax.sql 패키지의 차이점 황제낙엽 2025.01.31 2218
342 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 2310
341 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 2525
340 [ChatGPT] File.delete() 함수로 파일 삭제가 되지 않는 경우 황제낙엽 2024.12.10 2809
339 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 2493
338 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 2555
337 Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 2624
336 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 2570
335 Exception 출력에 대한 고찰 황제낙엽 2024.06.10 2198
334 google-auth-library-oauth2-http 라이브러리 다운로드 황제낙엽 2023.11.19 4025
333 firebase-admin-java 라이브러리 다운로드 (firebase admin sdk library) 황제낙엽 2023.11.19 2805
332 Enum 활용 (개인블로그, Effective Java) file 황제낙엽 2023.11.02 2759
331 Enum 활용 (우아한기술블로그) file 황제낙엽 2023.11.02 2790
330 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2508
329 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 3336
328 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 2935