Web Worker로 이미지 처리 최적화하기
분야
프로그래밍/소프트웨어 개발
대상자
모바일 앱 개발자, 이미지 처리 최적화에 관심 있는 프론트엔드 엔지니어
난이도: 중급~고급 (Web Worker 기초 이해 및 실무 적용 능력 필요)
핵심 요약
- *Web Worker**는 메인 스레드와 별도로 실행되는 백그라운드 스레드로, 이미지 처리 과정에서 메모리 사용량을 줄이고 UI 반응성을 유지할 수 있습니다.
- 이미지 디코딩/리사이징은 CPU 연산 집중 작업으로, 메인 스레드에서 처리 시 UI 블로킹 발생
- OffscreenCanvas를 활용한 메모리 효율적 이미지 처리 및 포맷 변환 가능
- Base64 문자열 디코딩은 메모리 과다 사용 시 메인 스레드 블로킹을 방지할 수 있음
- Worker 통신 방식 (
postMessage
,onmessage
)으로 비동기 처리 가능
섹션별 세부 요약
- 문제 분석: 이미지 처리의 한계
- 고해상도 이미지(4MB 이상, 4000px 이상)로 인한 메모리 과다 사용
- 메인 스레드에서 레이아웃/페인트 작업 수행 시 UI 반응 속도 저하
- 네트워크 불안정 시 업로드 시간 2배 차이 발생, 사용자 불만족 및 리소스 낭비 유발
- iOS 환경에서는 메모리 제한으로 브라우저 강제 새로고침 발생
- 해결 방안: Web Worker 도입
- 이미지 처리 작업을 메인 스레드와 병렬 처리하여 UI 반응성 유지
- Dedicated Worker를 활용해 단순한 1:1 통신 구조로 처리 효율성 향상
- OffscreenCanvas로 메모리 효율적인 이미지 리사이징 및 포맷 변환 (WebP)
- Base64 데이터 디코딩을 Worker에서 분리해 메인 스레드 블로킹 방지
- Web Worker 기술적 구현
postMessage
및onmessage
로 메인 스레드와 Worker 간 데이터 전송createImageBitmap
으로 이미지 디코딩 후 OffscreenCanvas에 그리기- Base64 문자열을
atob
로 디코딩해 Uint8Array로 변환 후 Blob 생성 Worker
를 사용해 대규모 이미지 처리 시 메모리 분산 및 성능 향상
- 실제 성과 및 최적화 효과
- 메인 스레드 블로킹 시간 50% 감소, 총 처리 시간 40% 단축
- 메모리 사용량 감소로 모바일 UX 안정성 확보
- 병렬 처리로 여러 이미지 동시 처리 가능 (셔터 플랫폼 10장 업로드 시 적용)
결론
Web Worker는 이미지 처리와 같은 CPU 연산 집중 작업을 메인 스레드에서 분리해 UI 반응성 유지와 메모리 효율성을 동시에 달성할 수 있는 강력한 도구입니다. 특히, OffscreenCanvas와 Worker 통신 메커니즘을 활용한 구현은 모바일 환경에서의 성능 최적화에 효과적입니다.
- 실무 팁: 메인 스레드 블로킹을 방지하려면 대량 데이터 처리 시 Worker 사용 필수
- 권장사항: 복잡한 이미지 처리 시 Web Worker + OffscreenCanvas 조합으로 처리 효율 극대화
- 최종 목표: 사용자 경험 향상을 위한 백그라운드 처리 최적화 및 리소스 낭비 방지