Skip to content

posts(ci): Vitest 프로젝트 분리 글을 다듬어 9월 18일 예약 발행 - #433

Merged
Han5991 merged 5 commits into
mainfrom
posts/vitest-project-split
Sep 14, 2026
Merged

Han5991 merged 5 commits into
mainfrom
posts/vitest-project-split

Conversation

@Han5991

@Han5991 Han5991 commented Sep 14, 2026

Copy link
Copy Markdown
Owner

무엇

posts/ci/로컬에선 그대로인데 CI에서만 25초 빨라졌습니다.md를 다듬고 2026-09-18 예약 발행(status: scheduled)으로 올립니다. 배포 cron(KST 09:00)이 그날 공개합니다.

바뀐 것

설명·구조

  • 들어가며: 로컬 표 한 줄 + CI 25초는 문장으로. 결과 요약은 뺐다
  • environment 합산이 경과 시간보다 큰 이유를 파일별 합산으로 다시 설명
  • "코어가 남는다"(근거 없던 추정)를 절약 ÷ 워커 수 설명으로 교체 — 10으로 나누면 노이즈 아래, 4로 나누면 25초. 계산대 비유 삭제
  • 샤딩 절을 PR facebook/astryx#4103의 diff·본문 측정값으로 재배열 — matrix 발췌, 세 방식(329/497/296초) 표와 실행 링크, 2코어 ARM 러너, 판단 기준 셋
  • 후속 PR #3816 합산 수치와 core 빌드 레이스 여담 삭제(이 글 범위 밖)
  • 배운 점 삭제, 마치며를 체크리스트 여섯 개로
  • 어휘: 벽시계 → 경과 시간, 비유·대구·예고 틀 제거

