SINHU JUNG
Front-end Engineer · 3D Portfolio
BUILDING MAP... 10%
📂 입장 중
Sinhu Jung · Frontend Engineer
도원이엔아이로 (ESC)
🎓
▶ Section

One Book

2024.11 — 2025.01·Frontend Engineer🔒 Private부산·해운대구·장산 (좌동)
Next.jsStyled-CompZustand

Overview

초·중등 학습자가 매일 사용하는 영어 학습 SaaS. 저사양 디바이스에서도 끊김 없는 학습 흐름을 위해 SVG Sprite·Intersection Observer·번들 분석 기반의 최적화를 적용하고, 같은 TS 생태계인 Nest.js 백엔드와 타입·DTO를 정렬했습니다.

Background

  • 수십 개 아이콘과 학습 자료가 개별 요청으로 로드되어 네트워크 오버헤드 발생.
  • 초기 진입 시 번들 사이즈가 커 저사양 디바이스에서 학습 흐름이 끊김.
  • window.onscroll 기반 무한 스크롤이 잦은 리렌더와 끊김 유발.
  • Nest.js (TypeScript) 백엔드와 같은 TS 생태계 — 타입·DTO 정렬 기회.

Architecture

touch_app노드 hover · 휠로 확대 · 드래그로 이동
100%
imageSVG Sprite1 file · ~600KBstarsIcon System<Icon name='...'/>visibilityIntersectionObserverscroll · lazy · sentinelphotoLazy Imagenative + IO fallbackmemoryZustand Store학습 상태webNext.js PagesSSR · Bundle AnalyzerdnsNest.js BEREST · DTO 공유

What I Did

  • 아이콘을 SVG Sprite로 통합하고 <Icon name="..." /> 컴포넌트로 추상화.
  • IntersectionObserver로 가로 스크롤·무한 스크롤·이미지 지연 로딩을 단일 훅으로 통합.
  • 이미지 lazy loading은 native + IO fallback으로 구형 브라우저까지 호환성 확보.
  • Zustand 기반 학습 상태 모델링으로 리렌더링 영역 최소화.
  • @next/bundle-analyzer로 분기별 번들 사이즈 변화 추적 + 회귀 방지.

Before / After

항목BeforeAfter
SVG 번들~1.2MB~600KB (-50%)
초기 HTTP 요청~20건1~5건
무한 스크롤window.onscrollIntersectionObserver (sentinel)
Lazy Loading일괄 적용native + IO fallback

Impact

  • 관련 번들 용량 50% (~600KB) 감축.
  • 초기 진입 LCP 개선, 저사양 디바이스 학습 흐름 안정화.
  • 스크롤·뷰포트 이벤트의 리렌더링 비용 감소.

Tech Stack

Frontend
TypeScriptNext.jsStyled-ComponentsTailwind CSSZustand
Backend
Nest.js (TypeScript)
Infra
DockerNginxAWS Lightsail