HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
프로그래머스 프론트엔드 데브코스 2기
프로그래머스 프론트엔드 데브코스 2기
/
📓
기동팀
/
💪
기동팀(CheQuiz)
/
feature 산출 [2차]

feature 산출 [2차]

Date
Jun 8, 2022 → Jun 9, 2022
Tags
기능
1. 회원가입 관련 2. 퀴즈(Post) 생성3. 퀴즈(Post) 풀이이슈풀이 페이지 세부 사항퀴즈 결과정보 수정

1. 회원가입 관련

  • 로그인/회원가입 모달 1-1
  • 유저 정보 페이지 UI 1-2 (+@ 퀴즈쪽 필요)
  • 유저 정보 변경 모달 1-3

2. 퀴즈(Post) 생성

  • 퀴즈 생성 페이지 1-1
    • QuizCreateItem
      • data: Quiz
      • Quiz관련 form 기능 (카테고리, 문제유형, 문제Title, 정답, 중요도, 해설, SetId )
      • QuizCreateItem 추가 기능
      • 퀴즈 세트(Channel) 생성
        • 퀴즈들의 난이도와 중요도 평균값 구해서 넣기
        • 현재 토큰 던져서 user 정보 받아 넣기
  • 메인 페이지 퀴즈 세트 리스트 UI 1-2
    • QuizSetList
    • data : Channel[]
      • { "_id" : "123123sadasda", // String "name" : "퀴즈세트타이틀명", //String "descripiton(커스텀화)" : { "tag" : "태그[]", // String[] "des" : "퀴즈세트 설명 내용", // String "creator" : User, "difficulty": 4, // Number "importance" : 3, // Number }, "posts" : Post[], ... }
        예시
        notion image
  • 메인 페이지 퀴즈 세트 필터링 & 정렬 1-3
    • Selector 컴포넌트
    • FilterSelector
      • 태그별 필터링 기능 (client에서 처리)
      • 난이도 / 중요도 필터링
        • selector에 어떻게 넣을지는 고민해보기
    • SortSelector
      • 좋아요/최신순 정렬 기능 (client에서 처리)
      • 난이도 / 중요도 순 정렬
와이어프레임
notion image
notion image
(세트화 하지 않은 퀴즈는 랜덤에서만 등장하고, 채널 1개에 넣어만 둔다)

3. 퀴즈(Post) 풀이

메인화면에서 카테고리 ⇒ 풀이 페이지 이동하는 과정
[흐름 시나리오]
  • 메인 화면에서 세트/낱개 퀴즈를 클릭한다
  • 바로 문제 풀이 페이지로 넘어가게 된다.
랜덤 퀴즈 시작 부분
데이터
  • 퀴즈 카테고리(React, html, …)
  • 질문 갯수(최대 10개)
기능
문제 풀기 버튼 클릭 시 랜덤 퀴즈를 불러온다
 

이슈

  • 랜덤 퀴즈 시 모든 퀴즈 불러오기에 대한 이슈
  1. GET /channels ⇒ Channel[] 채택
    1. Channel[] 배열 내 각 Channel의 post배열의 post id를 map ⇒ 랜덤
    2. 얻은 id만큼 GET
      1. ⇒ 랜덤 최대 문제 수 제한(10개)
  1. GET /posts/channels/{channelId} ⇒ 랜덤
    1. 수정 시 2번 요청 - [ 세트 없는 채널, 세트 있는 채널 ]

풀이 페이지 세부 사항

와이어프레임
notion image
notion image
Post
[퀴즈 풀이 페이지]
1. 랜덤 퀴즈 GET /channels ⇒ Channel[] `채택` Channel[] 배열 내 각 Channel의 post배열의 post id를 map ⇒ 랜덤 얻은 id만큼 GET /posts/channels/{channelId} ⇒ 랜덤 최대 문제 수 제한(10개) 2. 세트 퀴즈 GET /posts/channels/{channelId} { "_id" : "asdfdi", // String "title(커스텀화)" : { "question" : "문제", // String //"importance" : 3, // Number ... }, ... }
포스트맨 예시
  • GET /channels
    • notion image
  • GET /posts/channels/{channelId}
    • notion image
  • 퀴즈 풀이 페이지 (By dummy-quiz)
    • [데이터] Quiz (Post[])
    • 현재 문제 번호
    • 전체 문제 수
    • 좋아요 여부(t/f)
    • 사용자 입력한 답 데이터 []
    • 문제의 답 데이터 []
    • 문제 별 포인트 []
      • 중요도와 난이도에 따른 다른 점수가 부여된다.
      [기능]
    • 현재 문제 / 전체 문제 출력 (개수)
    • 이전 페이지/이후 페이지로 넘기기 ( 화살표 버튼)
    • [adv?] 페이지 넘길 시 부드럽게 넘겨지는 애니메이션
    • O, X 버튼 클릭 해서 현재 답변 데이터 변경
    • 현재 답변 세션 스토리지 저장 기능 ( 새로고침 관련 issue)
    • 마지막 페이지 ( 총 문제 수 === 현재 문제 번호) 면 제출하기 버튼 활성화
    • 제출하기 버튼 클릭 시 퀴즈 결과 페이지로 이동
    • [adv] 실시간 채점?
      • 도입 시 답 수정 못하도록 막아야 함
      [adv기능]
    • 시간초 기능
    • 체력 바 추가
    • 실시간 채점 & 틀릴 시 체력 감소
      • 체력 0 일 시 즉시 종료
      • 캐릭터 아이템에 따른 부가 효과 존재

퀴즈 결과

  • 내 정보 확인 카드
    • 로그인 O
      • 이미지
      • 닉네임
      • 랭크
      • 현재 경험치
      • 획득 경험치 : 애니메이션
      • 태그
    • 로그인 X
      • 디폴트 이미지
      • 디폴트 닉네임
      • 가입 유도 버튼 + 로그인
  • 세트 정보
  • 정답 확인 퀴즈 카드
    • 정답 여부
    • 문제
    • 댓글 : 토글
    • 좋아요
  • 토글 카드
    • 정답
    • 해설
    • 댓글 입력 카드
    • 댓글 카드
  • 다른 페이지 링크 버튼
    • 메인
    • 랭킹
    • 퀴즈 생성
notion image

정보 수정

  • /users/{id}
  • 파라미터로 받은 id와 context API에 들어있는 userId가 같은지 비교해서 같으면 특정 정보 보여줌
  • 작성한 퀴즈, 좋아요 한 퀴즈, 본인의 댓글
  • 작성한 퀴즈의 수정 및 삭제
  • 아이디, 비밀번호 변경
 
notion image
notion image
notion image
 
 
비상용
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image