메인 스레드 차단 방지 규칙, 언제는 어겨도 괜찮을까?
역량 개발 · Smashing Magazine · 2026.07.17
웹 개발자들 사이에서 "메인 스레드를 차단하지 마라"는 규칙은 거의 절대적인 원칙으로 통합니다. 하지만 이 글에서는 때로는 데이터를 워커(Worker)로 옮기는 과정 자체가 메인 스레드를 더 오래 멈추게 할 수 있다는 흥미로운 관점을 제시합니다.
브라우저의 각 컨텍스트(Main thread, Web Workers 등)는 서로 격리되어 있어 `postMessage()`를 통해 데이터를 주고받는데, 이때 Structured Clone Algorithm(SCA)을 사용하여 데이터를 복제합니다. 데이터의 크기가 클 경우, 이 복제(Serialization 및 Deserialization) 과정에서 발생하는 비용이 실제 작업 시간보다 커질 수 있습니다.
따라서 모든 작업을 무조건 백그라운드로 넘기기보다는, 작업이 CPU 중심(CPU-Bound)인지 데이터 중심(Data-Bound)인지를 판단하는 것이 중요합니다. 계산량이 많은 작업은 백그라운드로 넘기는 것이 좋지만, 데이터 전송 비용이 처리 시간보다 큰 경우에는 차라리 메인 스레드에서 직접 처리하는 것이 성능 면에서 더 유리할 수 있답니다.