육각 레이더 차트 위의 그라데이션 오버레이, 유리 질감 마커, 순서대로 나타나는 애니메이션은 디자이너로서 Figma에 먼저 설계해 둔 것이었습니다. Recharts·Chart.js·D3의 기본 기능만으로는 원하는 모양과 동작을 그대로 구현하기 어려웠습니다.
구현에 바로 들어가기 이전에, 가장 유연한 D3로 먼저 만들어 봤습니다. 육각 레이더·게이지·스코어 세 차트를 D3+SVG와 Canvas 두 방식으로 구현해 결과와 구현 비용을 비교했습니다.
사용자가 보는 결과와 렌더링 속도는 거의 차이가 없었습니다. 대신 구현 비용은 달랐습니다. DOM 노드는 65개 대 1개, 번들은 +42KB 대 0, 같은 효과를 구현하는 코드는 Canvas가 49~82% 적었습니다.
D3 방식에서는 요소마다 transition을 따로 제어해야 했고, DOM을 직접 조작하는 방식도 React의 렌더링 구조와 맞지 않았습니다.
이 프로젝트에서는 Canvas가 더 적합하다고 판단해 D3를 사용하지 않고, 차트 8종을 Canvas API로 직접 구현했습니다.
↗ 왜 D3를 버렸나 (블로그)