캐시 환경에서 AJAX 댓글 분리로 서버 응답 속도를 개선하는 방법
워드프레스에서 캐시를 적극적으로 활용해도 로그인 사용자가 많아지는 순간 성능이 급격히 떨어지는 경우가 있다. 대부분의 원인은 로그인 자체가 아니라, 로그인 상태에 따라 페이지 전체를 다시 생성하는 구조에 있다.
특히 댓글 기능은 로그인 정보, 댓글 목록, 댓글 작성 폼을 함께 렌더링하기 때문에 캐시 효율을 크게 떨어뜨리는 대표적인 요소다.
이번 글에서는 댓글 기능을 AJAX로 분리해 페이지는 항상 캐시된 HTML을 제공하고, 사용자 상태와 댓글 처리만 별도로 수행하도록 변경한 과정을 소개한다. 구조를 조금만 바꿔도 서버 응답 시간을 크게 줄일 수 있으며, 로그인 사용자가 많은 사이트일수록 효과를 체감하기 쉽다.
로그인 사용자는 왜 캐시를 사용하지 못할까?
워드프레스는 로그인 사용자를 일반 방문자와 다르게 처리한다.
페이지 요청이 들어오면 먼저 로그인 여부를 확인하고, 그 결과에 따라 사용자 정보를 포함한 HTML을 새롭게 생성한다. 이 과정에서 댓글 작성 폼, 사용자 이름, 댓글 목록 등 로그인 상태에 따라 달라지는 모든 요소를 함께 렌더링한다.
즉, 동일한 URL이라도 사용자마다 HTML 내용이 달라질 수 있기 때문에 일반적인 페이지 캐시를 그대로 사용할 수 없다.
결국 요청이 발생할 때마다 PHP가 실행되고 데이터베이스 조회가 반복되면서 서버 처리 시간이 증가하게 된다.
댓글 기능이 성능 저하의 원인이 되는 이유
댓글이 활성화된 페이지에서는 단순히 게시글만 출력하는 것이 아니다.
페이지를 생성하는 과정에서 다음과 같은 작업이 함께 수행된다.
- 로그인 사용자 정보 확인
- 댓글 작성 폼 생성
- 댓글 목록 조회
- 답글 구조 생성
- 댓글 권한 확인
이 작업들은 모두 서버에서 HTML을 만드는 과정에 포함된다.
방문자가 많아질수록 이러한 렌더링 작업이 반복되고, 캐시를 사용할 수 없는 로그인 사용자 요청이 늘어나면서 응답 시간이 길어진다.
처음에는 댓글 영역만 예외 처리하는 방식도 고려할 수 있다. 하지만 웹 서버 설정이나 CDN 구성에 따라 동작 방식이 달라질 수 있어 일관된 결과를 얻기 어려운 경우가 많다.
결국 가장 단순하면서도 안정적인 방법은 댓글 기능 자체를 페이지 렌더링과 분리하는 것이다.
페이지와 댓글을 완전히 분리하는 구조
구조를 변경한 핵심은 페이지와 사용자 데이터를 분리하는 것이다.
기존에는 페이지 요청과 동시에 댓글 관련 데이터도 함께 생성했다.
페이지 요청
↓
로그인 확인
↓
댓글 목록 생성
↓
댓글 폼 생성
↓
최종 HTML 반환
변경 후에는 페이지 HTML에는 사용자 상태를 포함하지 않는다.
페이지 요청
↓
캐시된 HTML 반환
↓
AJAX 요청
↓
댓글 정보 및 사용자 정보 조회
이렇게 하면 페이지 자체는 모든 사용자에게 동일한 HTML을 제공할 수 있다.
동적으로 변경되는 부분은 브라우저가 페이지를 받은 뒤 AJAX 요청을 통해 별도로 가져오므로 페이지 캐시를 유지할 수 있다.
AJAX 댓글 구조의 핵심 역할
AJAX 방식에서는 댓글 기능이 독립적인 요청으로 동작한다.
페이지가 먼저 출력된 이후 댓글 관련 정보만 별도의 요청으로 처리한다.
여기에는 다음과 같은 기능이 포함된다.
- 로그인 여부 확인
- 댓글 작성 폼 구성
- 사용자 정보 전달
- 댓글 등록
- 댓글 HTML 생성
- JSON 응답 반환
즉, 페이지 생성 과정에서는 댓글과 사용자 정보를 고려하지 않고, 필요한 시점에만 서버와 통신한다.
이 구조에서는 로그인 여부가 페이지 캐시를 무효화하는 원인이 되지 않는다.
댓글 등록 과정도 더 단순해진다
AJAX를 사용한다고 해서 서버 요청이 크게 늘어나는 것은 아니다.
오히려 요청의 목적이 명확해진다.
기존 방식에서는 댓글을 작성하면 댓글 저장뿐 아니라 페이지 전체를 다시 생성해야 했다.
댓글 작성
↓
댓글 저장
↓
페이지 전체 렌더링
반면 AJAX 방식에서는 필요한 작업만 수행한다.
댓글 작성
↓
댓글 저장
↓
JSON 응답
저장 결과만 전달하면 브라우저가 기존 화면에 댓글을 추가하면 되므로 서버는 불필요한 HTML 생성 작업을 수행하지 않는다.
처음에는 AJAX 요청이 하나 더 늘어나므로 오히려 서버 부하가 증가할 것으로 예상할 수도 있다.
하지만 실제로는 페이지 전체를 다시 렌더링하지 않기 때문에 처리해야 하는 작업량이 크게 감소한다.
캐시를 유지하면서 로그인 정보를 처리하는 방법
AJAX 구조의 가장 큰 장점은 페이지와 사용자 정보를 분리할 수 있다는 점이다.
페이지는 항상 동일한 HTML을 제공하고, 로그인 상태는 별도의 요청에서 확인한다.
이를 통해 다음과 같은 효과를 얻을 수 있다.
- 로그인 사용자도 캐시 활용 가능
- 동일한 HTML 재사용
- PHP 실행 횟수 감소
- 데이터베이스 조회 감소
- 서버 CPU 사용량 감소
결국 캐시 서버나 CDN이 페이지를 그대로 전달할 수 있기 때문에 응답 속도가 크게 향상된다.
실제 성능 변화
구조를 변경한 이후 가장 큰 변화는 초기 페이지 응답 속도였다.
기존에는 로그인 사용자가 페이지를 요청할 때마다 서버가 HTML을 생성해야 했기 때문에 응답 시간이 1초 이상 발생하는 구간이 반복됐다.
반면 AJAX 방식으로 변경한 이후에는 캐시된 HTML을 그대로 제공할 수 있게 되면서 응답 시간이 수십 밀리초 수준으로 감소했다.
특히 페이지 생성 과정에서 사용자 상태를 판단하지 않기 때문에 요청 자체가 단순해지고, 서버가 동시에 처리할 수 있는 요청 수도 증가했다.
이러한 차이는 로그인 사용자가 많을수록 더욱 크게 나타난다.
어떤 환경에서 가장 효과적일까?
AJAX 댓글 분리는 모든 사이트에서 반드시 필요한 것은 아니다.
방문자의 대부분이 비로그인 사용자라면 일반적인 페이지 캐시만으로도 충분한 경우가 많다.
반대로 다음과 같은 환경에서는 효과가 매우 크다.
- 회원 비율이 높은 커뮤니티
- 댓글 활동이 많은 사이트
- 로그인 후 이용하는 서비스
- CDN이나 페이지 캐시를 적극적으로 사용하는 사이트
- 서버 응답 시간을 줄여야 하는 환경
이러한 사이트에서는 로그인 사용자가 많아질수록 캐시를 활용하기 어려워지는데, 댓글과 사용자 정보를 분리하면 캐시 효율을 크게 높일 수 있다.
댓글 기능만이 아니라 ‘동적 요소 분리’가 핵심이다
AJAX 댓글 분리의 핵심은 댓글 기능 자체가 아니다.
더 중요한 것은 페이지를 정적인 영역과 동적인 영역으로 구분하는 설계 방식이다.
사용자마다 달라지는 정보는 가능한 한 별도의 요청으로 처리하고, 변하지 않는 HTML은 캐시를 최대한 활용하는 것이 성능 개선의 핵심이다.
이 원칙은 댓글뿐 아니라 로그인 정보, 알림, 즐겨찾기, 추천 기능 등 다양한 요소에도 동일하게 적용할 수 있다.
페이지 전체를 매번 새롭게 생성하는 구조에서 벗어나 필요한 데이터만 동적으로 가져오는 구조를 선택하면 서버 부하는 줄어들고 응답 속도는 크게 향상된다. 특히 로그인 사용자가 많은 워드프레스 사이트라면 댓글 기능의 AJAX 분리만으로도 캐시 효율과 사용자 경험을 동시에 개선할 수 있다.