kookmin-sw / capstone-2023-05

capstone-2023-05 created by GitHub Classroom
https://capstone-2023-05.vercel.app
0 stars 0 forks source link

refactor: select-ads Again #78

Closed Jaewook-Lee closed 1 year ago

Jaewook-Lee commented 1 year ago

76 PR에서 @PricelessCode 가 언급한 에러를 해결하는 PR입니다.

에러의 원인

아래의 코드를 에러의 원인으로 판단했습니다.

# src/game/app.py > preparation_start_handler > for cnt in range(refresh_cnt) > for idx in range(len(old_ads))
for ad in tmp[idx][3:] if cnt else tmp[idx]:
    publish_orders.append(str(ad['order']))

# src/game/app.py > preparation_start_handler > for cnt in range(refresh_cnt) >
# for idx in range(len(old_ads)) > if len(old_ads[idx]) 
if cnt >= 2:
    drop_orders.extend([str(ad["order"]) for ad in old_ads[idx][:3]])
    old_ads[idx] = old_ads[idx][3:]

하나의 상황을 예시로 들어봅시다. 이 때는 cnt가 1일 때의 상황부터 생각합니다.

이는 '3'이라는 상수로 인덱싱을 진행했기 때문에 발생한 문제입니다. 이를 조기에 발견하지 못 한 이유는... 이전에 이 핸들러와 관련한 PR에서는 테스트할 때 많은 양의 dummy 데이터를 Opinion 테이블에 담고 테스트를 했기 때문인 것으로 생각합니다.

해결책

survived_ad_counters 리스트를 도입했습니다. 초기 값은 [0, 0]으로, 매 refresh 마다 다음 refresh 때 생존해야 할 의견의 수를 저장합니다. 각 element의 최댓값은 3입니다.(최대 3개의 의견만 다음 refresh에 생존하기 때문)

테스트 방법

다음 2가지 방법으로 토론을 진행하시면 됩니다.

  1. 기존 테스트 방식처럼 많은 양의 opinion들을 Opinion 테이블에 담고 토론 진행
  2. Opinion 테이블의 모든 값을 지우고 각 라운드의 매 refresh마다 양 팀에서 의견 1~2개 씩만 보내면서 토론 진행 두 가지 테스트를 할 때 모두 에러 없이 작동하면 성공한 것으로 판단합니다.
Binsk-dev commented 1 year ago

2가지 방법으로 토론을 진행하라는 의미가 혹시 각각 다른 독립된 게임을 1번씩 하라는 의미가 맞나요?

Jaewook-Lee commented 1 year ago

@Binsk-dev 네. 각각 독립된 게임을 1번씩 진행해보시라는 의미로 작성했습니다.
한 게임 안에서 두 가지를 섞을 수는 있으나 아마 섞으면 foreign key error가 뜰 것입니다. 기존의 csv 파일의 order 값들을 제가 타이핑으로 1부터 작성한 것이기 때문에 게임 중 sendOpinion 하면 아마 order 값이 겹쳐서 에러가 날 것으로 예상합니다.

Binsk-dev commented 1 year ago

어 혹시 endRound 액션의 결과로 result가 응답으로 오는데 이때, result는 해당 round 동안(startRound ~ endRound) 받은 vote 수에 따라 결정되는 건가요??

Jaewook-Lee commented 1 year ago

result는 해당 round 동안(startRound ~ endRound) 받은 vote 수에 따라 결정되는 건가요??

endRound 의 result는 총 라운드 중 몇 라운드가 끝났는지 나타낼텐데요? 스크린샷 2023-05-23 17-13-57

Jaewook-Lee commented 1 year ago

추가 사항 발생!

우리가 아직 구현 못 한 부분이 있었습니다. 각 라운드가 끝나면 참가자들은 양 팀의 best 3 의견을 확인할 수 있어야 하는데 이에 대한 부분이 그 동안 없었습니다.
이 부분은 preparationStart 의 cycle이 끝날 때 모든 참가자들에게 전송하면 될 것 같아 이 방향으로 내용 추가했습니다.
전에 테스트를 진행했던 분들은 git pull을 통해 갱신하고 다시 테스트를 해서 라운드가 끝날 때 모든 참가자가 양 팀의 best3 의견들을 받는지도 확인 부탁드려요!

Binsk-dev commented 1 year ago

일단 의견을 1~2개로 유지할 때에 대해서는 동작을 확인했습니다. 의견이 많은 경우는 잠시 후에 테스트 하겠습니다.

vercel[bot] commented 1 year ago

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
capstone-2023-05 ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 24, 2023 1:25am
seungholee-dev commented 1 year ago

동작 확인했어요!!

seungholee-dev commented 1 year ago

동작확인햇으요!