웹 기반 3D 프린팅 슬라이서인 'Three Slicer'의 개발자가 최적화 과정을 통해 슬라이싱 시간을 91초에서 10초 미만으로 혁신적으로 줄이는 데 성공했습니다. 이는 브라우저 환경에서 대규모 C++/WASM(웹어셈블리) 워크로드를 처리할 때 발생하는 다양한 성능 병목 현상을 해결한 결과로, 웹 애플리케이션의 복잡한 연산 처리 가능성을 보여줍니다.
이번 성능 개선의 핵심은 크게 세 가지입니다. 첫째, 기존 OrcaSlicer 포팅 과정에서 누락되었던 CPU 병렬성(parallelism)을 복구하여 1.13M(113만) 면(facet)을 가진 트리 서포트(tree-support) 모델의 전체 슬라이스 시간을 91.1초에서 9.7~9.8초로 줄였습니다. 둘째, 여러 슬라이싱 워커(worker)를 동시에 실행할 때 발생하던 크롬(Chrome) 브라우저의 메모리 부족(OOM) 문제를 해결했습니다. Emscripten의 SINGLE_FILE 설정 때문에 각 pthread 격리(isolate)마다 불필요한 인라인 WASM 데이터가 자바스크립트(JS)와 함께 로드되는 문제를 수정하여, pthread 격리당 V8 힙(heap) 사용량을 약 60MB에서 약 1MB로 대폭 줄였습니다. 이로 인해 이전에는 불가능했던 5~8개의 워커 동시 실행이 가능해졌습니다. 셋째, 1,460만 개의 툴패스(toolpath) 세그먼트를 표시하는 미리보기(preview) 렌더링에서 GPU가 그리는 양을 최적화하여 프레임당 렌더링 시간을 67.8ms에서 34.8ms로 개선했습니다. 또한 52MB 3MF 프로젝트 로딩 시간도 1.34초에서 약 0.37초로 단축했습니다.
이번 최적화 사례는 브라우저 환경에서 고성능 애플리케이션을 개발할 때 CPU, GPU, V8 런타임 사이에서 병목 현상이 어떻게 이동하고 해결되는지를 명확히 보여줍니다. 특히 GPU 마이크로벤치마크에서 큰 성능 향상이 있더라도 실제 애플리케이션 전체 성능에서는 이득이 미미할 수 있다는 점과, 병렬화 구현 시 속도뿐만 아니라 결정성(determinism)과 메모리 구조가 중요하다는 교훈을 제공합니다. 이는 웹 기술로 복잡한 엔지니어링 및 디자인 도구를 구현하려는 개발자들에게 중요한 인사이트를 제공하며, 웹 기반 소프트웨어의 잠재력을 한층 더 확장하는 계기가 될 것입니다.