개요
이번 작업은 football-quiz 프로젝트에서
- 복구코드 재발급 기능 (TDD 기반)
- 게임 UI 개선 (popover 구조 전환)
- 반응형 및 번역(i18n) 누락 수정
- 결과창 UX 개선
을 한 번에 정리한 통합 개선 작업이다.
1. 복구코드 재발급 기능 구현 (TDD 기반)
📌 기능 요구사항
docs/feat/recovering_code.md 기준으로 다음 기능을 구현했다.
- PATCH /reset API 추가
- 복구코드 재발급 시 기존 기록 유지
- TDD 기반 개발 (RED → GREEN → REFACTORING)
- 프론트엔드 버튼 + UX 상태 구현
🔴 TDD - API (RED 단계)
다음 케이스를 기준으로 테스트 작성:
- 존재하지 않는 복구코드 재발급
- 존재하는 복구코드 재발급
- 기존 기록 유지 여부 검증
expect(mockPrismaService.ranking.updateMany).toHaveBeenCalledWith(...)
🟢 GREEN - API 구현
async resetCode(oldCode: string): Promise<string> {
const newCode = this.generateCode()
await this.prismaService.ranking.updateMany({
where: { recoveringCode: hashCode(oldCode) },
data: { recoveringCode: hashCode(newCode) }
})
return newCode
}
- 기존 기록 유지
- recoveringCode만 교체
- DB migration 없이 안전하게 코드만 변경
🟢 WEB TDD
- hover 상태 확인
- click → loading 상태 진입
- async 완료 후 loading 해제
data-hovered
data-loading
jsdom 환경에서는 pseudo-class(:hover) 테스트가 불가능하므로
state 기반 DOM attribute로 변경.
✔ 결과
- API 10/10 PASS
- WEB 2/2 PASS
2. 게임 UI 구조 변경 — Game Guide → Popover 전환
📌 요구사항
docs/ui/game_detail.md 기준 UI 구조 변경:
- 게임 방법 페이지 삭제
- 각 기능 옆 ? 아이콘 추가
- popover 방식으로 가이드 제공
- 위치별 컨텍스트 설명 유지
🧩 구조 변경
기존
- 별도 “게임 방법” 페이지 존재
변경
- 각 UI 요소에 inline help popover
일반 퀴즈 버튼 [?]
무한 퀴즈 버튼 [?]
복구코드 영역 [?]
🟢 TDD 기준
- ? 클릭 시 popover 노출
- 닫기 버튼으로 정상 종료
🐛 트러블슈팅
1. getByText 테스트 실패
→ 텍스트가 <span>으로 쪼개져 DOM 매칭 실패
✔ 해결:
<span>텍스트 분리 구조로 변경</span>
2. popover 위치 문제
→ fixed + 중앙 정렬 필요
3. UI 개선 / 반응형 / 번역(i18n) 누락 수정
📌 popover 레이아웃 개선
문제
- 데스크탑에서도 full width 사용
해결
sm:left-1/2 sm:w-1/2 sm:-translate-x-1/2
✔ 결과:
- 모바일: full width
- 데스크탑: 중앙 50% popup
📌 모바일 텍스트 정렬 버그
문제
부모 text-center가 popover에 상속됨
해결
text-left
✔ 핵심 포인트
fixed 요소라도 부모의 text-align은 그대로 상속된다
🌐 i18n 누락 수정
문제
다국어 전환 시 일부 텍스트가 한국어로 남음
예:
- 복구코드 안내 문구
- 랭킹 조건 설명
- 버튼 텍스트
- 기록 없음 메시지
🛠 수정 내용
- i18n key 19개 추가
- 10개 언어 전체 번역 적용
- RecoverCodeResetButton에도 useTranslation 적용 누락 수정
t('codeResetBtn')
✔ 결과
- 모든 UI 문자열 다국어 대응 완료
- tsc --noEmit 통과
4. 무한의 축덕 퀴즈 결과창 UX 개선
📌 요구사항
결과 화면에서 사용자의 다음 행동을 유도하기 위한 CTA 추가
🧩 추가 기능
결과창 하단에 버튼 2개 추가:
- 내 기록 보기
- 랭킹 보기
🎯 UX 목적
- 결과 확인 → 이탈 방지
- 자연스럽게 다음 행동 유도
- “게임 → 리텐션” 흐름 강화
🟢 동작
내 기록 보기 → /my-record
랭킹 보기 → /ranking
🎨 UI 특징
- hover / active 상태 포함
- 모바일: full width 버튼
- 데스크탑: 가로 정렬
✔ 결과
- 결과 화면 → 행동 전환율 개선 구조 완성
- 단순 결과창 → UX 허브 역할로 변경
🧾 전체 정리
이번 작업 핵심은 3가지다:
1. 안정성
- TDD 기반 복구코드 재발급
2. 구조 개선
- Game Guide → Popover 구조 전환
3. UX 개선
- 결과창 CTA 추가로 사용자 흐름 연결
🚀 결론
이번 작업으로 축덕 퀴즈는
“게임 → 설명 → 복구 → 기록 → 랭킹”
으로 자연스럽게 이어지는 구조가 완성됐다
🔗 직접 플레이해보기
이번 글에서 정리한 내용은 실제 서비스에 반영되어 있습니다.
아래 링크에서 확인할 수 있습니다.
https://football-quiz-web.vercel.app/
축덕 퀴즈
football-quiz-web.vercel.app
'프로젝트 > 축덕 퀴즈' 카테고리의 다른 글
| 축덕 퀴즈 운영 및 유지보수 - 버그 수정부터 TDD, Redis 캐시 개선까지 (0) | 2026.05.25 |
|---|---|
| 축덕 퀴즈 개발 일지 - 20일간의 기능 추가 (0) | 2026.05.12 |
| 축덕 퀴즈 개발기 - V1 확장을 결심한 이유 (0) | 2026.05.11 |
| Football Quiz Web 개발 기록 (0) | 2026.05.05 |