기존 CSR로 구성된 프로젝트에서 SSR + prefetch를 적용하며 성능 개선을 시도했습니다.
이 과정에서 sessionStorage를 기반으로 동작하던 클라이언트 측 리다이렉트 방식에서 서버 측에서 쿠키를 활용한 middleware 리아티렉트 방식으로 전환하게 되었습니다.
이 글에서는 그 구조 변경의 흐름과 성능 비교 결과를 공유하고자 내용을 정리해보았습니다.
기존에는 사용자가 메인 페이지에 최초 진입했을 때 sessionStorage 값을 확인하여 랜딩 페이지로 리다이렉트하는 방식이었습니다.
하지만 이 방식에는 다음과 같은 문제들이 있었습니다.
결과적으로, 모든 페이지가 CSR 방식으로 처리되는 구조가 되었습니다.
SSR을 적용하기 위해 아래와 같은 구조로 리다이렉션 방식을 변경했습니다.
단, 이 과정에서 사용자가 창을 닫고 재진입했을 때도 랜딩 페이지로 이동하도록 하던 UX는 포기해야했습니다.
-> 대신 쿠키 만료일을 적절히 설정하여 유사한 제어를 시도했습니다.
성능 측정은 아래 환경에서 진행되었습니다.
예상과 달리 첫 요청(Cold Start)에는 middleware 방식이 CSR보다 느렸습니다.
하지만 그 이후 요청(Warm Start)부터는 CSR보다 조금 빠른 속도를 보여주었습니다.
이는 Vercel 환경에서 발생하는 Cold Start 현상 때문이었습니다.
Cold Start 시 응답

Warm Start 시 응답

CSR 환경 테스트는 Vercel 무료 플랜의 preview 배포 환경에서 진행했습니다.
첫 요청에는 인증 절차가 포함되어 있어 시간 측정이 다소 왜곡되었지만, 인증 시간을 제외하고 middleware와 동일한 기준으로 측정했습니다.

warm start 기준으로 middleware 방식이 CSR보다 약 15ms 빠르게 동작함을 확인할 수 있었습니다.
| Redirect 방식 | 평균 응답 시간 |
|---|---|
| middleware (Cold Start) | 1.1s |
| middleware (Warm Start) | 395.16ms |
| CSR | 409.7ms |
이번 구조 변경을 통해 서버 측에서의 middleware를 통한 redirect 제어할 수 있게 되었습니다. 더불어, SSR 기반 prefetch 전략 적용이 가능해졌습니다.
처음에는 middleware가 무조건 더 빠를 것이라 생각했지만, 실제로 Cold Start 상황에서는 CSR보다 느릴 수 있다는 점을 확인할 수 있었습니다.
이번 경험을 통해 클라이언트 중심 로직을 개선하는 방향에 대해 고민해보는 계기가 되었습니다.
이후에는 SSR + prefetch와 기존 CSR 구조 간의 데이터 로딩 체감 속도를 비교해볼 예정입니다.