01 / LEARNING
퀴즈 유형과 학습 진행 화면 구현
OX·객관식·주관식·조합형 퀴즈 화면과 문제 조회 흐름을 구현했습니다. 진행 중인 학습에서는 사용자별 문제를 별도로 조회하도록 구성했습니다.
PROJECT RECORD
JavaScript를 게임처럼 배우는 퀴즈 기반 교육 서비스

CONTRIBUTION LOG
학습 화면 · 이탈 확인 · 운영 어드민
01 / LEARNING
OX·객관식·주관식·조합형 퀴즈 화면과 문제 조회 흐름을 구현했습니다. 진행 중인 학습에서는 사용자별 문제를 별도로 조회하도록 구성했습니다.
02 / LEAVE SAFELY
퀴즈를 풀다가 다른 화면으로 이동할 때 진행 내용이 사라질 수 있음을 알리고, 계속 학습하거나 나갈 수 있게 확인 화면을 추가했습니다.
03 / OPERATIONS
문제·섹션·파트의 등록·수정 화면을 만들고, 드래그앤드롭으로 학습 순서를 바꿀 수 있게 했습니다. 상점 아이템 등록과 이미지 업로드 흐름도 구현했습니다.
DECISION RECORD
React의 ref 콜백은 렌더링마다 새로운 함수 참조가 전달되면 다시 실행됩니다. ref 실행 → 상태 변경 → 리렌더링 → ref 재실행의 무한 루프가 원인이었습니다.
퀴즈 풀이 도중 실수로 새로고침이나 뒤로가기를 눌렀을 때, 전역 상태가 초기화되어 진행 상황이 모두 날아가는 문제가 있었습니다.
복잡한 복구 로직 대신, 브라우저의 beforeunload 이벤트를 활용해 실수를 방지하는 것이 MVP 단계에서 가장 효율적인 해결책이라 판단했습니다.
useEffect(() => { if (!enabled) return; window.addEventListener("beforeunload", handleBeforeUnload); return () => { window.removeEventListener("beforeunload", handleBeforeUnload); }; }, [enabled, handleBeforeUnload]);