들어가면서
요즘 머릿속에 자꾸 남는 그림이 하나 있다. 화면을 그릴 재료가 밖(외부 HTTP, 설정 저장소, 누군가의 JSON) 에 있을 때, 그걸 브라우저가 또 한 번 가져오게 두지 말고, HTML을 만들기 전에 한 번 확정해 두자는 쪽이다.
이 글은 “이게 정답이다”가 아니라, 그쪽을 택하면 청구서가 어디에 붙는지를 나 혼자 정리해 두는 메모에 가깝다. 그리고 마지막에는 솔직히 나는 그 좋은 쪽을 못 하고 있다고 적어 둔다. (이상하게 여러 군데에서 이 글을 볼 것 같은 기분이 들어서, SOS도 살짝 넣었다.)
1. 한 번 거르면 홉이 줄어든다
브라우저가 페이지를 연 뒤에야 외부로 fetch를 날리면, 사용자 입장에서는 빈 자리 → 로딩 → 채움이 한 세트로 붙기 쉽다. 반대로 서버나 빌드 파이프라인에서 이미 본문·메타까지 박아 두면, “같은 데이터를 위해 네트워크를 한 번 더 탄다”는 그림을 줄일 수 있다. 특히 모바일·느린 구간에서 체감이 크다.
여기서 말하는 “서버”는 꼭 요청마다 살아 있는 SSR만이 아니다. 빌드 타임에 JSON을 읽어 정적 HTML을 뽑는 쪽도 같은 계열이다. 중요한 건 “언제, 어디서, 몇 번” 데이터를 확정하느냐다.
2. 메타·미리보기는 첫 응답이 유리하다
제목, 설명, 미리보기 이미지 같은 건 첫 HTML/헤더에 실려 있으면 크롤러·SNS 쪽이 JS 실행에 덜 기대도 된다. “항상 완벽”은 아니지만, 첫 페인트 전에 의미가 붙을 여지는 넓어진다.
3. 브라우저만의 제약에서 한 발 떨어진다
출처 정책 같은 이야기는 브라우저 클라이언트 쪽 이슈로 자주 등장한다. 반면 서버 간 HTTP는 같은 맥락이 한결 단순해지는 경우가 많다. 설계할 때 “왜 클라이언트만 되지?”를 전제로 박아 두지 않아도 되는 자리가 생긴다는 뜻이다.
4. 실패·지연·로그는 한 경로에 모을 수 있다
타임아웃, 재시도, 폴백, 로그를 한 레이어에 모으기 좋다. 반대로 “페이지 열고 나서 각자 fetch” 구조는 관측 지점이 흩어지기 쉽다. 운영을 해본 사람은 알 거다. 흩어지면 밤에 깨어난다.
5. 트래픽이 늘면 원본 부하는 선형으로 갈 수 있다
방문이 늘면 외부 API나 정적 원본을 클라이언트가 직접 두드리는 횟수도 같이 늘어난다. 여기에 캐시를 끼우면 그림이 바뀐다.
- CDN에 HTML·JSON·이미지를 얹고 히트율을 올리면, 엣지에서 끝나는 요청이 늘어난다.
- Cache-Control, 엣지 규칙, 앞단 캐시, 키-값 스토어 같은 것들은 이름만 다를 뿐 “같은 응답을 다시 만들지 않기” 쪽으로 수렴한다.
본문이 사용자마다 달라질 필요가 없는 유형이면, 캐시 적합도가 높다. TTL과 무효화만 잡혀 있으면 유입이 늘어도 원본 부하는 꺾이는 쪽으로 간다.
6. 인프라 비용은 있다. 다만 SSG까지 정리되면 다른 청구서가 된다
솔직히 서버를 돌리거나, 빌드·배포 파이프라인을 또 하나 신경 쓰거나, 캐시 무효화 규칙을 합의하는 일은 다 비용이다. “SSR이면 무조건 비싸다”만 기억하면 섭하다.
데이터 갱신 주기가 예측 가능하고, 키(예: 콘텐츠 ID) 단위로 경계가 잡히면 SSG(빌드 타임·주기적 재생성) + CDN 조합이 꽤 건강하다. 요청마다 계산하는 대신 파일을 밀어 넣고 가장자리에서 나눠 준다는 그림. 운영 난이도는 팀마다 다르지만, 잘 정리되면 “항상 동적 SSR”보다 단순하게 느껴지는 팀도 많다.
즉 트레이드오프는 “클라이언트 fetch의 단순함” vs “앞단에서 한 번 확정·캐시하는 청구서”에 가깝다. 프롭스 드릴링 글에서 말한 것처럼, 틀림이라기보다 교환에 가깝다.
7. 한 줄로
밖에서 오는 본문 데이터를, 브라우저가 매번 다시 당기게 두지 않고 서버·빌드·CDN 쪽으로 당겨 두면, 홉·관측·원본 부하에서 여유가 생길 수 있다. 다만 그만큼 파이프라인과 캐시 청구서는 따라온다.
8. 마지막에만 살짝 — SOS
위에서 적은 건 내가 하고 싶은 그림에 가깝다. 그런데 나는 지금 그걸 당연하게 못 하고 있다. 환경이 그렇게 안 놔두거나, 내가 그만큼 밀지 못했거나, 둘 다겠지.
글로만 정리해 두면 괜히 답답하다. 게다가 이상하게 여러 회사·여러 팀이 이 글을 통해 나를 보고 있을 것 같은 기분이 들어서, 끝에만 말해 둔다. 이 좋은 걸 못 하고 있는 사람, 여기 있다. 구조를 빌려 가도 되고, 연락을 줘도 되고, 아니면 그냥 지나가도 된다. 반반이다. 거짓말이다. 반반만 맞다.