본문 바로가기

Project

[간단한 퀴즈 서비스] 무한 퀴즈 챌린지 설계 고려

 

  • 문제를 틀릴 때까지 계속 문제를 제공해 주며, 몇 개 풀었는지, 도전을 몇 번 했는지를 기록한다.
  •  고려사항 
    • 어떻게 n번째 도전과 n+1번째 도전을 구분할 것인가?
    • 구분할 고유 키 값은 어떻게 생성할 것인가?
    • 유저가 퀴즈 중간에 이탈하는 경우 어떻게 할 것인가?
    • 유저가 고유 키 값을 조작해서 퀴즈를 푸는 경우 어떻게 할 것인가?
      • challengeId를 따로 빼두어서 조작하는 경우
      • 브라우저가 아닌 클라이언트로 접속하는 경우
    • 고유 키 값의 타임아웃을 어떻게 줄 것인가?
      • map
      • redis
    • 고유 키가 타임아웃 난 것을 언제 판별할 것인가?
      • 무한 퀴즈 챌린지 퀴즈 api?
        • 퀴즈 제공할 때, 판별한다.
        • 퀴즈 문제를 제공할 때, 15초가 지났다면 기존 챌린지 id는 지우며, 새로운 챌린지 id로 발급해 준다.
      • 채점 api?
        • 채점에서 틀렸으면 챌린지 id를 무효화해야 한다.
          • 단 결과에는 반영한 뒤에 지워야 한다.
          • 결과 api와 분리되어 있어서 이 부분 처리가 어렵다.
        • 채점 api에서는 무한퀴즈 챌린지 id가 없어도 된다.
          • 문제 요청을 1번에 1개씩만 하므로 위와 같이 처리가 가능해진다.
        • 채점만 한다.
      • 결과 api?
        • 무한 퀴즈 챌린지 api가 있고
      • 채점과 결과를 하나로 합칠 것인가?
        • score라고 바꾸면 가능할 듯
        • 단, 로그인 안된 경우도 한 번에 처리되도록 만들어야 한다.
        • 로그인 안되었을 때는, 채점만 진행
          • 서로 다른 기능인데, 하나로 합치는 게 맞는가?
          • 무한 퀴즈 챌린지가 섞여서 문제가 된다.
          • 무한 퀴즈 챌린지는 채점에서 틀리는 경우 challengeId를 지워야 한다. 즉, 상태 값이 있다.
            • 그런데 채점에서 지워버리면, 채점 이후에 호출할 결과 api에서는 challengeId가 서버에서 지워버린 이후니까 결과를 반영할 수 없다.
          • 채점에서 틀리는 경우 challengeId에 제한을 걸어야 한다
            • 연속으로 정답을 맞히는 중이라는 것을 표현하는 상태 값을 두는 것이 간편하게 구현될 테지만, 자연스러운 방법은 아니라 생각 든다.
          • 무한 퀴즈 챌린지용으로 채점, 결과를 합칠 수도 있겠지만 재활용 없이 비슷한 역할을 하는 중복되는 api 다시 만드는 건 좋지 않다 생각 든다.