pile·
인프라 / DevOps·vercel-blogVercel Blog·

Next.js 가속: Remote Caching으로 발행 시간 80% 단축

Next.js 코어 팀이 Rust 기반 SWC 도입 후 멀티플랫폼 바이너리 빌드가 릴리스 파이프라인의 병목이 된 문제를 Turborepo Remote Caching으로 해결해 배포 시간을 80% 단축했다. 바이너리 커밋·개발용 바이너리·CI 레벨 캐싱 등 여러 접근법의 실패 원인을 분석하고, Remote Caching이 이를 근본적으로 해결한 방식을 상세히 설명한다.

핵심 포인트
  • 문제: Next.js 12에서 SWC 도입 후 멀티플랫폼 Rust 바이너리 컴파일이 릴리스 CI의 주요 병목으로 부상
  • 1차 실패: SWC 바이너리를 git에 직접 커밋 → 레포 크기 폭증 + git clone 속도 저하로 철회
  • 2차 실패: CI 레벨 캐싱 → 높은 캐시 미스율과 CI 캐시 제거 정책으로 불안정
  • Remote Caching의 핵심: 태스크 입력(소스, 의존성, 환경변수, `--target` 플래그) 기반 해시로 플랫폼별 캐시 정확히 구분
  • 영구 스토리지: 해시 기반 저장소는 CI 정책에 의한 캐시 제거 없이 과거 빌드도 복원 가능
  • 사전 시딩 GitHub Action: 코드 변경 시 자동으로 SWC 바이너리를 미리 빌드해 논블로킹 + 조기 실패 탐지
상세 정리
  • Next.js 12에서 Rust 기반 SWC 도입으로 개발자 경험은 크게 향상됐으나, 멀티플랫폼 Rust 바이너리 컴파일이 릴리스 파이프라인의 새로운 병목으로 등장
  • 1차 접근: 컴파일된 SWC 바이너리(Windows, Mac, Linux)를 레포에 직접 커밋 → 카나리 없이 테스트 가능하나 레포 크기 폭증 + clone 속도 저하로 철회
  • 2차 접근: 개발용 바이너리로 전환 → 빌드 시간 소폭 개선이나 팀 불만족
  • 3차 접근: CI 레벨 캐싱 → CI 캐시 제거 정책으로 높은 캐시 미스율 + 플랫폼 처리 차이로 카나리/스테이블 릴리스 실패 발생
  • Turborepo Remote Caching 도입: 태스크 입력 기반 해시로 캐시 키 생성, `--target` 플래그를 입력에 포함시켜 플랫폼별 바이너리 혼재 문제 해결
  • 영구 스토리지: 해시 기반 저장소는 내용 주소 방식이라 CI 정책에 의한 캐시 제거 없음, 과거 빌드도 해시만 알면 언제든 복원 가능
  • 사전 시딩 GitHub Action: 코드 변경 감지 시 SWC 바이너리 빌드를 자동 트리거, 릴리스 프로세스와 독립적으로 백그라운드에서 진행
  • 논블로킹 빌드: 사전 시딩이 개발 플로우와 독립적으로 진행되어 릴리스 대기 시간 없음
  • 조기 실패 탐지: 실제 카나리 릴리스 도중이 아닌 사전 빌드 단계에서 플랫폼별 컴파일 문제를 먼저 식별
  • FreeBSD 빌드 지원, 버전 변경 시 캐시 유효성 보존 등 팀 특수 요구사항을 위한 커스텀 스크립트 작성
  • Remote Cache 히트 시 릴리스 배포 시간 80% 단축, 개발 이터레이션 속도 및 내부 개발·최종 사용자 기능 전달 가속화
왜 읽나CI/CD 파이프라인에서 네이티브 바이너리 빌드가 병목이 되는 문제에 직면한 팀에게 실용적인 해결책을 제시한다. Turborepo Remote Caching의 설계 원리(해시 기반 영구 저장소, 태스크 입력 기반 캐시 키)와 기존 CI 캐시 대비 장점을 이해하면 자체 빌드 파이프라인 최적화에 바로 적용할 수 있다.
vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    대규모 도그푸딩: cdnjs를 Cloudflare 개발자 플랫폼으로 이전하다

    cdnjs는 하루 90억 요청을 처리하는 오픈소스 JS/CSS CDN으로, 전 세계 웹사이트의 12%가 의존한다. 2026년 6월, Cloudflare는 6년간 GCP에서 운영하던 발행 파이프라인을 Workers, Workflows, R2, KV, Queues, Containers, Durable Objects로 완전 전환했다. 성능 문제가 아닌 관측성·유지보수성 한계가 동인이었으며, 마이그레이션 과정에서 플랫폼 한도를 직접 끌어올렸다.

    #durable-objects#workflows#cloudflare-workers+2
  2. 인프라 / DevOps·github-engGitHub Engineering·

    Dependabot 길들이기: 업데이트 묶고, 주기 늦추고, 보안은 빠르게

    GitHub의 Dependabot은 의존성 업데이트를 자동화하지만, 기본 설정에서는 10개 업데이트 = 10개 PR이 쏟아져 메인테이너가 알림을 무시하게 된다. Microsoft의 GCToolkit 사례(578개 커밋 중 92개가 Dependabot 버전 범프)를 바탕으로, 그룹핑·주기 조절·보안 업데이트 분리 3가지 설정으로 노이즈를 줄이면서 보안 속도는 유지하는 방법을 다룬다.

    #github-actions#devops#supply-chain-security+2
  3. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    Cloudflare, 프라이버시 프로토콜 디버깅 CLI pvcli 오픈소스 공개

    Cloudflare가 OHTTP(Oblivious HTTP) 등 프라이버시 보존 프로토콜 디버깅을 위한 CLI 도구 pvcli를 오픈소스(Apache-2.0)로 공개했다. 기존에는 RFC를 참조하며 바이너리를 수작업으로 파싱해야 했는데, pvcli는 curl과 유사한 문법으로 이 과정을 단일 명령으로 줄인다. Apple Private Relay·Microsoft Edge Secure Network를 구동하는 실전 규모의 경험에서 나온 도구다.

    #rust#cli#ohttp+2