Web Quality Assurance Skill
웹페이지의 모든 영역이 정합성 있게 통합되었는지 점진적(incremental)·경계면 교차 비교로 검증하는 워크플로우. 단순 존재 확인이 아닌, 모듈 경계에서 발생하는 불일치를 잡는다.
핵심 검증 원칙
1. 점진적 QA (Incremental)
각 모듈 완성 직후 즉시 검증. 전체 완성 후 1회가 아니라:
- design-lead 완료 → 1차 (토큰·IA·data.json 검증)
- visualization-engineer 완료 → 2차 (차트 데이터·인터랙션 검증)
- frontend-engineer 완료 → 3차 (마크업·접근성·반응형 검증)
- motion-designer 완료 → 4차 (모션·성능·reduced-motion 검증)
2. 경계면 교차 비교 (Boundary Cross-check)
존재만 확인하지 않는다. 두 곳 이상의 정의를 동시에 읽고 일치성 확인:
- design-tokens.json 값 vs CSS Custom Properties 사용처
- data.json 값 vs 차트 표시값 vs 보고서 원본
- frontend의 컨테이너 ID vs visualization/motion JS의 mount target
- component-catalog 컴포넌트 명세 vs 실제 구현
워크플로우
Step 1: 디자인 토큰 검증 (design-lead 산출물 후)
# 토큰 정의 파일 읽기
Read web/_design/design-tokens.json
# 모든 CSS 파일 grep으로 컬러 하드코딩 검출
grep -E "#[0-9a-fA-F]{3,8}" web/styles/*.css | grep -v ":root"
# → 토큰 외 하드코딩 발견 시 경고
# rgb/hsl 하드코딩 검출
grep -E "rgb\(|hsl\(" web/styles/*.css | grep -v "var\(--"
체크 항목:
Step 2: 데이터 정합성 검증 (visualization-engineer 완료 후)
각 차트별 표시 데이터와 data.json 값을 1:1 매칭:
chart-price (시세 차트):
- data.json의 priceHistory 길이, 마지막 종가 일치?
- 52주 고저점(1,967,000 / 193,500) 마커 정확?
chart-revenue-trend (5년 매출):
- FY21 매출 43.0조, FY23 OP -7.7조 (적자) 표시?
- FY26E 점선/패턴으로 추정 구분?
chart-hbm-share (점유율 도넛):
- 2026 bit 기준 SK 50% / 삼성 28% / 마이크론 22%?
- 토글 시 revenue / hbm4 기준 데이터 일치?
chart-scenarios (시나리오):
- Bear 20~25%, Base 55~60%, Bull 20~25% 확률 표시?
- 주가 범위 1,000,000~2,800,000 fan chart 영역 정확?
chart-consensus (컨센서스):
- 평균 1,817,130원, 최저 1,300,000(BNK), 최고 3,000,000(SK증권)?
- Buy 36 / Hold 1 / Sell 0 분포?
chart-risk-matrix (3×3 히트맵):
- Top 우선(D, J1, A1, E, F1, F2, G1) 7개 셀 배치 정확?
검증 방법:
- data.json 직접 Read + chart-configs/*.js 직접 Read하여 값 매칭
- 가능하면 브라우저 자동화(playwright)로 실제 렌더된 차트 텍스트·툴팁 캡처
- 불일치 발견 시 SendMessage로 visualization-engineer에게 구체적 파일·라인·예상·실제 보고
Step 3: HTML 시맨틱·접근성 검증 (frontend-engineer 완료 후)
시맨틱 마크업:
접근성:
도구:
- Lighthouse(가능 시 CLI) 또는 axe-core로 자동 감사
- 수동: 키보드만으로 페이지 모든 인터랙션 가능한지 시도
Step 4: 반응형 검증
각 breakpoint에서 시각·기능 확인:
- 320px (모바일 최소): 텍스트 가독성, 차트 단순화, 네비 햄버거
- 768px (태블릿): 그리드 2열, 네비 표시
- 1280px (데스크탑): 풀 레이아웃
- 1920px (와이드): max-width 1280px 적용으로 좌우 여백
도구:
- 가능하면 playwright/puppeteer로 각 viewport 스크린샷
- 정적 검증: CSS 미디어 쿼리·container query 사용 여부 grep
Step 5: 성능·모션 검증 (motion-designer 완료 후)
Step 6: 브라우저 호환성
- Chrome 최신 2 버전, Safari 최신 2, Firefox 최신 2, Edge 최신 2
- 주요 체크 포인트:
- CSS Container Queries (지원 안 되는 경우 fallback)
- color-mix() (모던 브라우저만)
- backdrop-filter (Safari prefix 필요할 수도)
- WebGL (모든 모던 브라우저 지원, IE는 제외)
Step 7: 보고서 원본 일치성 (가장 중요)
reports/SK하이닉스_분석보고서_20260512.md의 핵심 수치가 페이지에 정확히 표시되는지 1:1 매칭:
| 보고서 원본 |
페이지 위치 |
검증 |
| 현재가 1,861,000원 |
Hero 메트릭 카드 |
✓/✗ |
| 시가총액 1,319조원 |
Hero 메트릭 카드 |
✓/✗ |
| 1Y +871% |
Hero 메트릭 카드 |
✓/✗ |
| 52주 신고가 1,967,000원 |
시세 차트 마커 |
✓/✗ |
| OPM 72% |
펀더 섹션 + 컴보 차트 보조축 |
✓/✗ |
| 1Q26 매출 52.6조 |
펀더 섹션 |
✓/✗ |
| HBM 점유율 50% (bit 2026) |
HBM 도넛 |
✓/✗ |
| NVIDIA Rubin HBM4 ~70% |
산업 섹션 |
✓/✗ |
| Forward PER 5.93x |
Hero 또는 펀더 섹션 |
✓/✗ |
| Bear 20-25% / Base 55-60% / Bull 20-25% |
시나리오 카드 |
✓/✗ |
| 시나리오 주가 범위 (1M~2.8M) |
Fan chart |
✓/✗ |
| 평균 컨센 1,817,130원 |
컨센서스 차트 + 본문 |
✓/✗ |
| Buy 36 / Hold 1 / Sell 0 |
컨센서스 분포 표시 |
✓/✗ |
Step 8: 데이터 한계·N/A 표시 검증
보고서 부록 B에 명시된 N/A·불일치 항목이 페이지에 명확히 표시되는지:
- KRX 공매도 잔고 N/A
- 종목별 5/12 외국인 정확치 N/A
- 삼성 HBM4 인증 보도 (공식 미확인) 표시
- NVIDIA Rubin 지연 (확인되지 않은 보도) 표시
- 시나리오 확률은 분석가 정성 판단임을 disclaimer로
Step 9: QA 리포트 작성
web/_design/qa-report.md에 정리:
# Web QA Report
**검증일**: YYYY-MM-DD
**검증자**: web-qa
## 영역별 결과
### 1. 디자인 토큰 — PASS / 발견 N건
- ...
### 2. 데이터 정합성 — PASS / 발견 N건
- 차트별 매칭 결과 표
### 3. HTML 시맨틱·접근성 — PASS / WARN / FAIL
- Lighthouse 점수
- 발견 항목
### 4. 반응형 — PASS / 발견 N건
- breakpoint별 스크린샷 또는 검증 결과
### 5. 성능·모션 — ...
### 6. 브라우저 호환성 — ...
### 7. 보고서 원본 일치성 — ...
## 발견 버그 목록
| ID | 영역 | 파일:라인 | 예상 | 실제 | 담당 | 심각도 |
|---|---|---|---|---|---|---|
| B-001 | data | charts.js:42 | 50% | 49% | viz | High |
| ...
## 권장 수정
- ...
## Pass / Warn / Fail 종합
- Pass: N개 / Warn: N개 / Fail: N개
작업 원칙
- 빠른 발견 = 빠른 수정: 단계별 점진 검증으로 마지막 폭주 방지
- 타협 불가 영역: 디자인 토큰 준수·데이터 정확성·시맨틱·접근성
- 트레이드오프 가능: 모션 강도·일부 성능 (사용자 우선순위 반영)
- 재현 가능한 보고: "차트가 잘못됐다" 금지. 파일·라인·예상·실제·재현 방법 포함
팀 통신
- 각 모듈 완성 시 즉시 알림 수신
- 버그 발견 시 해당 담당자에게 SendMessage (구체적 위치)
- 디자인 토큰 자체 문제는 design-lead에게
- 최종 리포트는 team-lead에게
후속 실행 시
이전 qa-report.md 비교, 동일 버그 재발 시 root cause 분석. 새 변경 영역만 집중 검증.
1---2name: web-quality-assurance3description: 웹페이지의 디자인 토큰 준수, 데이터 정확성(보고서 원본 vs 페이지 표시값 1:1), HTML 시맨틱·접근성(WCAG AA), 반응형(320/768/1280/1920), 성능, 모션 적정성, 브라우저 호환성을 점진적·경계면 교차 비교로 검증하는 스킬. 웹페이지 QA·검증·정합성 점검 요청 시 반드시 사용.4---56# Web Quality Assurance Skill78웹페이지의 모든 영역이 정합성 있게 통합되었는지 **점진적(incremental)**·**경계면 교차 비교**로 검증하는 워크플로우. 단순 존재 확인이 아닌, 모듈 경계에서 발생하는 불일치를 잡는다.910## 핵심 검증 원칙1112### 1. 점진적 QA (Incremental)13각 모듈 완성 직후 즉시 검증. 전체 완성 후 1회가 아니라:14- design-lead 완료 → 1차 (토큰·IA·data.json 검증)15- visualization-engineer 완료 → 2차 (차트 데이터·인터랙션 검증)16- frontend-engineer 완료 → 3차 (마크업·접근성·반응형 검증)17- motion-designer 완료 → 4차 (모션·성능·reduced-motion 검증)1819### 2. 경계면 교차 비교 (Boundary Cross-check)20존재만 확인하지 않는다. **두 곳 이상의 정의를 동시에 읽고 일치성 확인**:21- design-tokens.json 값 vs CSS Custom Properties 사용처22- data.json 값 vs 차트 표시값 vs 보고서 원본23- frontend의 컨테이너 ID vs visualization/motion JS의 mount target24- component-catalog 컴포넌트 명세 vs 실제 구현2526## 워크플로우2728### Step 1: 디자인 토큰 검증 (design-lead 산출물 후)2930```bash31# 토큰 정의 파일 읽기32Read web/_design/design-tokens.json3334# 모든 CSS 파일 grep으로 컬러 하드코딩 검출35grep -E "#[0-9a-fA-F]{3,8}" web/styles/*.css | grep -v ":root"36# → 토큰 외 하드코딩 발견 시 경고3738# rgb/hsl 하드코딩 검출39grep -E "rgb\(|hsl\(" web/styles/*.css | grep -v "var\(--"40```4142**체크 항목:**43- [ ] design-tokens.json의 모든 색상이 CSS `:root[data-theme="dark"]`에 매핑44- [ ] 라이트 모드도 동일 토큰 이름으로 매핑45- [ ] CSS에 토큰 외 컬러 하드코딩 없음 (예외: 차트 라이브러리 기본값)46- [ ] 타이포 스케일(display-1, h1, body 등)이 CSS class로 정의4748### Step 2: 데이터 정합성 검증 (visualization-engineer 완료 후)4950각 차트별 표시 데이터와 data.json 값을 1:1 매칭:5152```53chart-price (시세 차트):54 - data.json의 priceHistory 길이, 마지막 종가 일치?55 - 52주 고저점(1,967,000 / 193,500) 마커 정확?5657chart-revenue-trend (5년 매출):58 - FY21 매출 43.0조, FY23 OP -7.7조 (적자) 표시?59 - FY26E 점선/패턴으로 추정 구분?6061chart-hbm-share (점유율 도넛):62 - 2026 bit 기준 SK 50% / 삼성 28% / 마이크론 22%?63 - 토글 시 revenue / hbm4 기준 데이터 일치?6465chart-scenarios (시나리오):66 - Bear 20~25%, Base 55~60%, Bull 20~25% 확률 표시?67 - 주가 범위 1,000,000~2,800,000 fan chart 영역 정확?6869chart-consensus (컨센서스):70 - 평균 1,817,130원, 최저 1,300,000(BNK), 최고 3,000,000(SK증권)?71 - Buy 36 / Hold 1 / Sell 0 분포?7273chart-risk-matrix (3×3 히트맵):74 - Top 우선(D, J1, A1, E, F1, F2, G1) 7개 셀 배치 정확?75```7677**검증 방법:**78- data.json 직접 Read + chart-configs/*.js 직접 Read하여 값 매칭79- 가능하면 브라우저 자동화(playwright)로 실제 렌더된 차트 텍스트·툴팁 캡처80- 불일치 발견 시 SendMessage로 visualization-engineer에게 구체적 파일·라인·예상·실제 보고8182### Step 3: HTML 시맨틱·접근성 검증 (frontend-engineer 완료 후)8384**시맨틱 마크업:**85- [ ] `<header>`, `<nav>`, `<main>`, `<section>`, `<article>`, `<footer>` 정확 사용86- [ ] heading 위계 H1 → H2 → H3 일관성 (skip 없음, 한 페이지 H1 1개)87- [ ] `<div>` 남발 없음 — 의미가 있으면 시맨틱 태그8889**접근성:**90- [ ] 모든 `<img>`에 alt 텍스트 (장식 이미지는 alt="")91- [ ] 인터랙티브 요소(`<button>`, `<a>`)에 텍스트 또는 aria-label92- [ ] `<canvas>` 배경에 aria-hidden="true"93- [ ] 폼/토글에 적절한 ARIA role/state94- [ ] 키보드 내비게이션: Tab 순서가 시각 순서와 일치, focus visible95- [ ] 컬러 명도 비 (WCAG AA): text-primary vs bg-primary ≥ 4.5:1, 큰 텍스트 ≥ 3:196- [ ] prefers-reduced-motion 대응 CSS·JS 구현9798**도구:**99- Lighthouse(가능 시 CLI) 또는 axe-core로 자동 감사100- 수동: 키보드만으로 페이지 모든 인터랙션 가능한지 시도101102### Step 4: 반응형 검증103104각 breakpoint에서 시각·기능 확인:105- 320px (모바일 최소): 텍스트 가독성, 차트 단순화, 네비 햄버거106- 768px (태블릿): 그리드 2열, 네비 표시107- 1280px (데스크탑): 풀 레이아웃108- 1920px (와이드): max-width 1280px 적용으로 좌우 여백109110**도구:**111- 가능하면 playwright/puppeteer로 각 viewport 스크린샷112- 정적 검증: CSS 미디어 쿼리·container query 사용 여부 grep113114### Step 5: 성능·모션 검증 (motion-designer 완료 후)115116- [ ] Hero 배경: 60fps 유지 (또는 모바일 50fps), GPU 부하 30% 이하117- [ ] 스크롤 진입 애니메이션: jank 없이 부드러움118- [ ] IntersectionObserver로 화면 밖 모션 일시 중지119- [ ] WebGL 비지원 환경에서 CSS gradient fallback 정상 동작120- [ ] prefers-reduced-motion 활성화 시:121 - 배경 캔버스 숨김 또는 정적 그라데이션122 - 스크롤 진입 애니메이션 즉시 표시 (no animation)123 - 카운트업 → 즉시 최종값124 - 카드 호버 tilt 비활성화125- [ ] LCP < 2.5s, CLS < 0.1, INP < 200ms (Web Vitals)126127### Step 6: 브라우저 호환성128129- Chrome 최신 2 버전, Safari 최신 2, Firefox 최신 2, Edge 최신 2130- 주요 체크 포인트:131 - CSS Container Queries (지원 안 되는 경우 fallback)132 - color-mix() (모던 브라우저만)133 - backdrop-filter (Safari prefix 필요할 수도)134 - WebGL (모든 모던 브라우저 지원, IE는 제외)135136### Step 7: 보고서 원본 일치성 (가장 중요)137138`reports/SK하이닉스_분석보고서_20260512.md`의 핵심 수치가 페이지에 정확히 표시되는지 1:1 매칭:139140| 보고서 원본 | 페이지 위치 | 검증 |141|---|---|---|142| 현재가 1,861,000원 | Hero 메트릭 카드 | ✓/✗ |143| 시가총액 1,319조원 | Hero 메트릭 카드 | ✓/✗ |144| 1Y +871% | Hero 메트릭 카드 | ✓/✗ |145| 52주 신고가 1,967,000원 | 시세 차트 마커 | ✓/✗ |146| OPM 72% | 펀더 섹션 + 컴보 차트 보조축 | ✓/✗ |147| 1Q26 매출 52.6조 | 펀더 섹션 | ✓/✗ |148| HBM 점유율 50% (bit 2026) | HBM 도넛 | ✓/✗ |149| NVIDIA Rubin HBM4 ~70% | 산업 섹션 | ✓/✗ |150| Forward PER 5.93x | Hero 또는 펀더 섹션 | ✓/✗ |151| Bear 20-25% / Base 55-60% / Bull 20-25% | 시나리오 카드 | ✓/✗ |152| 시나리오 주가 범위 (1M~2.8M) | Fan chart | ✓/✗ |153| 평균 컨센 1,817,130원 | 컨센서스 차트 + 본문 | ✓/✗ |154| Buy 36 / Hold 1 / Sell 0 | 컨센서스 분포 표시 | ✓/✗ |155156### Step 8: 데이터 한계·N/A 표시 검증157158보고서 부록 B에 명시된 N/A·불일치 항목이 페이지에 명확히 표시되는지:159- KRX 공매도 잔고 N/A160- 종목별 5/12 외국인 정확치 N/A161- 삼성 HBM4 인증 보도 (공식 미확인) 표시162- NVIDIA Rubin 지연 (확인되지 않은 보도) 표시163- 시나리오 확률은 분석가 정성 판단임을 disclaimer로164165### Step 9: QA 리포트 작성166167`web/_design/qa-report.md`에 정리:168169```markdown170# Web QA Report171**검증일**: YYYY-MM-DD172**검증자**: web-qa173174## 영역별 결과175### 1. 디자인 토큰 — PASS / 발견 N건176- ...177178### 2. 데이터 정합성 — PASS / 발견 N건179- 차트별 매칭 결과 표180181### 3. HTML 시맨틱·접근성 — PASS / WARN / FAIL182- Lighthouse 점수183- 발견 항목184185### 4. 반응형 — PASS / 발견 N건186- breakpoint별 스크린샷 또는 검증 결과187188### 5. 성능·모션 — ...189190### 6. 브라우저 호환성 — ...191192### 7. 보고서 원본 일치성 — ...193194## 발견 버그 목록195| ID | 영역 | 파일:라인 | 예상 | 실제 | 담당 | 심각도 |196|---|---|---|---|---|---|---|197| B-001 | data | charts.js:42 | 50% | 49% | viz | High |198| ...199200## 권장 수정201- ...202203## Pass / Warn / Fail 종합204- Pass: N개 / Warn: N개 / Fail: N개205```206207## 작업 원칙208- **빠른 발견 = 빠른 수정**: 단계별 점진 검증으로 마지막 폭주 방지209- **타협 불가 영역**: 디자인 토큰 준수·데이터 정확성·시맨틱·접근성210- **트레이드오프 가능**: 모션 강도·일부 성능 (사용자 우선순위 반영)211- **재현 가능한 보고**: "차트가 잘못됐다" 금지. 파일·라인·예상·실제·재현 방법 포함212213## 팀 통신214- 각 모듈 완성 시 즉시 알림 수신215- 버그 발견 시 해당 담당자에게 SendMessage (구체적 위치)216- 디자인 토큰 자체 문제는 design-lead에게217- 최종 리포트는 team-lead에게218219## 후속 실행 시220이전 qa-report.md 비교, 동일 버그 재발 시 root cause 분석. 새 변경 영역만 집중 검증.