1. 렌더링 최적화 - 화면을 빠르게 그리는 기술
메모이제이션(Memoization) - 똑같은 계산은 한 번만
메모이제이션은 한 번 계산한 결과를 메모리에 저장해두고, 똑같은 계산이 필요할 때 저장된 값을 재사용하는 기법입니다. 마치 수학 문제를 풀 때 이미 계산한 답을 옆에 적어두고 다시 쓰는 것과 같습니다.
- 실제 구현 방법
- useCallback으로 함수 메모이제이션
- 언제 사용해야 하나요?
React.memo - 컴포넌트 전체를 기억하기
React.memo는 컴포넌트 자체를 메모이제이션합니다. props가 변경되지 않았다면 컴포넌트를 다시 렌더링하지 않고 이전 결과를 재사용합니다.
- 기본 사용법
- 커스텀 비교 함수 활용
- 주의사항
리렌더링 방지 전략
불필요한 리렌더링은 웹앱 성능의 가장 큰 적입니다. 화면의 작은 부분만 바뀌어도 전체가 다시 그려지는 것을 방지해야 합니다.
- 상태 분리하기
- Context 분할하기
- key 속성 최적화
2. 이벤트 처리 최적화 - 과도한 실행 막기
디바운싱(Debouncing) - 마지막 액션만 처리
디바운싱은 연속적으로 발생하는 이벤트 중 마지막 이벤트만 처리하는 기법입니다. 검색창에 타이핑할 때마다 API를 호출하면 서버에 부담이 되는데, 디바운싱을 사용하면 사용자가 타이핑을 멈춘 후에만 검색을 실행합니다.
- 구현 예시
- React Hook으로 구현
- 실제 활용 사례
쓰로틀링(Throttling) - 일정 간격으로만 실행
쓰로틀링은 특정 시간 간격으로만 함수가 실행되도록 제한합니다. 스크롤 이벤트처럼 매우 빈번하게 발생하는 이벤트를 처리할 때 유용합니다.
- 구현 방법
- 스크롤 이벤트 최적화
- 디바운싱 vs 쓰로틀링 선택 기준
페이지네이션 - 데이터를 나누어 보여주기
대량의 데이터를 한 번에 모두 로드하면 초기 로딩이 느려지고 메모리를 많이 사용합니다. 페이지네이션으로 필요한 만큼만 보여주면 성능이 크게 향상됩니다.
- 기본 페이지네이션
- 무한 스크롤 구현
- 가상 스크롤링
3. 메모리 관리 - 누수 방지와 효율적 사용
메모리 누수 방지
메모리 누수는 더 이상 필요 없는 데이터가 메모리에서 해제되지 않는 현상입니다. 시간이 지날수록 앱이 느려지고 결국 멈출 수도 있습니다.
- 이벤트 리스너 정리
- 타이머 정리
- 구독 해제
가비지 컬렉션 최적화
자바스크립트는 자동으로 메모리를 관리하지만, 개발자가 도울 수 있는 부분이 있습니다.
- 순환 참조 방지
- 전역 변수 최소화
- 대용량 데이터 처리 후 정리
4. 번들 최적화 - 다운로드 크기 줄이기
코드 스플리팅
애플리케이션을 여러 조각으로 나누어 필요한 시점에만 로드하는 기법입니다. 초기 로딩 속도가 크게 향상됩니다.
- 라우트 기반 분할
- 컴포넌트 레벨 분할
- 동적 import 활용
레이지 로딩
리소스를 필요한 시점에 로드하여 초기 로딩 부담을 줄입니다.
- 이미지 레이지 로딩
- 컴포넌트 레이지 로딩
트리 쉐이킹
사용하지 않는 코드를 번들에서 제거하여 파일 크기를 줄입니다.
- ES6 모듈 사용
- 사이드 이펙트 표시
- Production 빌드 설정
5. 캐싱 전략 - 한 번 받은 데이터 재활용
브라우저 캐싱
브라우저의 캐싱 기능을 활용하면 반복적인 리소스 다운로드를 줄일 수 있습니다.
- HTTP 캐시 헤더 설정
- Service Worker 캐싱
- localStorage 활용
CDN 활용
CDN을 사용하면 사용자와 가까운 서버에서 콘텐츠를 제공받아 로딩 속도가 향상됩니다.
- 정적 자산 CDN 배포
- CDN 캐시 무효화
6. 렌더링 성능 극대화
가상 DOM 최적화
React나 Vue 같은 프레임워크는 가상 DOM을 사용하여 실제 DOM 조작을 최소화합니다.
- 효율적인 리스트 렌더링
- 조건부 렌더링 최적화
리플로우/리페인트 최소화
DOM 변경 시 브라우저가 레이아웃을 다시 계산(리플로우)하고 화면을 다시 그리는(리페인트) 과정을 최소화해야 합니다.
- DOM 조작 배치 처리
- GPU 가속 활용
- 레이아웃 스래싱 방지
Critical Rendering Path 최적화
브라우저가 HTML을 받아서 화면에 픽셀을 그리기까지의 과정을 최적화합니다.
- 리소스 로딩 순서 최적화
- 리소스 힌트 활용
7. 최적화를 위한 용어 - 이걸 알아야 AI 에게 지시 가능
- 렌더링 최적화
- 번들 및 로딩 최적화
- 이벤트 처리 최적화
- 데이터 처리 최적화
- 메모리 관리
- 캐싱 전략
- 네트워크 최적화
- 이미지 최적화
- 폰트 최적화
- 애니메이션 최적화
- 상태 관리 최적화
- 빌드 최적화
- 성능 측정
- API 최적화
- 모바일 최적화
- 보안 관련 최적화
- 서버 최적화
- 데이터베이스 최적화