한국관광공사 Open API를 활용해 숏 폼 형식으로 주변 여행지를 둘러볼 수 있는 사이트
활용한 Open API 구조상 [위치 정보 → 상세 정보 → 이미지 URL] 로 이어지는 구조 변경이 불가능했습니다. 초기 설계에서는 모든 여행지의 이미지를 한 번에 로딩하려다 보니, 이 Waterfall 대기 시간이 누적되어 초기 화면 렌더링(LCP)까지 치명적인 지연이 발생했습니다.
API 구조를 변경할 수 없는 상황에서, 초기 로딩 부하를 분산시키는 전략으로 선회했습니다.
<Swiper modules={[Virtual]} virtual={{ enabled: true }} onSlideChange={(swiper) => { // 사용자가 보고 있는 동안 다음 여행지의 3단계 요청을 미리 시작 prefetchNextSpot(swiper.activeIndex + 1); }} > {slides.map((slide, index) => ( <SwiperSlide key={slide.id} virtualIndex={index}> <DetailContent data={slide} /> </SwiperSlide> ))} </Swiper>
초기 로딩 시 Pretendard 폰트 용량이 약 1,559KB에 달해 네트워크 비용 증가가 우려되었습니다. WOFF2 포맷을 사용하더라도 기본적으로 모든 글자 정보를 포함하고 있어 용량 최적화에 한계가 있었습니다.
프로젝트에서 사용하는 font-weight가 제한적이므로 가변 폰트보다 일반 다이나믹 서브셋이 용량 절감에 유리하다고 판단했습니다. 로컬 호스팅 대신 유지보수 비용이 낮은 CDN + 다이나믹 서브셋 방식을 채택하여 필요한 글자만 분할 다운로드되도록 구성했습니다.
<link rel="stylesheet" as="style" crossorigin href="https://cdn.jsdelivr.net/gh/.../pretendard-dynamic-subset.css" />