카테고리 없음

웹서버 캐시 설정 원리: 페이지 응답 속도를 높이는 기본 방법

14722 2026. 8. 24. 23:01

웹사이트를 운영하다 보면 페이지가 늦게 열리거나 서버의 CPU 사용량이 높아지는 문제가 발생할 수 있습니다.

특히 방문자가 많아지면 같은 페이지를 요청할 때마다 웹서버가 매번 데이터를 처리해야 하기 때문에 서버에 부담이 커질 수 있습니다.

이때 활용할 수 있는 대표적인 방법이 웹서버 캐시(Cache)입니다.

캐시는 자주 요청되는 데이터를 임시로 저장해 두었다가 같은 요청이 들어왔을 때 빠르게 제공하는 기술입니다. 쉽게 말하면 한 번 만든 결과를 잠시 보관해 두고 다시 사용할 수 있도록 하는 것입니다.

이번 글에서는 웹서버 캐시의 기본 원리와 Nginx를 기준으로 캐시를 설정하는 방법, 브라우저 캐시와 서버 캐시의 차이, 캐시 설정 시 주의해야 할 점까지 초보자도 이해하기 쉽게 정리해 보겠습니다.

1. 웹서버 캐시란 무엇인가?


사용자가 웹사이트에 접속하면 브라우저는 서버에 페이지를 요청합니다.

서버는 요청을 처리한 후 HTML, CSS, JavaScript, 이미지 등의 파일을 사용자에게 전달합니다.

캐시가 없는 경우에는 같은 페이지를 여러 번 요청할 때마다 서버가 반복해서 작업해야 합니다.

사용자
   ↓
웹서버 요청
   ↓
페이지 생성 및 처리
   ↓
응답 전달

반면 캐시를 사용하면 이미 만들어진 데이터를 저장해 두었다가 다시 활용할 수 있습니다.

첫 번째 요청
사용자 → 서버 → 페이지 생성 → 캐시 저장

두 번째 요청
사용자 → 캐시 → 빠른 응답

따라서 적절한 캐시 설정은 페이지 응답 속도를 높이고 서버의 반복적인 작업을 줄이는 데 도움이 됩니다.

2. 캐시를 사용하면 왜 빨라질까?

웹페이지 요청에는 여러 가지 작업이 필요합니다.

예를 들어 게시글 페이지 하나를 보여주기 위해 다음과 같은 과정이 필요할 수 있습니다.

사용자의 요청 확인
애플리케이션 실행
데이터베이스 조회
HTML 생성
이미지 및 CSS 파일 전달
브라우저에 응답

이 과정에서 캐시를 사용하면 이미 처리된 결과를 재사용할 수 있습니다.

특히 데이터베이스 조회나 애플리케이션 처리 과정이 많은 웹사이트에서는 캐시가 성능 개선에 도움이 될 수 있습니다.

3. 웹캐시의 종류

웹사이트에서 사용하는 캐시는 하나만 있는 것이 아닙니다.

대표적으로 다음과 같이 구분할 수 있습니다.

캐시 종류 주요 역할
브라우저 캐시 사용자의 브라우저에 파일 저장
웹서버 캐시 서버에서 응답 결과 저장
애플리케이션 캐시 프로그램에서 데이터 저장
데이터베이스 캐시 자주 사용하는 데이터 재사용
CDN 캐시 가까운 서버에서 콘텐츠 제공

이번 글에서는 특히 웹서버 캐시와 브라우저 캐시를 중심으로 알아보겠습니다.

4. 브라우저 캐시란?

브라우저 캐시는 사용자의 컴퓨터나 스마트폰에 웹페이지의 일부 파일을 저장하는 방식입니다.

예를 들어 웹사이트에서 다음과 같은 파일을 사용한다고 가정해 보겠습니다.

style.css
script.js
logo.png
banner.jpg

사용자가 처음 방문했을 때 이 파일을 다운로드하고 일정 기간 동안 브라우저에 저장할 수 있습니다.

다음에 같은 사이트를 방문하면 서버에서 다시 다운로드하지 않고 저장된 파일을 사용할 수 있습니다.

이렇게 하면 네트워크 요청을 줄이고 페이지 로딩 속도를 개선하는 데 도움이 됩니다.

5. Cache-Control이 중요한 이유

브라우저 캐시를 설정할 때 많이 사용하는 HTTP 응답 헤더가 Cache-Control입니다.

예를 들어 다음과 같이 설정할 수 있습니다.

Cache-Control: public, max-age=86400

여기서 max-age=86400은 캐시를 86400초 동안 사용할 수 있다는 의미입니다.

86400초는 하루입니다.

