JS를 재미있게 학습하기 위한 퀴즈 기반 교육 웹 사이트
기존 코드가 컴포넌트 스스로 렌더링 여부를 결정하여 재사용이 까다로움.
step과 setStep만 관리하는 경량화 훅 구현const [Funnel, Step] = useFunnel(['가입', '완료']); return <Funnel><Step name="가입">...</Step></Funnel>
lazy와 동적 import()를 활용하여 페이지 단위로 컴포넌트를 분리했습니다.
- 사용자가 해당 경로에 접근할 때만 필요한 리소스를 로드하도록 라우터를 재설계했습니다.usePreloadImages 커스텀 훅을 제작하여 Promise.allSettled로 주요 이미지 리소스를 병렬로 미리 캐싱했습니다.
- Image 객체를 생성하여 브라우저 캐시에 이미지를 미리 적재한 뒤 화면을 렌더링하도록 흐름을 제어했습니다.