React 원리만 안다면 이런거까지 할 수 있습니다 ㄷㄷ

타락한스벨트전도사·2024년 10월 17일
8

선언형 방식이 HTML에서는 쉽지만, 왜 Canvas와 SVG는 아직도 어렵나요?

웹 개발을 하다 보면, 선언형 렌더링의 장점을 체감하게 되는 순간이 한두 번이 아니죠. 특히 React는 복잡한 HTML 구조를 훨씬 간편하게 다룰 수 있게 해주면서 큰 인기를 끌었습니다. "선언형"이란, 코드를 절차적으로 작성하는 대신 원하는 결과만 선언적으로 기술하면, 나머지는 프레임워크가 알아서 처리해 주는 방식입니다. 덕분에 개발자는 DOM 조작이나 레이아웃 관리를 일일이 신경 쓰지 않아도 되죠.

그런데 여기서 문제가 하나 있습니다. CanvasSVG 같은 그래픽 작업 영역에서는 여전히 절차적 방식에 의존하고 있다는 점이죠. 복잡한 좌표 계산, 레이아웃 배치, 그리고 그에 따른 유지보수까지, 여전히 개발자가 직접 처리해야 할 일이 많습니다. 만약 Canvas에서도 React처럼 선언형으로 작업할 수 있다면 어떨까요? 복잡한 코드 없이도 그래픽을 다루는 일이 얼마나 더 쉬워질까요?

왜 우리는 아직도 Canvas에서 직접 좌표를 계산하고 있을까요?

Canvas나 SVG를 사용한 개발을 해보신 분들이라면, 그 복잡함에 공감하실 거예요. 대표적으로 D3.js, Konva, Fabric 같은 도구들이 있습니다. 이 도구들은 강력한 기능을 제공하긴 하지만, 개발자가 직접 좌표를 계산하고, 요소들의 순서를 제어해야 하는 절차적 방식에 의존하고 있죠. 간단한 차트를 그릴 때조차 코드가 길어지고, 요소가 많아질수록 관리가 점점 어려워집니다.

특히, 레이아웃 계산은 말 그대로 골치 아픈 작업입니다. 다이어그램이나 차트를 그릴 때마다 DOM을 직접 조작하면서 좌표를 설정하고, 각 요소들이 겹치지 않게 수작업으로 배치해야 하죠. 여기에 동적 변화까지 적용되면, 그 복잡함은 배가됩니다. Canvas나 SVG에서 이런 절차적 방식은 개발자의 시간과 노력을 크게 요구하며, 실수로 인한 버그 발생 가능성도 높아지죠.

Flitter, 선언형으로 Canvas를 다루는 새로운 방법을 제시하다

여기서 등장하는 것이 Flitter입니다. Flitter는 React와 유사한 선언형 렌더링 방식을 Canvas에 도입하여, 기존의 복잡함을 해결해줍니다. 더 이상 매번 좌표를 일일이 계산할 필요도, 절차적 조작에 골머리를 앓을 필요도 없습니다. Flitter는 선언형 코드를 기반으로 자동으로 레이아웃을 계산하고, 복잡한 수작업을 대신 처리해줍니다.

특히, Flitter는 직관적이고 간편한 인터페이스를 제공하여, 그래픽 작업을 간소화합니다. 기존 도구들처럼 절차적으로 DOM을 조작하는 방식이 아니라, React의 컴포넌트 기반 접근 방식을 사용해 가독성과 유지보수성을 극대화했습니다. 한마디로, Canvas나 SVG 작업도 이제는 선언형으로 쉽게 다룰 수 있다는 이야기죠.

flitter.dev

ZIndex 위젯으로 수직 레이어를 더 쉽게 관리할 수 있습니다

