[feat] ThreadLocalCache 모듈 개발
Closed this issue · 1 comments
JisooOh94 commented
요구사항
- 제네릭한 ThreadLocalCacheSupport 클래스 구현
- AOP 를 통한 선언적 캐싱 적용 구현
Features
- ThreadLocalCacheSupport 클래스 설게
- 어노테이션을 통한 선언적 AOP 를 이용해 ThreadLocalCaching 적용
JisooOh94 commented
하나의 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);
}