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]

개념과 목적

메인 스레드

백그라운드 실행

워커의 종류

Dedicated Worker

Shared Worker

Service Worker

실행과 생명주기

생성

메시지

종료

데이터 교환

postMessage

구조화 복제

Transferable

사용 가능한 API

Fetch

저장소

제약

성능

병렬 처리

메모리

스케줄링

보안

출처 정책

스크립트 로딩

관련 문서

  1. MDN: Web Workers API ↩