Diary/TIL

2024-04-16) 캐싱 적용 방법 탐색

nsean 2024. 5. 22. 09:08

서비스의 latency를 낮추기 위하여 캐싱을 적용하기로 했고, 다음과 같은 방법으로 캐싱 전략을 수립했다.

 

수립한 인덱스 전략

UserDetails는 사용자 인증 및 프로필 정보에 자주 접근하는 데이터로, 이 데이터의 조회 횟수가 매우 빈번합니다. 이를 효율적으로 관리하기 위해, redis에 그 값을 저장하여 db의 접근을 최소화 하였다.

항공편 검색 기능은 다수의 사용자에게 빈번하게 사용되며, 웹페이지 이용자 통계에 따르면 90%이상의 사용자가 1페이지만 조회하며, 2페이지는 전체 사용자의 6.6%, 3페이지 이후엔 그보다 더 적은 것으로 보였다. 이러한 서버 리소스의 최적화를 위하여 1,2페이지의 경우에만 캐싱이 되도록 전략을 수립했다.

좌석 조회 페이지의 경우, 

 

캐싱을 적용함으로서 기대할 수 있는 점

  1. 응답 시간 감소: 데이터를 빠르게 검색하여 응답 시간을 크게 단축시킬 수 있다.
  2. 데이터베이스 부하 감소: 자주 요청되는 쿼리 결과를 캐싱함으로써 데이터베이스 서버의 부하를 줄이고, 리소스 사용을 최적화한다.

유의해야할 점

  1. 캐시 일관성: 캐시된 데이터가 최신 상태를 유지하도록 관리해야 한다. 데이터가 변경될 때 캐시도 즉시 갱신되어야 일관성 문제를 방지할 수 있다.
    1. 캐싱 전략을 구현하면서 각각의 캐시의 수명을 직접 설정해주어 일관성을 유지하려고 시도하는 전략을 수립했다.
  2. 메모리 관리: Redis는 메모리를 사용하여 데이터를 저장하므로, 충분한 메모리 할당이 필요하다. 메모리 부족 상황을 방지하기 위한 모니터링과 적절한 메모리 관리 전략이 필요하다.
    1. Elasticache를 적용함으로써 보완이 가능하다.
  3. 보안 고려: 캐시 데이터가 민감한 정보를 포함할 수 있으므로, 적절한 보안 조치를 취해야 한다.
    1. Elasticache를 적용함으로써 VPC 내부에서만 cache에 접근이 가능하도록 설정해주어 보완할 수 있다.

 

프로젝트가 끝나고 돌이켜봤을때, 장바구니 정보와 같은 내용도 캐싱해줄 수 있지 않았을까? 생각이 된다.