따라서 정적 파일을 하루 동안 캐시하도록 설정하는 예가 될 수 있습니다.

6. Nginx에서 정적 파일 캐시 설정하기

Nginx를 웹서버로 사용하는 경우 정적 파일에 캐시 정책을 적용할 수 있습니다.

예를 들어 다음과 같이 설정할 수 있습니다.

location ~* \.(jpg|jpeg|png|gif|webp|css|js|svg)$ {
    expires 7d;
    add_header Cache-Control "public, max-age=604800";
}

이 설정은 이미지, CSS, JavaScript 등의 정적 파일에 캐시 정책을 적용하는 예입니다.

expires 7d는 브라우저가 해당 리소스를 일정 기간 동안 캐시하도록 하는 데 사용됩니다.

604800초는 7일입니다.

7. 정적 파일에 캐시를 적용하는 이유

이미지나 CSS, JavaScript 같은 파일은 자주 변경되지 않는 경우가 많습니다.

예를 들어 다음과 같은 파일이 있다고 생각해 보겠습니다.

logo.png
style.css
main.js

방문자가 100명이고 같은 파일을 계속 요청한다면 캐시가 없는 경우 서버가 반복해서 파일을 제공해야 합니다.

하지만 브라우저 캐시를 적절하게 사용하면 이미 다운로드한 파일을 다시 사용할 수 있습니다.

따라서 다음과 같은 효과를 기대할 수 있습니다.

서버 요청 감소
네트워크 사용량 감소
페이지 로딩 속도 개선
서버 부하 감소
8. Nginx에서 HTML까지 무조건 캐시하면 안 되는 이유

모든 파일을 무조건 캐시하는 것은 좋은 방법이 아닙니다.

특히 로그인 정보나 사용자별 데이터가 포함된 페이지는 캐시 설정에 주의해야 합니다.

예를 들어 다음과 같은 페이지가 있습니다.

내 계정
주문 내역
장바구니
관리자 페이지
개인정보 페이지

이런 페이지를 잘못 캐시하면 사용자에게 다른 사람의 정보가 표시되는 심각한 문제가 발생할 수 있습니다.

따라서 정적인 파일과 동적인 페이지를 구분해서 캐시 정책을 설정하는 것이 중요합니다.

9. Nginx FastCGI 캐시란?

PHP 기반 웹사이트에서는 Nginx의 FastCGI 캐시를 사용할 수도 있습니다.

FastCGI 캐시는 PHP 애플리케이션이 생성한 응답 결과를 저장해 두었다가 동일하거나 캐시 가능한 요청에 재사용하는 방식입니다.

기본적인 예시는 다음과 같은 형태입니다.

fastcgi_cache_path /var/cache/nginx
    levels=1:2
    keys_zone=WORDPRESS:10m
    inactive=60m
    max_size=1g;

server {
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php-fpm.sock;

        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 60m;
    }
}

다만 실제 설정은 PHP-FPM 버전, 운영체제, 사이트 구조 등에 따라 달라질 수 있습니다.

특히 로그인 사용자나 관리자 페이지, 장바구니 같은 동적 페이지는 캐시에서 제외하는 설정을 함께 고려해야 합니다.

10. 캐시와 CDN의 차이

웹캐시를 이해하다 보면 CDN이라는 용어도 자주 만나게 됩니다.

CDN은 콘텐츠를 여러 지역의 서버에 저장하고 사용자와 가까운 위치에서 콘텐츠를 전달하는 방식입니다.

예를 들어 한국 사용자가 미국에 있는 원본 서버에 접속하는 대신 가까운 CDN 서버에서 이미지나 CSS 파일을 받을 수 있습니다.

원본 서버
    ↓
 CDN 서버
 ↙  ↓  ↘
사용자 사용자 사용자

따라서 CDN은 특히 이미지, 동영상, CSS, JavaScript 같은 정적 콘텐츠를 빠르게 전달하는 데 유용합니다.

11. 캐시가 제대로 적용됐는지 확인하는 방법

Nginx 설정을 변경했다면 실제로 캐시 헤더가 전달되는지 확인하는 것이 좋습니다.

리눅스 서버에서 curl 명령어를 이용할 수 있습니다.

curl -I https://example.com/style.css

응답 헤더에 다음과 같은 내용이 있는지 확인합니다.

Cache-Control: public, max-age=604800

또는 다음과 같은 캐시 관련 헤더를 확인할 수 있습니다.

Expires:
Cache-Control:
ETag:
Last-Modified:

실제 사이트에서는 브라우저 개발자 도구의 Network 탭에서도 응답 헤더를 확인할 수 있습니다.

12. Nginx 설정 변경 후 반드시 확인하기

