Summary
같은 커밋으로 CI를 반복 실행해 E2E 테스트 16건의 실패율을 측정하고, 흔들리는 케이스를 잡습니다.
구현 설계서 E2E 테스트 도입 구현 설계 v2의 Task 8에 해당합니다.
재시도 설정을 어떻게 둘지도 이 측정 결과를 근거로 확정합니다.
Why
해결하려는 문제가 무엇인가요?
안정적으로 통과한다고 말할 근거가 부족합니다.
#209에서 16건이 통과했지만 CI 실행 횟수는 두 번뿐입니다. 낮은 확률로만 재현되는 문제는 이 정도 표본에서 드러나지 않습니다. 실제로 테스트 계정의 tag 충돌은 실행당 약 3% 확률이었고 다섯 번째 실행에서야 처음 나타났습니다.
재시도가 간헐 실패를 덮고 있을 수 있습니다.
현재 CI는 retries: 2로 설정되어 있어, 첫 시도가 실패해도 재시도가 성공하면 결과는 초록으로 끝납니다. 지금 상태로는 흔들리는 케이스가 있는지 없는지를 결과만 보고 판단할 수 없습니다.
케이스를 늘리기 전에 확인해야 합니다.
P1 35건을 구현하면 실행 케이스가 세 배가 됩니다. 지금 있는 16건이 흔들리는 상태라면 그 흔들림도 함께 커지고, 원인을 나중에 분리하기가 더 어려워집니다.
Goal
완료되면 무엇이 달라지나요?
이번 작업의 목표
- 같은 커밋에서의 실패율을 수치로 알 수 있습니다.
- 흔들리는 케이스가 있다면 원인이 제품, 테스트, 실행 환경 중 어디인지 구분되어 있습니다.
- 재시도 횟수가 측정 결과를 근거로 정해져 있습니다.
- 실행 환경 차이로만 실패하는 케이스가 남아 있지 않습니다.
이번 작업에서 해결하지 않는 범위 (Non-goal)
Approach
어떻게 해결할 계획인가요?
전체 구현 방향
재시도를 끈 상태로 같은 커밋에서 CI를 여러 번 실행해 실패율을 먼저 측정합니다. 실패가 나오면 그 케이스만 따로 반복해 원인을 좁힙니다.
주요 변경 사항
- 측정 기간 동안
retries를 0으로 두고 워크플로를 반복 실행합니다. workflow_dispatch 트리거를 임시로 추가하면 PR 없이 돌릴 수 있습니다.
- 실행 결과를 기록해 케이스별 실패율을 정리합니다.
- 실패한 케이스는 trace를 확인해 원인을 제품, 테스트 코드, 실행 환경으로 분류합니다.
- 분류 결과에 따라 타임아웃, 대기 조건, 데이터 준비 방식을 고칩니다.
- 측정이 끝나면
retries 최종값을 정하고 근거를 커밋 메시지에 남깁니다.
검토한 대안과 선택 이유
재시도를 켠 채로 실행 횟수만 늘리는 방법도 있습니다. 그러나 재시도가 성공하면 결과가 초록으로 끝나므로, 흔들림이 있는지 자체를 알 수 없습니다. 측정 기간에는 재시도를 꺼야 데이터가 나옵니다.
로컬에서만 반복 실행하는 방법도 검토했습니다. 그러나 #209에서 확인했듯이 실행 환경에 따라 결과가 달라지므로, CI 환경에서 측정해야 의미가 있습니다.
Tasks
Constraints
반드시 유지해야 하는 동작
- 기존 16건의 검증 내용은 바뀌지 않아야 합니다. 흔들림을 없애려고 검증을 느슨하게 만들지 않습니다.
- 실행 후 개발 DB에 잔여 데이터가 남지 않아야 합니다.
- 로컬 실행 방식은 그대로 유지되어야 합니다.
변경하면 안 되는 사항
- Secret과
.env 파일은 커밋하지 않습니다.
- service role key는 브라우저로 전달되는 코드에 포함되면 안 됩니다.
- 측정용 임시 설정을
develop에 남기지 않습니다.
기술적 제약사항
- 반복 실행은 테스트 계정 생성과 로그인 호출을 함께 늘립니다. 인증 요청 제한에 걸리는지 함께 확인해야 합니다.
pull_request 이벤트는 충돌이 있는 PR에서 실행되지 않으므로, 측정 중에는 브랜치를 최신 상태로 유지해야 합니다.
Definition of Done
확인 필요
- 반복 실행 횟수가 미정입니다. 3% 수준의 확률을 잡으려면 10회로는 부족할 수 있습니다. 러너 사용량과의 균형을 보고 정해야 합니다.
- 인증 요청 제한값을 아직 확인하지 않았습니다. Supabase 대시보드의 Authentication 항목에서 확인한 뒤 반복 실행 간격을 정하는 것이 안전합니다.
- 흔들림이 없을 경우의 처리 방향이 미정입니다. 측정 결과가 깨끗하면
retries를 0으로 둘지, 러너 자체의 일시적 문제에 대비해 1을 남길지 판단이 필요합니다.
Summary
같은 커밋으로 CI를 반복 실행해 E2E 테스트 16건의 실패율을 측정하고, 흔들리는 케이스를 잡습니다.
구현 설계서 E2E 테스트 도입 구현 설계 v2의 Task 8에 해당합니다.
재시도 설정을 어떻게 둘지도 이 측정 결과를 근거로 확정합니다.
Why
해결하려는 문제가 무엇인가요?
안정적으로 통과한다고 말할 근거가 부족합니다.
#209에서 16건이 통과했지만 CI 실행 횟수는 두 번뿐입니다. 낮은 확률로만 재현되는 문제는 이 정도 표본에서 드러나지 않습니다. 실제로 테스트 계정의
tag충돌은 실행당 약 3% 확률이었고 다섯 번째 실행에서야 처음 나타났습니다.재시도가 간헐 실패를 덮고 있을 수 있습니다.
현재 CI는
retries: 2로 설정되어 있어, 첫 시도가 실패해도 재시도가 성공하면 결과는 초록으로 끝납니다. 지금 상태로는 흔들리는 케이스가 있는지 없는지를 결과만 보고 판단할 수 없습니다.케이스를 늘리기 전에 확인해야 합니다.
P1 35건을 구현하면 실행 케이스가 세 배가 됩니다. 지금 있는 16건이 흔들리는 상태라면 그 흔들림도 함께 커지고, 원인을 나중에 분리하기가 더 어려워집니다.
Goal
완료되면 무엇이 달라지나요?
이번 작업의 목표
이번 작업에서 해결하지 않는 범위 (Non-goal)
Approach
어떻게 해결할 계획인가요?
전체 구현 방향
재시도를 끈 상태로 같은 커밋에서 CI를 여러 번 실행해 실패율을 먼저 측정합니다. 실패가 나오면 그 케이스만 따로 반복해 원인을 좁힙니다.
주요 변경 사항
retries를 0으로 두고 워크플로를 반복 실행합니다.workflow_dispatch트리거를 임시로 추가하면 PR 없이 돌릴 수 있습니다.retries최종값을 정하고 근거를 커밋 메시지에 남깁니다.검토한 대안과 선택 이유
재시도를 켠 채로 실행 횟수만 늘리는 방법도 있습니다. 그러나 재시도가 성공하면 결과가 초록으로 끝나므로, 흔들림이 있는지 자체를 알 수 없습니다. 측정 기간에는 재시도를 꺼야 데이터가 나옵니다.
로컬에서만 반복 실행하는 방법도 검토했습니다. 그러나 #209에서 확인했듯이 실행 환경에 따라 결과가 달라지므로, CI 환경에서 측정해야 의미가 있습니다.
Tasks
workflow_dispatch트리거 추가와retries: 0적용 —workflow_dispatch는 default branch에 트리거가 있어야 동작해develop을 건드리게 되므로, 대신 PR 실행을gh run rerun으로 반복했습니다. 커밋 SHA가 고정되어 "같은 커밋" 조건은 그대로 만족합니다.49c01fb으로 20회 실행auth.spec.ts:23에서 seeder가 PostgREST를 호출할 때PGRST303 JWT issued at future. 토큰 발급과 검증이 모두 Supabase 쪽이라 우리 코드가 시각에 관여하지 않습니다. 전체 재실행이 이전 attempt의 아티팩트를 지워 trace는 남지 않아, job 로그를 근거로 했습니다.retries로 흡수하기로 했습니다. 재시도로 통과한 건은flaky로 집계되므로 재발 관측은 계속됩니다.retries최종값 결정 —process.env.CI ? 1 : 0retries: 0,jsonreporter, 산출물 업로드if: always()모두 원복main대상 PR에서 PC 뷰포트 matrix가 의도대로 분기하는지 확인 — base가develop인 PR에서는 mobile 단일로 분기하므로 확인할 수 없습니다. 다음 릴리즈 PR에서 봐야 합니다.Constraints
반드시 유지해야 하는 동작
변경하면 안 되는 사항
.env파일은 커밋하지 않습니다.develop에 남기지 않습니다.기술적 제약사항
pull_request이벤트는 충돌이 있는 PR에서 실행되지 않으므로, 측정 중에는 브랜치를 최신 상태로 유지해야 합니다.Definition of Done
retries로 흡수, 근거는 [test-84/e2e] E2E 테스트 안정화 및 회귀 수정 #216 본문retries값이 측정 결과를 근거로 확정됨main대상 PR에서만 분기하므로 다음 릴리즈 PR에서 확인npm run lint통과npm run build통과 — 로컬 워크트리에는.env.local이 없어 prerender 단계에서 막히므로, CI 워크플로의 Build 단계로 확인했습니다 (run 33708181090)확인 필요
retries를 0으로 둘지, 러너 자체의 일시적 문제에 대비해 1을 남길지 판단이 필요합니다.