Git Product home page Git Product logo

quiz-app's Introduction

퀴즈앱

image

시작하기 전에

이 프로젝트는 다음 환경에서 개발되었습니다:

  • Node.js v18.19.1
  • Yarn 1.22.21

이 버전들과 호환되는 환경에서 프로젝트를 실행해주세요.

프로젝트 폴더에는 .nvmrc 파일이 포함되어 있어, nvm이 설치되어 있다면 아래 명령어로 적절한 Node.js 버전을 설정할 수 있습니다:

nvm use

nvm 설치 방법은 nvm GitHub 페이지를 참고해주세요.

설치 및 실행방법

프로젝트를 로컬 환경에서 실행하기 위해 다음 단계를 따라 주세요:

git clone https://github.com/JayeHa/quiz-app.git
cd quiz-app
yarn install
yarn start

프로젝트 기본 정보

기술 스택

메인 기술 및 라우팅

상태 관리 및 데이터 페칭

프로젝트 설정 및 빌드 도구

CSS 프레임 워크 및 데이터 시각화

테스트

프로젝트 구조

프로젝트의 구조는 다음과 같이 구성되어 있습니다.

📦quiz-app
 ┣ 📂public                  # 정적 파일 저장
 ┣ 📂src
 ┃ ┣ 📂components           # 컴포넌트
 ┃ ┣ 📂data                 # 퀴즈 데이터 및 샘플 데이터
 ┃ ┣ 📂hocs                 # 고차 컴포넌트 (Higher-Order Components)
 ┃ ┣ 📂hooks                # Custom Hooks
 ┃ ┣ 📂models               # 타입스크립트 모델 및 인터페이스 정의
 ┃ ┣ 📂pages                # 각 페이지 컴포넌트 (홈, 퀴즈 페이지 등)
 ┃ ┣ 📂service              # API 호출 및 서비스 로직
 ┃ ┣ 📂store                # Zustand를 사용한 상태 관리 스토어
 ┃ ┣ 📂tests                # 테스트 유틸리티
 ┃ ┣ 📂utils                # 공통 유틸리티 함수
 ┃ ┣ 📜App.tsx
 ┃ ┗ 📜index.tsx
 ┣ 📜.gitignore
 ┣ 📜.nvmrc                 # NVM을 사용한 Node.js 버전 설정
 ┣ 📜.prettierrc
 ┣ 📜README.md
 ┣ 📜craco.config.js        # CRA(Custom React App) 설정 오버라이드
 ┣ 📜package.json
 ┣ 📜tsconfig.json
 ┗ 📜yarn.lock

주요 기능 소개

Home 페이지

  • 사용자는 홈 페이지에서 '퀴즈 풀기' 버튼을 통해 퀴즈를 시작할 수 있습니다. 홈 페이지

Quiz 페이지

  • 사용자는 제공된 질문과 4개의 선택지 중 하나를 선택하여 답변할 수 있으며, 선택지는 매번 다른 순서로 제공됩니다.

  • 진행 상황을 시각적으로 표현하는 프로그레스 바를 통해, 사용자는 현재 위치와 남은 퀴즈의 수를 쉽게 파악할 수 있습니다. 퀴즈 페이지 1

  • 답변 후에는 즉시 정답 여부를 확인할 수 있으며, 이미 선택된 답변은 변경할 수 없습니다. 퀴즈 페이지 2

Result 페이지

  • 모든 퀴즈를 마친 후 사용자는 자신의 점수를 확인할 수 있습니다. (소요된 시간, 정답 수, 오답 수)
  • 차트를 통해서도 확인할 수 있습니다. 결과 페이지

ReviewNote 페이지

  • 오답노트 페이지에서는 정답과 자신의 선택을 비교해볼 수 있습니다. 오답노트 페이지

테스트 관련 정보

테스트 실행 방법

yarn test

테스트 대상 선정 방식

다음 기준에 따라 테스트 대상을 선정했습니다.

  • 사용자 인터페이스의 핵심 요소: 사용자 경험에 직접적인 영향을 미치는 컴포넌트와 기능
  • 주요 비즈니스 로직: 애플리케이션의 핵심 가치를 제공하는 비즈니스 로직

주요 테스트 대상

QuizCards

  • QuizCard
    • 사용자가 퀴즈를 푸는 주요 인터페이스입니다.
    • 정확한 동작과 사용자 경험을 위해 테스트 커버리지를 100%로 유지했습니다.
    • 바로가기
  • QuizProgress
    • 사용자에게 남은 문제 수와 진행 상황을 시각적으로 표시합니다.
    • 사용성 향상을 위해 테스트했습니다.
    • 바로가기
  • QuizReviewCard
    • 오답노트 페이지에서 사용되며, 사용자가 선택한 답변과 정답을 확인할 수 있습니다.
    • 바로가기

QuizSummary

  • 결과페이지에서 사용자에게 최종 점수와 정답률을 보여주는 컴포넌트입니다.
  • 사용자에게 정확한 정보를 제공하기 위해 테스트합니다.
  • 바로가기

shuffleArray

  • 배열의 요소를 무작위로 섞는 함수입니다.
  • 사용자에게 제공되는 선택지의 순서가 매번 달라야 하므로, 이 함수의 정확성을 보장하기 위해 테스트합니다.
  • 바로가기

quizStore

  • 퀴즈 데이터, 사용자 답변, 시간 측정 등을 관리하는 상태 관리 스토어입니다.
  • 애플리케이션의 데이터 무결성과 일관성을 보장하기 위해 테스트했습니다.
  • 바로가기

이슈사항 및 해결

외부 API 에러 처리

  • 문제 상황: 외부 API 호출 중 예상치 못한 오류로 인해 애플리케이션의 기능이 중단되는 상황이 발생했습니다.
  • 해결 방법:
    • 기존의 useSuspense 고차 컴포넌트(HOC)을 리액트의 ErrorBoundary와 결합하여 useAsyncBoundary로 확장함으로써, 예외 처리 기능을 강화했습니다. 이를 통해 오류 발생 시 사용자에게 적절한 피드백을 제공할 수 있도록 했습니다.
    • 외부 API의 오류로부터 독립적으로 애플리케이션을 유지하기 위해 샘플 데이터로의 대체 기능을 구현하여 PR을 제출했습니다.
  • 관련 이슈 및 PR: 이슈 #2, PR #1
  • 원활한 에러 테스트를 위해 메인 브랜치에는 해당 변경 사항을 반영하지 않았습니다. PR #1에서 변경 사항을 확인하실 수 있으며, 미리보기 배포 링크를 통해 변경된 기능을 테스트해보실 수 있습니다.

className prop이 undefined일 때 해당 문자열이 추가되는 문제

  • 문제 상황: 컴포넌트의 className prop이 undefined일 때 "undefined" 문자열이 추가되는 문제가 발생했습니다.
  • 해결 방법:
    • classnames 라이브러리를 프로젝트 의존성에 추가하여 className의 동적 관리를 개선했습니다.
  • 관련 이슈 및 PR: PR #3

quiz-app's People

Contributors

jayeha avatar

Watchers

 avatar

quiz-app's Issues

외부 API 접속 불가 상황에 대한 에러 처리

프로젝트에서 사용 중인 Trivia API에서 아래 사진과 같이 2024년 2월 23일 금요일 오후 5시경 접속이 불가능한 문제가 발생하였습니다.
이로 인해 외부 API의 접속 불가 상황에 대한 대응 매커니즘이 필요하다고 판단되었습니다.

image
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.