Skip to content

Conversation

@silver-eunjoo
Copy link
Collaborator

🛰️ Issue Number

🪐 작업 내용

1. 게임 시작 흐름

  • GameStartRequest에 quizId를 담아온다.
  • 해당 룸의 플레이어가 전원 레디 상태인지 확인한다.
  • 해당 룸의 GameSetting에 설정된 퀴즈가 요청의 퀴즈와 같은지 체크한 후, 같다면 설정된 라운드 수를 받아온다.
  • quizService에서 랜덤하게 문제를 추출해온다.
  • 방의 상태를 게임 중으로 변경한다.
  • 문제들을 담아서 응답 보내기!

2. 문제 랜덤 추출

(1) order by rand()

  • 이 방법을 사용했습니다.
  • 찾아보니까 인덱스를 사용하지 못해서 성능상 이슈가 있는 방법이라고 합니다. 하지만, 저희는 아무리 많다고 해도 문제 수가 최대 80개로 정해져있고, 이 성능상 이슈는 몇 백개,, 몇 천 개.. 정도일 때 이슈가 있다고 하여 이 방법을 선택했습니다.

(2) Collections.shuffle()

  • 랜덤 추출을 위해 DB에서 전체 조회한 후 Collections.shuffle()을 사용할 수도 있습니다.

  • 이 방법은 우선은 전체 결과를 조회해오는 방법입니다.

  • 최대 80개의 크기라고 했을 때 이 방법도 큰 무리가 없습니다.

  • 서비스 단에서 섞고, 원하는 라운드만큼 subList를 만들어줘야 하는 코드가 필요합니다.

  • 비교해봤을 때, 둘 다 문제 수가 적어 성능상 문제가 없고, 그렇게 했을 때 한 줄로 깔끔하게 의도를 보여줄 수 있는 방법이 낫다고 생각하여 order by rand()를 선택했습니다.

(3) 이후 문제 개수가 늘어난다면..?

  • 테이블에 randId를 추가하여, 해당 컬럼에 인덱스를 붙여 사용할 수 있는 방법이 있다고 합니다.
  • 뭔가 문제 수로는 80개도 충분한 것 같아, 걱정은 안 해도 되겠지만, 이후 최대 문제 개수를 늘리고 싶을 때는 위의 방법을 사용하여 개선을 시켜도 좋을 것 같습니다.

📚 Reference

✅ Check List

  • 코드가 정상적으로 컴파일되나요?
  • 테스트 코드를 통과했나요?
  • merge할 브랜치의 위치를 확인했나요?
  • Label을 지정했나요?

@silver-eunjoo silver-eunjoo self-assigned this Jul 16, 2025
@silver-eunjoo silver-eunjoo added the enhancement New feature or request label Jul 16, 2025
@silver-eunjoo silver-eunjoo linked an issue Jul 16, 2025 that may be closed by this pull request
1 task
}

public GameStartData gameStart(Long roomId, Long quizId) {

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 gameService로 분리하면 좋을 것 같습니다! 🧚‍♀️

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 확인했습니다 ! 🪄


Long roomQuizId = gameSetting.getQuizId();

if (!roomQuizId.equals(quizId)) {
Copy link
Collaborator

@jiwon1217 jiwon1217 Jul 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[L5-참고의견]

if(!gameSetting.getQuizId().eqauls(quizId)) 형태의 조건문을 GameSetting 내부에 위치시키는 것이 좋을 것 같습니다 !

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다 ! 수정했습니다 !

Copy link
Collaborator

@sehee123 sehee123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

빠르십니다.. 💨 수고하셨습니다!

@LimKangHyun LimKangHyun self-requested a review July 16, 2025 06:04
Copy link
Collaborator

@LimKangHyun LimKangHyun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!

Copy link
Collaborator

@jiwon1217 jiwon1217 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다 ! 고생하셨습니다아

@silver-eunjoo silver-eunjoo merged commit a2048dd into dev Jul 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 정답없이 문제와 함께 퀴즈 조회하는 API 구현

6 participants