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

빠른 실패

~9 min · fail-fast, ordering, pipeline-design

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

비싼 검사 전에 싼 검사

린트가 30초고 테스트가 8분이면 린트부터 돌려. 실패하면 테스트는 안 돌려도 돼. 실패한 PR마다 8분을 절약할 수 있지. 이 원칙을 일반화하면 이래:

  1. 포맷 체크 (5초) — 첫 번째.
  2. 린트 (30초) — 두 번째.
  3. 타입 체크 (1-3분) — 세 번째.
  4. 유닛 테스트 (2-10분) — 네 번째.
  5. 통합 / e2e 테스트 (5-30분) — 다섯 번째.
  6. 성능 예산 / 스모크 배포 — 마지막.

작업 수준의 needs: 그래프가 이걸 표현해. 매트릭스 수준의 fail-fast는 단일 작업 안에서 병렬로 돌릴 때도 같은 원리를 적용하는 거야.

반대 패턴: 가시성을 위한 병렬화

메인 브랜치에선 반대로 하는 게 나을 수 있어. 전부 병렬로 돌려서 실패한 걸 한 번에 다 보여주는 거지. 회고 분석할 때 '깨진 거 다 말해' 모드가 필요하니까. 대부분 팀은 PR에선 빠른 실패를 쓰고, 메인에선 전체 병렬로 돌려.

Code

빠른 실패 파이프라인 모양·yaml
jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ruff format --check .

  lint:
    needs: format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ruff check .

  type-check:
    needs: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: mypy src --strict

  test:
    needs: type-check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pytest -q

External links

Exercise

지금 쓰는 CI를 DAG로 그려봐. 비싼 검사의 하위에 있는 가장 싼 검사를 찾아. 그걸 상위로 옮겨. 푸시하고 다음에 실패하는 PR의 시간을 재봐 — 절약된 사이클을 확인해.

Progress

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

댓글 0

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

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