LocalCache를 누군가 변경한다면?

sixhustle·2022년 3월 5일
0

질문

Spring Boot LocalCache는 in-memory를 사용하는데, 누군가 get한 후에 데이터를 변경한다면?!

기존 개발

  • 조회만 할 데이터를 cache적용. 따라서, 위 질문에 대해 고려해본적이 없었음…….
  • Caffeine Cache를 사용중이었고, 내부적으로 ConcurrentHashMap을 사용. 따라서, Heap에 저장될 것으로 판단
  • get한 후에 application에서 데이터를 변경하면 LocalCache 값이 변경됨(Reference Type의 경우)

Java의 경우, 항상 call by value. Reference Type은 주소값을 call by value처리

위의 질문은 어떻게 처리?

  • 정확한 처리 방법인지 모르겠지만, 생각난 2가지 방법

String 사용

  • cache의 value type을 String으로 사용(call by value)
  • get한 후에 원하는 class로 convert and return

깊은 복사

  • 원하는 데이터 타입으로 cache 사용
  • get한 후에 깊은 복사 with final
  • 그럼, 새로운 객체로 기존의 캐시와는 무방 & 불변객체로 값 변경 불가

Reference

0개의 댓글