측정값 검증 — 제목의 25초를 GitHub jobs API로 다시 뽑아 대조했다

  • main Deploy Run pnpm test 머지 전후 9회: 295.3 → 269.4초 (−25.9초). 창을 20회·전체(7/97/15)로 넓혀도 2226초. 글의 범위 숫자를 추출값으로 교체
  • 샤딩 표 3행이 job 전체 시간으로 적혀 있던 것을 스텝 시간(229/247/166초)으로 통일 — 476 = 229 + 247
  • 출처를 알 수 없는 214.5초·55.5초 삭제, 로컬 반복 측정은 값이 없어 "20초 안팎"으로만
  • 날짜 정정: 샤딩 제안은 머지 한 달 뒤, 닫힌 것은 승인 몇 시간 뒤(#4103 코멘트 기준)

재현성

  • JSON 리포터 덤프 명령과 비교할 필드(testResults[].name, assertionResults[].fullName)
  • Vitest 5 진단 줄은 비중이 클 때만 찍힘 — 설치된 5.0.0 소스로 확인, 가이드 링크 추가

확인

  • pnpm lint:posts 에러·경고 0 (이 글 기준)
  • prettier 통과

- 들어가며: 표를 로컬 한 줄로 줄이고 CI 25초는 문장으로, 결과 요약은 걷어낸다
- environment 합산이 경과 시간보다 큰 이유를 파일별 합산으로 다시 설명한다
- "코어가 남는다"를 절약 ÷ 워커 수 설명으로 바꾼다 — 10으로 나누면 노이즈 아래,
  4로 나누면 25초. 근거 없던 계산대 비유는 뺀다
- 샤딩 절을 PR #4103의 diff와 본문 측정값으로 다시 배열한다 — matrix 발췌,
  세 방식(329/497/296초) 표와 실행 링크, 2코어 ARM 러너, 판단 기준 셋
- 후속 PR #3816 합산 수치와 core 빌드 레이스 여담을 뺀다
- 배운 점을 없애고 마치며를 체크리스트 여섯 개로 바꾼다
- 어휘: 벽시계→경과 시간, 측정대·비유·대구·예고 틀 제거
- 날짜 정정: 제안은 한 달 뒤, 닫힌 것은 승인 몇 시간 뒤
- 반복 측정 편차 옆의 괄호(97.5초와 117.8초)를 뺀다 — 전/후 값이지 반복값이 아니다
- 샤딩 멈춤 기준에 merge queue 예외를 잇는다 — node 224초 바닥 때문에 더 쪼개도 적다
- Vitest 5 진단 줄은 environment 비중이 클 때만 찍힌다고 좁힌다
- 워커 수 "10개" → "열 개 가까이"(기본값 CPU−1), 체크리스트의 "코어 수" → "워커 수"
- CI 표의 ASCII 하이픈을 en dash·마이너스로 되돌려 다른 표와 맞춘다
- node environment 합계의 "이전" 칸을 약 34초(121 × 283ms)로 채운다
- 해시 3분할 실행 시간이 표와 중복되던 문장을 표 참조로 접는다
- Deploy `Run pnpm test` 머지 전후 9회를 jobs API로 다시 뽑는다 — 295.3 → 269.4초,
  −25.9초. 글의 범위(290–311 / 265–277)는 추출값(290–302 / 214–286)으로 바꾸고,
  머지 커밋 실행이 취소돼 다음 커밋이 첫 실행인 점과 넓힌 창(22~26초)을 출처에 적는다
- 샤딩 표 3행을 job 전체 시간(271/292/224)에서 스텝 시간(229/247/166)으로 고쳐
  1·2행과 기준을 맞춘다 — 476 = 229 + 247
- 출처를 모르는 214.5초·55.5초 문장을 뺀다
- 로컬 반복 측정은 값이 남아 있지 않아 "20초 안팎으로 흔들렸다"로만 적는다
- 파일당 비용 표에 "파일 하나만 돌렸을 때"를, 90~110초에 요약 줄 출처를 단다
- JSON 리포터 덤프 명령과 비교할 필드를 넣는다
- 4 vCPU 첫 등장에 PR CI는 다른 러너임을, 진단 줄에 vitest.dev 링크를 단다
@github-actions

github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

🔍 Cloudflare 프리뷰

브랜치 프리뷰 (고정) https://posts-vitest-project-split-blog.rewq5991.workers.dev
이 커밋 https://d5ece0e6-blog.rewq5991.workers.dev
커밋 SHA c8c9ceb9125c342fa6b9078a9c63788c9141dc99

브랜치 프리뷰 주소는 커밋마다 바뀌지 않으니 리뷰 내내 그대로 쓰시면 됩니다.

프로덕션(blog.sangwook.dev)은 그대로입니다 — 이 단계는 버전만 올리고
트래픽을 옮기지 않습니다. Admin 로그인은 프리뷰에서 동작하지 않을 수 있습니다.

@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

리뷰 요약

status: draft(2026-07-12) → status: scheduled(2026-09-18) 예약 발행 전환과 함께 도입부·측정값·샤딩 절을 실측 근거(GitHub jobs API, 실제 실행 링크)로 재검증해 다듬은 PR입니다. 이 글의 논지: 최적화가 줄인 것은 wall time이 아니라 total compute(CPU 시간)였고, 그 절약이 경과 시간으로 드러나는지는 병목이 실제로 존재하는 환경(코어가 포화된 4-vCPU CI)에서 재야만 보인다. CI는 통과했고, PR 설명에 적힌 삭제·수치 교체·용어 통일이 diff에 정확히 반영되어 있어 코드/글 양쪽에서 critical·high 지적 사항은 찾지 못했습니다.

이 PR은 순수 편집(트리밍·용어 통일·수치 검증)이라 새로 도입된 구조적 결함은 없습니다. 아래는 확신도가 낮은 참고 사항입니다.

낮은 심각도 · 확신도 낮음 (2건)

[low] 로컬에선 그대로인데 CI에서만 25초 빨라졌습니다.md:198 — 기준 2. 근거

  • 해당 문장: "Vitest 5부터는 비중이 크면 jsdom was created N times 진단 줄로 알려준다"
  • 문제: 이번 실행 환경에 vitest 패키지가 설치되어 있지 않고(node_modules 부재) 외부 URL 접근도 막혀 있어, PR 설명이 주장하는 "설치된 5.0.0 소스로 확인"을 이 리뷰에서 직접 재검증하지 못했습니다.
  • 제안: 별도 확인 불필요 — 작성자가 이미 소스로 확인했다고 명시했으므로 참고용 기록입니다.
  • 확신도: low

[low] 로컬에선 그대로인데 CI에서만 25초 빨라졌습니다.md:166-172 — 기준 2. 근거

  • 해당 문장: "러너 초 합계" 열(838 / 706 / 787)
  • 문제: "러너 초"라는 용어가 별도 설명 없이 표에 처음 등장합니다. 문맥상 "잡별 소요 시간의 합"으로 추론 가능하지만, 기준 4(설명 없이 처음 등장하는 용어는 미달)에 걸리는 경계선 사례입니다.
  • 제안: 표 앞이나 각주에 "러너 초 = 각 job이 점유한 시간의 합(직렬로 돌렸을 때 드는 총 컴퓨트)" 정도의 한 줄 설명을 추가하면 명확해집니다.
  • 확신도: low

확인했으나 문제 없음

  • 프론트매터 필수 필드(title/seoTitle/date/excerpt/status/slug/thumbnail/tags) 모두 존재, 스키마 위반 없음
  • thumbnail: 'vitest-project-split-thumb.png' 로컬 파일이 실제로 추가됐고 같은 폴더(ci/)의 기존 글(cache-hit-cold-build-thumb.png) 명명 관례와 일치
  • 코드블록(ts/yaml/sh/text) 전부 언어 태그 존재
  • 제목 계층 건너뜀(H2→H4) 없음
  • PR 설명이 명시한 삭제 대상("배운 점" 절, 계산대 비유, 후속 PR #3816·core 빌드 레이스 여담)이 diff에서 실제로 전부 제거됨을 확인
  • "벽시계" → "경과 시간" 용어 교체가 파일 전체에서 일관되게 적용됨(영문 "wall time"은 최초 정의 이후 그대로 유지되는 것도 일관된 패턴)
  • 마무리에 독자 행동 유도(댓글 요청) 존재, "그냥 끝나는" 글 아님
  • 본문에서 언급하는 이전 글 링크(cache-hit-cold-build)가 실제 저장소에 같은 slug로 존재
  • 수치 재검증(295.3→269.4초 등)이 PR 설명의 검증 절차와 일치하고, 본문 내 관련 서술 간 상호 모순 없음
  • CI(테스트/린트/타입체크) 전부 통과, PR diff에서 기인한 CI 실패 없음

확인하지 못한 범위: facebook/astryx PR(#3814, #4103) 및 GitHub Actions 실행 링크(31775879944 등)는 이 환경에서 외부 네트워크 접근이 차단되어 실제 존재 여부·수치 일치 여부를 직접 검증하지 못했습니다. pnpm lint:posts/prettier도 로컬에 의존성이 설치돼 있지 않아 재실행하지 못했고, PR 설명에 적힌 "에러·경고 0" 결과를 신뢰해 처리했습니다.

형제 글(캐시 글)과 같은 1200×630 카드 — 로컬·CI 최적화 전후 막대 넷. 색은
blog-preset.ts 다크 토큰(paper.50/100, ink.950/600/200, accent.500, moss.600),
글꼴은 Pretendard + JetBrains Mono, satori + sharp로 렌더. 자동 생성 /og/ 카드
대신 이 파일을 thumbnail로 잇는다.
- "wall time은 그대로였다"가 표의 97.5 → 117.8초와 반대 방향이라, 20초 늘어난
  사실을 먼저 쓰고 노이즈 범위라는 판단을 뒤에 붙인다
- node 잡 224초 = 스텝 166초 + checkout·setup + node 잡에서만 도는 저장소 동기화
  검사. ui 잡 오버헤드(42·45초)와 다른 이유를 적는다
@Han5991
Han5991 merged commit 1f03168 into main Sep 14, 2026
4 checks passed
@Han5991
Han5991 deleted the posts/vitest-project-split branch September 14, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant