Spring & Spring Boot/Nginx

[6] Nginx(엔진 x) - 콘텐츠 캐시(Content Cache), 성능 개선 설정

carrotweb 2026. 10. 15. 23:22
728x90
반응형

캐시 성능을 위한 추가 설정

 

캐시 환경 설정 (proxy_cache_path에 추가)

1. 캐시 파일을 저장할 하위 디렉터리 계층 구조를 설정합니다.

[levels=levels]

 

단계는 최대 3단계까지 설정할 수 있습니다.

단계 별 디렉터리 이름 길이는 1 또는 2만 지정할 수 있습니다.

levels=2:2:2

 

캐시 파일이 한 디렉터리에 몰리지 않도록 3단계 하위 디렉터리 구조로 나누어 저장하게 했습니다.

 

캐시 파일이 53e7658dcfe7a42a9b26451cd3a61bde이라면 끝에서부터 역순으로 디렉터리를 생성합니다.

최종 경로는 /var/cache/nginx/de/1b/a6/53e7658dcfe7a42a9b26451cd3a61bde이 됩니다.

 

2. 캐시 파일을 디스크에 저장할 때 임시 디렉터리를 거칠지 여부를 설정합니다.

[use_temp_path=on|off]
use_temp_path=off

 

임시 디렉터리(proxy_temp)를 거치지 않고 지정한 캐시 경로에 캐시 파일을 작성하여 디스크 I/O를 최적화합니다.

 

3. 캐시의 삭제 시간을 설정합니다.

[inactive=time]
inactive=10m <-- 10분

 

지정된 시간 동안 캐시를 사용하지 않았다면 만료(Expire) 여부와 상관없이 디스크에서 삭제됩니다.

 

4. 캐시의 최대 디스크 용량을 설정합니다.

[max_size=size]
max_size=1g <-- 1GB

 

캐시의 디스크 용량이 초과되면 캐시 관리자(Cache Manager)가 가장 오래된 캐시부터 삭제합니다.

 

 

캐시 설정 (location 블록에 추가)

1. 캐시에 락을 설정합니다. (기본값 off)

proxy_cache_lock on | off;
# 캐시 락
proxy_cache_lock on;

 

동시에 동일한 요청 들어올 경우 락을 걸어 첫번째 요청만 처리되게합니다. 다른 요청들은 대기 상태로 전환됩니다.

첫번째 요청에 대한 캐시가 생성되면 락이 풀리고 대기 중이던 요청들이 이 캐시를 사용하여 처리됩니다.

 

캐시에 락을 설정하면 Cache Stamped(캐시 스탬피드) 문제를 해결할 수 있습니다.

 

Cache Stamped(캐시 스탬피드)는 캐시 키가 없거(MISS)나 만료(EXPIRED)된 상태에서 동시에 여러 요청이 들어와 WAS로 몰리면서 심각한 부하를 일으키는 현상을 말합니다.

 

2. 대기 중인 요청들의 대기 시간을 설정합니다. (기본값 5초)

proxy_cache_lock_timeout time;
# 최대 대기 시간
proxy_cache_lock_timeout 3s;

 

대기 시간은 첫번째 요청이 실패하거나 느릴 때 무한 대기를 방지하기 위해서 설정해야 합니다.

 

3. 동일한 요청이 최소 몇 번이상 들어오면 캐시할 것인지 설정합니다. (기본값 1)

proxy_cache_min_uses number;
# 최소 10번이상 요청이 들어오면 캐시를 생성
proxy_cache_min_uses 10;

 

가끔씩 요청되는 경우에는 캐시되는 것을 방지하고 많이 요청되는 것만 캐시되게 하여 디스크 공간을 절약하고 효율을 극대화합니다. 디스크 용량이 크다면 설정할 필요가 없습니다.

 

4. WAS가 장애가 발생하거나 응답이 지연될 때 만료되었거나 오래된 캐시(Stale Cache)로 응답하도록 설정합니다. (기본값 off)

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 
| http_504 | http_403 | http_404 | http_429 | off ...;
  • error : WAS와 연결 중 오류가 발생한 경우
  • timeout : WAS와 연결 중 타임아웃이 발생한 경우
  • invalid_header : WAS가 잘못된 헤더를 반환한 경우
  • updating : 캐시가 업데이트 중인 경우 새로운 응답이 올 때까지 기존 캐시를 반환
  • http_500, http_502, http_503, http_504 : WAS가 특정 HTTP 5xx 에러 코드를 반환한 경우
  • http_403, http_404 : WAS가 HTTP 403 또는 404 에러 코드를 반환한 경우
  • off : 오래된 캐시를 사용하지 않음
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

 

WAS가 다운된 상태일 때 오래된 캐시(Stale Cache)를 보내주어 서비스 중단을 방지합니다.

 

 

추가적인 설정은 (https://nginx.org/en/docs/http/ngx_http_proxy_module.html)를 참고하시기 바랍니다.

728x90
반응형