본문 바로가기
C.W.K.
Stream
Lesson 05 of 13 · published

의존성 캐싱

~13 min · cache, performance, actions/cache

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

캐시는 CI에서 가장 큰 단일 가속 수단이야

처음 의존성을 설치할 때는 분 단위 시간이 걸려. 두 번째에는 캐시가 따뜻해져서 초 단위로 끝나지. actions/cache가 범용 기본 요소고, setup-* 액션은 내장 캐시 단축키를 가지고 있어.

캐시 두 가지 방식

1) 내장 캐시 (권장)

  • actions/setup-python@v5 + cache: pip.
  • actions/setup-node@v4 + cache: npm / pnpm / yarn.
  • astral-sh/setup-uv@v3 + enable-cache: true.
  • actions/setup-go@v5는 기본적으로 Go 모듈 캐시를 써.

2) 범용 actions/cache

  • path: — 캐시할 대상이야.
  • key: — 주 키야. 보통 ${{ runner.os }}-deps-${{ hashFiles('**/lockfile') }}를 써.
  • restore-keys: — 정확한 키가 없으면 접두사로 폴백해.

캐시 함정

  • 캐시는 브랜치 범위로 동작해. main 브랜치의 캐시는 다른 브랜치에서도 보이지만, 기능 브랜치의 캐시는 main에서는 안 보여.
  • 저장소당 총 10GB 캐시를 쓸 수 있어. 오래된 캐시는 LRU 방식으로 제거돼.
  • 빌드 출력값 캐싱(dist/, .next/)은 시간을 아껴주지만 정확성에 위험이 있어. 가끔 콜드 캐시 상태에서도 빌드가 제대로 작동하는지 검증해 봐야 해.

Code

액션/캐시 — 빌드 출력값 범용 예제·yaml
      - name: Cache Next.js build
        uses: actions/cache@v4
        with:
          path: |
            ${{ github.workspace }}/.next/cache
          key: ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**/*.tsx', '**/*.ts') }}
          restore-keys: |
            ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-
            ${{ runner.os }}-nextjs-

External links

Exercise

최근 CI 실행 하나 열어봐. 캐싱 후보가 될 가장 느린 단계를 식별해 (설치? 빌드? 둘 다?). 거기에 캐시 계층을 추가해. 다시 실행해서 실제 소요 시간을 비교해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.