JisooOh94/AopLocalCaching

[feat] ThreadLocalCache 모듈 개발

Closed this issue · 1 comments

요구사항

  • 제네릭한 ThreadLocalCacheSupport 클래스 구현
  • AOP 를 통한 선언적 캐싱 적용 구현

Features

  • ThreadLocalCacheSupport 클래스 설게
  • 어노테이션을 통한 선언적 AOP 를 이용해 ThreadLocalCaching 적용

하나의 ThreadLocaclCache 모듈에서 전체 데이터 캐싱을 관리하려면, ThreadLocal 에 2차원 Map 을 통해 캐싱하는 방법이 유일하다. 이렇게 될 경우, 캐시 조회시 Hasihg Function 을 2번 수행하게되어 성능저하가 발생한다. 이러한 문제를 완화하고자 각 데이터들의 캐싱 Map 을 저장하는 바깥쪽 Map을 EnumMap 으로 설정하여 1번의 Hashing Function 만 수행하도록 수정하였다.

//ThreadLocalCacheInterceptor.java
private ThreadLocal<EnumMap<LocalCacheType,  CacheStorage>> threadLocalCache = new InheritableThreadLocal<>();

//LocalCacheType.java - 캐싱 데이터 enum
public enum LocalCacheType {
	COMMON_CACHE,
	USER_INFO_CACHE
	;

	LocalCacheType() {}
}

//UserInfoBo.java - 캐싱 사용부
@LocalCacheable(type = USER_INFO_CACHE, maxSize = 10, keyFormat = "{}-{}", keyPrefix = "userInfo")
public UserInfo getUserInfo(String userId) {
	return userInfoDao.getUserInfo(userId);
}