Nginx 설정을 수정했다면 바로 서버를 재시작하기보다 먼저 설정 문법을 검사하는 것이 좋습니다.

sudo nginx -t

정상적으로 설정이 확인되었다면 reload를 사용할 수 있습니다.

sudo systemctl reload nginx

설정에 문제가 있다면 다음 명령어 결과를 확인합니다.

sudo nginx -t

운영 서버에서는 설정 파일을 변경할 때 백업 → 문법 검사 → reload → 정상 작동 확인 순서로 진행하는 습관이 좋습니다.

13. 캐시 설정 시 가장 주의해야 할 부분

캐시는 성능을 높이는 데 유용하지만 잘못 설정하면 문제가 발생할 수 있습니다.

① 변경된 파일이 바로 반영되지 않을 수 있다

CSS나 JavaScript 파일을 수정했는데 사용자의 브라우저에 예전 파일이 남아 있다면 변경 사항이 바로 나타나지 않을 수 있습니다.

이를 해결하기 위해 파일명 뒤에 버전을 붙이는 방법을 사용할 수 있습니다.

style.css?v=2

또는 빌드 시스템을 사용하는 경우 파일명에 해시값을 포함하는 방식도 많이 사용합니다.

② 개인정보가 포함된 페이지를 캐시하지 않기

로그인 사용자별 페이지는 캐시 정책을 신중하게 설정해야 합니다.

특히 다음 페이지는 캐시 대상에서 제외하는 것을 검토해야 합니다.

로그인 페이지
관리자 페이지
마이페이지
장바구니
결제 페이지
개인정보 페이지
③ 캐시 만료 시간을 적절하게 설정하기

캐시 기간을 너무 짧게 설정하면 캐시 효과가 떨어질 수 있습니다.

반대로 너무 길게 설정하면 변경된 콘텐츠가 오랫동안 사용자에게 반영되지 않을 수 있습니다.

따라서 파일의 변경 빈도에 따라 기간을 결정하는 것이 좋습니다.

14. 웹사이트 속도를 높이는 캐시 설정 순서

처음 캐시를 적용한다면 다음 순서로 접근하는 것이 좋습니다.

1단계
현재 웹사이트 응답 속도 확인
        ↓
2단계
이미지·CSS·JS 등 정적 파일 확인
        ↓
3단계
브라우저 캐시 설정
        ↓
4단계
Nginx 캐시 정책 적용
        ↓
5단계
필요한 경우 애플리케이션 캐시 적용
        ↓
6단계
CDN 사용 검토
        ↓
7단계
캐시 적용 전후 성능 비교

처음부터 모든 캐시를 적용하기보다는 정적 파일 캐시부터 시작하는 방법이 비교적 안전합니다.

15. 캐시 설정과 서버 모니터링을 함께 사용하기

앞에서 살펴본 Prometheus와 Grafana 같은 모니터링 시스템과 캐시를 함께 활용하면 서버 성능을 더욱 체계적으로 관리할 수 있습니다.

예를 들어 캐시를 적용한 후 다음 항목을 비교할 수 있습니다.

CPU 사용량
메모리 사용량
네트워크 트래픽
요청 처리량
페이지 응답 시간

캐시 설정 전보다 CPU 사용량과 응답 시간이 개선되었는지 확인하면 실제 효과를 판단하는 데 도움이 됩니다.

마무리

웹서버 캐시는 자주 사용하는 데이터를 일정 기간 저장해 두고 다시 활용하는 기술입니다.

적절한 캐시 설정을 적용하면 불필요한 서버 작업과 네트워크 요청을 줄이고 웹페이지 응답 속도를 개선하는 데 도움이 됩니다.

특히 Nginx에서는 이미지, CSS, JavaScript 같은 정적 파일에 브라우저 캐시를 적용하는 것부터 시작할 수 있습니다.

다만 모든 페이지를 무조건 캐시해서는 안 됩니다. 로그인이나 개인정보처럼 사용자마다 내용이 달라지는 페이지는 캐시 설정을 신중하게 적용해야 합니다.

결국 웹사이트 성능 개선에서 중요한 것은 "캐시를 많이 사용하는 것"이 아니라 "변경 빈도와 데이터 특성에 맞게 캐시하는 것"입니다.

함께 알아두면 좋은 리눅스·Nginx 명령어
# Nginx 설정 문법 검사
sudo nginx -t

# Nginx 설정 적용
sudo systemctl reload nginx

# HTTP 응답 헤더 확인
curl -I https://example.com

# 디스크 사용량 확인
df -h

# Nginx 로그 확인
sudo tail -f /var/log/nginx/access.log