[Release] React · TypeScript 기반 유형 테스트 Web POC 완성 - #22
Merged
Conversation
- React + TypeScript + Vite 프로젝트 생성 - ESLint 및 Prettier 동작 확인 - Vite 기본 예제 코드 정리 - 기본 실행 화면 확인
[Setup] React + TypeScript + Vite 프로젝트 초기 설정
- 금융 테스트용 TypeScript 타입 정의 추가 - Kotlin 원본 banking.json 기준 질문 6개 데이터 이전 - 금융 테스트 결과 3개 데이터 이전 - 답변 점수 구조를 scores 방식으로 유지 - UI 코드와 테스트 데이터 분리
[Feature] 금융 테스트 데이터 및 TypeScript 타입 정의
- StartScreen 컴포넌트 추가 - 시작 화면 전용 CSS 추가 - financeTest 데이터를 사용해 제목과 질문 수 표시 - 시작 버튼 클릭 시 onStart callback 호출 - App에서 StartScreen에 필요한 Props 전달 - UI 전환, 상태 관리, 결과 계산 로직은 추가하지 않음
[Feature] 금융 유형 테스트 시작 화면 구현
- QuizScreen 컴포넌트 추가 - 기존 Question, Answer 타입 재사용 - 현재 질문 번호와 전체 질문 수 표시 - 진행률 bar 표시 - 질문 문구와 답변 선택지 버튼 렌더링 - 답변 클릭 시 onAnswerSelect callback으로 Answer 전달 - StartScreen 렌더링 상태는 유지 - 화면 전환, 상태 관리, 결과 계산 로직은 추가하지 않음
[Feature] 공통 QuizScreen 및 질문 화면 구현
- App에서 useState로 화면 상태 관리 추가 - StartScreen 시작 버튼 클릭 시 QuizScreen으로 전환 - 현재 질문 index 상태 관리 추가 - 답변 선택 시 selectedAnswers에 Answer 저장 - 답변 선택 후 다음 질문으로 이동 - 마지막 질문 선택 시 complete 상태로 전환 - 완료 화면에서 저장된 답변 개수 표시 - 결과 계산과 ResultScreen 구현은 제외
[Feature] React State 기반 테스트 진행 상태 관리
- 선택된 Answer 목록 기반 결과 계산 함수 추가 - Result ID별 score 합산 로직 구현 - 동점 시 results 배열에서 먼저 정의된 Result 선택 - 유효 점수가 없을 때 기본 Result ID 3 반환 - ResultScreen 컴포넌트 및 스타일 추가 - complete 임시 화면을 result 화면 흐름으로 교체 - 마지막 Answer가 누락되지 않도록 선택 답변 배열 갱신 방식 수정 - 다시 테스트하기 버튼으로 StartScreen 복귀 처리
[Feature] 결과 계산 로직 분리 및 결과 화면 구현
- resultCalculator Vitest 테스트 추가 - Result ID 1, 2, 3 반환 규칙 검증 - 동일 Result score 누적 규칙 검증 - 최고 점수 동점 시 먼저 정의된 Result 반환 검증 - 선택 답변 없음, 유효 score 없음, 모든 score 0일 때 기본 Result 반환 검증 - 실제 financeTest 데이터 대신 최소 테스트 데이터 사용
[Test] 결과 계산 로직 Vitest 단위 테스트 작성
- StartScreen, QuizScreen, ResultScreen 카드 폭을 width/max-width 구조로 정리 - 모바일 viewport 대응을 위해 100dvh 적용 - 모바일 화면에서 카드 내부 여백 조정 - QuizScreen 질문과 선택지 긴 문구 줄바꿈 처리 추가 - ResultScreen 결과 문구 overflow 대응 추가 - 390px, 400px, 1280px, 1440px 화면 폭에서 레이아웃 확인 - 기존 화면 흐름과 결과 계산 로직은 변경하지 않음
[Style] 모바일 및 데스크톱 반응형 UI 적용
- GitHub Actions CI workflow 추가 - develop, main 대상 pull_request에서만 실행되도록 구성 - Node 24와 ubuntu-latest 환경 사용 - npm ci로 의존성 설치 - ESLint, Vitest, production build 순서로 검증 - npm cache 설정 추가 - 같은 PR의 이전 CI 실행을 취소하는 concurrency 설정 추가 - 최소 권한 contents: read 적용 - push trigger, matrix, coverage, Prettier CI 검증은 제외
[CI] GitHub Actions 기반 PR 품질 검증 자동화
- Vite 기본 README를 프로젝트 전용 README로 교체 - Android 금융 테스트를 React Web POC로 구현한 배경 정리 - 주요 화면 이미지와 구현 범위 추가 - 프로젝트 구조와 State / Props / Callback 흐름 설명 - 결과 계산 로직과 Vitest 테스트 내용 정리 - GitHub Actions CI 흐름 문서화 - Compose와 React의 역할 비교 표 추가 - 실행 방법과 구현하며 확인한 점 정리
[Docs] 프로젝트 README 및 Compose-React 비교 정리
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
작업 내용
기존 Android 유형 테스트의 금융 테스트 1개를 기준으로
React + TypeScript Web POC 구현을 완료했습니다.
이번 PR은 개별 기능을 새로 추가하는 PR이 아니라,
Issue #2 ~ #11에서 완료한 작업을
develop에서main으로 최종 반영하는 통합 PR입니다.기존 Android 앱 전체를 React로 마이그레이션한 것이 아니라,
Compose에서 구현했던 금융 테스트 1개를 동일한 데이터와 결과 규칙을 기준으로
React의 Component, State, Props / Callback 구조로 다시 구현했습니다.
구현 범위
전체 화면 흐름:
완료한 작업
프로젝트 기반
UI
State 및 데이터 흐름
App.tsx에서 다음 State를 관리합니다.데이터와 이벤트 흐름:
공유 State가 현재 POC 규모에서
App으로 관리 가능한 수준이므로Redux / Zustand 등의 별도 전역 상태 관리 라이브러리는 사용하지 않았습니다.
데이터 / UI / 결과 계산 역할 분리
프로젝트에서는 역할을 다음과 같이 단순하게 구분했습니다.
특정 Architecture 패턴을 적용한 것이 아니라,
현재 POC 규모에서 필요한 책임만 분리했습니다.
결과 계산
기존 Kotlin 금융 테스트의 결과 계산 규칙을 유지했습니다.
결과 계산은 React Component와 분리한 Pure Function으로 구현했습니다.
또한 Result는
selectedAnswers에서 계산할 수 있는 값이므로별도 React State로 중복 저장하지 않았습니다.
Derived Value
기존 State에서 계산할 수 있는 값은 별도 State로 만들지 않았습니다.
필요한 최소 State만 유지하고
화면 표시용 값은 기존 데이터에서 계산하도록 구성했습니다.
마지막 Answer 처리
마지막 질문에서도 현재 선택한 Answer가 결과에서 누락되지 않도록
기존 선택값과 현재 Answer를 합친
nextSelectedAnswers를 먼저 생성한 뒤 State를 갱신합니다.이후 Result 화면으로 전환하고,
Re-render된 시점의 최신
selectedAnswers를 기준으로 결과를 계산합니다.Vitest
resultCalculator의 계산 규칙을 Vitest로 검증했습니다.검증 범위:
React Component를 렌더링하지 않고
결과 계산 함수만 독립적으로 테스트했습니다.
반응형 UI
다음 범위에서 주요 화면을 확인했습니다.
적용 내용:
Start → Quiz → Result → Restart 전체 흐름도 모바일 환경에서 확인했습니다.
GitHub Actions CI
Pull Request 단계에서 다음 검증을 자동 수행합니다.
대상:
pushtrigger는 사용하지 않습니다.개별 작업 PR에서는 각 변경을 검증하고,
이번
develop → mainPR에서는 모든 작업이 합쳐진 최종 상태를 다시 검증합니다.Compose ↔ React 비교
두 기술이 완전히 동일하다는 의미가 아니라,
이번 POC에서 맡은 역할과 데이터 흐름을 기준으로 비교했습니다.
@ComposableuseStatedata classtypeTech Stack
사용하지 않은 기술을 POC 규모 이상으로 추가하지 않았습니다.
README
Vite 기본 README를 제거하고 프로젝트 전용 README를 작성했습니다.
README에서 다음 내용을 확인할 수 있습니다.
하위 작업
이번 POC에서 제외한 범위
금융 테스트 1개를 기준으로
React 기본 Component / State / Props 흐름과
테스트 / CI까지 확인하는 범위에 집중했습니다.
로컬 검증
npm.cmd run lint npm.cmd run test:run npm.cmd run build npx.cmd prettier --check .결과:
최종 확인
develop반영quality-check성공 확인mainmergeCloses #1
Closes #2
Closes #3
Closes #4
Closes #5
Closes #6
Closes #7
Closes #8
Closes #9
Closes #10
Closes #11