목차
이슈 #1: 검사 진행 상태 유지
1. 이슈 상황
| 항목 |
내용 |
| 발생 환경 |
학생이 검사 도중 브라우저를 닫거나 새로고침할 때 |
| 증상 |
검사 진행 상태가 초기화되어 처음부터 다시 시작해야 함 |
| 영향 범위 |
전체 검사 페이지, 사용자 경험 |
문제 코드 예시:
// 문제: Redux 상태만 사용 시 새로고침하면 상태 초기화
const ExamGroup = () => {
const { examInputData, testingInfo } = useSelector(state => state.examInfo);
// 새로고침 시 examInputData가 초기값으로 리셋됨
};
2. 해결 방안 후보
| 방안 |
장점 |
단점 |
| A. localStorage 활용 |
간단한 구현, 브라우저 종료 후에도 유지 |
용량 제한 (5MB), 보안 취약 |
| B. sessionStorage 활용 |
탭 단위 격리, 간단한 구현 |
브라우저 종료 시 삭제 |
| C. 서버 저장 |
디바이스 무관 복구 가능, 보안 |
API 호출 필요, 복잡성 증가 |
| D. Redux-Persist |
Redux와 통합, 자동화 |
추가 라이브러리, 설정 복잡 |
3. 선택한 해결법
선택: A안 (localStorage 활용)
// ExamGroup.js - 검사 상태 localStorage 저장
const ExamGroup = () => {
const { examInputData, testingInfo } = useSelector(state => state.examInfo);
// 초기 로드 시 localStorage에서 상태 복원
const initData = () => {
const setPaginasion = JSON.parse(localStorage.getItem('examIssueInfo'));
const idx = examInputData.findIndex(
data => data.examCode === testingInfo.examCode
);
setPage(setPaginasion[idx].position.currentPage);
setPart(setPaginasion[idx].position.currentPart);
setTotalPages(setPaginasion[idx].position.totalPages);
};
// 상태 변경 시 localStorage에 저장
useEffect(() => {
localStorage.setItem('examIssueInfo', JSON.stringify(examInputData));
}, [examInputData]);
useEffect(() => {
initData();
}, []);
};
4. 선택 이유
| 관점 |
이유 |
| 구현 복잡도 |
가장 빠르게 구현 가능 |
| 사용자 경험 |
브라우저 종료 후 다시 접속해도 이어하기 가능 |
| 보안 |
검사 답변은 민감 정보가 아니므로 localStorage로 충분 |
| 오프라인 지원 |
네트워크 없이도 진행 상태 유지 |