Flitter의 핵심 기능 중 하나는 바로 ZIndex 위젯입니다. 이 위젯은 CSS의 z-index와 유사한 방식으로, 그래픽 요소 간의 수직적 우선순위를 결정하는 기능을 제공합니다. 그러나 Canvas나 SVG에서는 원래 z-index 속성을 지원하지 않기 때문에, 개발자가 직접 요소의 그려지는 순서를 지정해야만 했습니다. 특히 복잡한 차트나 다이어그램에서는 이 작업이 매우 까다롭죠.

Flitter는 이 문제를 해결하기 위해 Stacking context 개념을 도입했습니다. 이 개념을 이용하면, 부모 요소와 자식 요소 간의 레이어 관계를 자동으로 처리할 수 있습니다. 즉, 개발자는 단순히 ZIndex 값을 설정해주기만 하면, Flitter가 알아서 레이어 순서를 정리하고, 수직적 레이어 관리 문제를 해결해 줍니다.

실제로, easyrd.dev 사이트에서 Flitter의 ZIndex 위젯을 활용해 클릭할 때마다 테이블이 위로 올라오는 기능을 구현했습니다. 이 기능은 복잡한 수직 레이어 조작을 간편하게 처리하며, 사용자는 직관적으로 테이블을 제어할 수 있습니다. Flitter의 ZIndex 위젯 덕분에 개발자는 복잡한 코드를 작성하지 않고도 이런 역동적인 UI를 쉽게 구현할 수 있죠. easyrd.dev에서 그 적용 사례를 직접 확인해 보세요.

easyrd.dev

그리고 성능도 걱정하지 마세요. Flitter는 RenderObject라는 내부 구조를 사용해 성능 최적화에도 신경을 썼습니다. 이 구조는 깊이우선탐색(DFS) 방식을 통해 DOM을 탐색하고, 최적의 렌더링 순서를 찾아냅니다. 덕분에 복잡한 그래픽 작업도 빠르고 매끄럽게 처리할 수 있습니다.

Flitter가 웹 그래픽 개발의 판도를 바꿀 것입니다

Flitter가 가져올 변화는 단순히 "편리해졌다"를 넘어섭니다. 선언형 Canvas 렌더링이 가능해진 덕분에, 개발자들이 이제는 그래픽 작업에 시간을 낭비하지 않고 더 창의적인 작업에 집중할 수 있게 됩니다. 복잡한 코드 작성 없이도 손쉽게 다이어그램을 그리고, 차트의 레이아웃을 직관적으로 관리할 수 있는 날이 온 것이죠.

특히나 ZIndex 위젯처럼 소소하지만 중요한 기능들이, 그동안 힘들게 작업했던 수직적 레이어 문제를 쉽게 해결해주니, 이젠 걱정할 필요도 없습니다. 덕분에 더 많은 개발자들이 복잡한 그래픽 작업에 도전할 수 있을 거예요. 복잡한 렌더링 문제는 Flitter에게 맡기고, 우리는 더 나은 사용자 경험을 설계하는 데 집중할 수 있으니까요.

미래에는 Flitter가 더 다양한 툴들과 결합해 더욱 강력한 웹 개발 환경을 만들어줄 것으로 기대됩니다. 웹 그래픽의 복잡성을 혁신적으로 간소화한 Flitter가, 웹 개발자들의 필수 도구로 자리 잡는 날이 그리 멀지 않았습니다.

그리고... 여기까지 읽으셨다면, 이제 진짜 중요한 부탁이 하나 있습니다. 😎 Flitter가 마음에 드셨다면, Flitter 공식 사이트에 방문해보시고, GitHub에서 스타도 한번 꼭 눌러주세요! 이 작은 클릭이 Flitter의 성장을 돕는 큰 힘이 됩니다. 🙏✨

profile
스벨트쓰고요. 오픈소스 운영합니다

1개의 댓글

comment-user-thumbnail
2024년 11월 14일

d3.js를 많이 사용하는 개발자인데, 새로 사용해볼 생각에 설레네요🥹

답글 달기