싱글톤 패턴을 이용한 캐시 관리
백엔드
싱글톤 패턴을 이용한 캐시 관리
두줄요약
메뉴 권한처럼 변경은 적고 조회는 많은 데이터를 싱글톤 인메모리 캐시로 관리하는 방법을 소개했습니다. 이를 통해 로그인 시 DB 부하를 줄이고 응답 속도와 유지보수성을 개선했습니다.
문제 상황
- 사용자 로그인 시마다 메뉴 권한을 DB에서 반복 조회하는 구조로 인한 중복 접근
- 사용자 수 증가와 동시 로그인 상황에서 DB 부하, 로그인 응답 지연, 확장성 한계 발생
원인 분석
- 권한 데이터가 변경은 적고 조회는 많은 Read-Heavy 성격
- 같은 Role 사용자가 동일 권한을 공유하는데도 매 요청마다 재조회
해결 방법
- 애플리케이션 전체에서 하나의 캐시 객체만 쓰도록 싱글톤 패턴 적용
- 기동 시 권한 정보를 메모리에 적재하고 로그인 시 캐시 조회, 관리자 수정 시 캐시 갱신
주의할 점
- 캐시 무효화 실패 시 실제 권한과 캐시 불일치 가능성
- 다중 인스턴스 환경에서는 서버 간 캐시 불일치 문제와 분산 캐시 필요성
- 동시성 대응을 위해 HashMap 대신 ConcurrentHashMap 사용
적용해볼 점
- 변경 빈도는 낮고 조회 빈도는 높은 데이터에 캐시 우선 검토
- 캐시 저장보다 갱신 시점과 초기화 로직 설계가 핵심
