Skip to content

성능 개선 사항 ‐ Caching

Mingi Kim edited this page May 7, 2024 · 1 revision

채택한 기능

  • 인-메모리 캐싱
  • 분산 캐싱
  • DB 캐싱
  • 웹 캐싱
  • 어플리케이션 캐싱

수립한 인덱스 전략

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

항공편 검색 기능은 다수의 사용자에게 빈번하게 사용되며, [웹페이지 이용자 통계](https://www.linkedin.com/pulse/how-important-page-one-search-results-2023-dave-meyer/)에 따르면 90%이상의 사용자가 1페이지만 조회하며, 2페이지는 전체 사용자의 6.6%, 3페이지 이후엔 그보다 더 적은 것으로 보였다. 이러한 서버 리소스의 최적화를 위하여 1,2페이지의 경우에만 캐싱이 되도록 전략을 수립했다.

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

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

유의해야할 점

  1. 캐시 일관성: 캐시된 데이터가 최신 상태를 유지하도록 관리해야 한다. 데이터가 변경될 때 캐시도 즉시 갱신되어야 일관성 문제를 방지할 수 있다.
  2. 메모리 관리: Redis는 메모리를 사용하여 데이터를 저장하므로, 충분한 메모리 할당이 필요하다. 메모리 부족 상황을 방지하기 위한 모니터링과 적절한 메모리 관리 전략이 필요하다.
  3. 보안 고려: 캐시 데이터가 민감한 정보를 포함할 수 있으므로, 적절한 보안 조치를 취해야 한다.

추후 개선 가능한 부분

  • 정적 파일 캐싱 적용

    nginx에서 css, js 파일을 캐싱

    server {
        listen 80;
        server_name www.pigonair.shop;
    
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            expires 30d;
            add_header Cache-Control "public";
            try_files $uri $uri/ =404;
        }
    }