Web Workers
Web Workers는 웹 애플리케이션이 메인 UI 스레드와 분리된 실행 컨텍스트에서 스크립트를 수행할 수 있게 하는 웹 플랫폼 API다. 계산량이 많은 데이터를 처리하거나 백그라운드 메시지 작업을 실행하면서 사용자의 입력과 화면 갱신을 덜 방해하도록 돕는다. 워커는 일반적인 JavaS...
| 분류 | 웹 백그라운드 실행 API |
|---|---|
| 주요 기능 | 메인 스레드와 분리된 스크립트 실행 |
| 관련 기술 | World Wide Web, 웹 브라우저, HTTP, JavaScript |
| 관련 표준 | MDN: Web Workers API |
Web Workers는 웹 애플리케이션이 메인 UI 스레드와 분리된 실행 컨텍스트에서 스크립트를 수행할 수 있게 하는 웹 플랫폼 API다. 계산량이 많은 데이터를 처리하거나 백그라운드 메시지 작업을 실행하면서 사용자의 입력과 화면 갱신을 덜 방해하도록 돕는다. 워커는 일반적인 JavaScript 실행 기능을 사용할 수 있지만 브라우저의 Window 객체와 문서의 DOM을 직접 조작하는 기능은 제공되지 않는다.
Dedicated Worker는 일반적으로 이를 생성한 문서와 메시지를 교환하며 Shared Worker는 지원 환경에서 여러 문서와 연결될 수 있다. 워커는 스크립트 파일이나 모듈에서 시작하고 자체 전역 실행 환경과 이벤트 루프를 갖는다. 워커의 생성과 종료, 오류 처리 및 메시지 흐름은 응용 프로그램의 작업 수명과 함께 설계해야 한다.
문서와 워커는 postMessage 등의 인터페이스로 데이터를 교환한다. 메시지는 구조화 복제 규칙에 따라 전달되며 일부 객체는 소유권을 전송하는 transferable 방식으로 처리할 수 있다. 큰 바이너리 데이터를 반복 복사하지 않고 전달하려면 전송 가능한 버퍼와 메모리 관리 정책을 고려하는 것이 중요하다.
워커는 Fetch API와 일부 저장·네트워크 API를 사용할 수 있지만 API 지원은 환경과 워커 종류에 따라 다르다. Service Worker는 일반적인 계산용 워커와 목적과 수명 주기가 다르며 브라우저의 네트워크 요청이나 백그라운드 이벤트를 처리하도록 설계된다. 모든 워커가 메인 페이지의 프로세스 또는 CPU 코어와 반드시 일대일 대응하는 것은 아니다.
Web Workers를 사용하면 긴 계산이 사용자 인터페이스를 차단하는 문제를 줄일 수 있으나 메모리 사용과 메시지 전달 비용이 발생한다. 여러 워커가 동시에 실행되면 CPU 자원을 경쟁하고 전력 소비가 늘어날 수 있다. 실제 성능 향상은 작업을 얼마나 독립적으로 분할할 수 있는지와 병렬 실행 및 데이터 교환 비용에 달려 있다.[1]