component-instances

2 개의 포스트

figma

컴포넌트 인스턴스의 토대를 재구축한 방법 | Figma 블로그 (새 탭에서 열림)

10년간 컴포넌트 인스턴스를 담당해 온 Figma의 `Instance Updater`는 오토 레이아웃, 변수, variants, 컴포넌트 속성 등 기능 확장으로 한계에 도달했다. Figma는 이를 대체하기 위해 반응형 기반의 범용 시스템인 `Materializer`를 구축하고, 인스턴스의 구조·속성 계산과 레이아웃·변수 평가를 분리했다. 그 결과 대규모 디자인 시스템에서 자주 수행하는 작업이 최대 50% 빨라졌고, 향후 동적 기능을 확장할 수 있는 기반도 마련했다. ## 컴포넌트 인스턴스의 기본 구조 - 메인 컴포넌트는 크기, 색상, 구조 같은 속성을 정의한다. - 인스턴스는 메인 컴포넌트의 변경 사항을 자동으로 반영하는 스마트 복사본이다. - 기존에는 `Instance Updater`라는 독립 런타임이 다음 작업을 모두 담당했다. - 인스턴스 속성 해석 - 인스턴스 내부 구조 관리 - 메인 컴포넌트와의 동기화 - 레이아웃 엔진 등 다른 시스템은 인스턴스를 만나면 `Instance Updater`에 처리를 위임했다. ## 기존 아키텍처가 한계에 도달한 이유 - Figma에는 오토 레이아웃(2019), variants(2020), 컴포넌트 속성(2022), 변수(2023) 등이 추가되며 인스턴스가 훨씬 복잡해졌다. - 현대적인 인스턴스는 다음 요소를 동시에 포함할 수 있다. - variants와 변수 바인딩 - 오토 레이아웃 규칙 - 고유한 오버라이드를 가진 중첩 인스턴스 - 변수 모드 - 복잡한 반응형 동작 - 기능이 추가될 때마다 `Instance Updater`에 개별적이고 특수한 로직을 덧붙였다. - 그 결과 인스턴스 처리, 레이아웃 계산, 변수 평가가 서로 강하게 얽혔다. - 작은 변경도 인스턴스 트리 전체에 전파될 수 있었다. - 변수 모드 하나를 바꾸면 수천 개 노드의 인스턴스 업데이트와 레이아웃 재계산이 발생할 수 있다. - 서로 다른 시스템이 같은 서브트리를 반복적으로 무효화하는 문제도 생겼다. - 인스턴스 교체나 속성 변경 시 편집기가 수 초 동안 멈추기도 했다. ## 아키텍처를 근본적으로 재설계한 목표 - 점진적인 최적화만으로는 문제를 해결하기 어렵다고 판단하고 구조 자체를 다시 설계했다. - 첫 번째 목표는 관심사의 분리였다. - 인스턴스 시스템은 메인 컴포넌트를 기반으로 어떤 속성과 자식 구조를 제공할지만 결정한다. - 레이아웃은 레이아웃 시스템이 전담한다. - 변수 평가는 변수 시스템이 전담한다. - 두 번째 목표는 세밀한 무효화(granular invalidation)다. - 기존 시스템은 변경이 발생하면 인스턴스 전체를 갱신했다. - 새 구조에서는 실제로 변경된 트리의 일부만 업데이트한다. - 깊게 중첩된 컴포넌트에서 불필요한 재귀적 작업을 줄일 수 있다. - 또한 인스턴스 전용 해결책이 아니라, 다른 기능에도 사용할 수 있는 범용 반응형 프레임워크를 목표로 삼았다. ## Materializer와 파생 서브트리 - Figma는 새 아키텍처를 지원하기 위해 `Materializer`를 만들었다. - `Instance Updater`가 컴포넌트 인스턴스에 특화된 시스템이었다면, `Materializer`는 Figma 문서 트리 전반에서 동작하는 범용 시스템이다. - Materializer의 핵심 역할은 **파생 서브트리(derived subtree)**를 생성하고 유지하는 것이다. - 파생 서브트리는 다른 원천 데이터로부터 구조와 속성이 계산되는 서브트리다. - 컴포넌트 인스턴스뿐 아니라 외부 CMS의 원본 콘텐츠와 동기화해야 하는 리치 텍스트 노드에도 같은 개념을 적용할 수 있다. - 따라서 인스턴스 기능 개선을 넘어, 외부 데이터나 다른 상태에 따라 문서 트리를 동적으로 구성하는 기능의 기반이 된다. ## 실용적인 결론 복잡한 트리 기반 시스템에서는 모든 변경 때 전체 트리를 다시 계산하기보다, 원천 데이터와 파생 결과를 분리하고 변경된 부분만 무효화하는 구조가 효과적이다. 또한 기능별 책임을 명확히 나누고 반응형 업데이트·의존성 추적을 범용 인프라로 추출하면, 성능 개선과 새로운 기능 확장을 동시에 달성할 수 있다.

figma

놓치셨을 분들을 (새 탭에서 열림)

Figma는 창립 1주년을 기념해 월요일부터 토요일까지 매일 새로운 기능을 공개하는 `#6DaysofShipping` 이벤트를 진행했다. 고급 사용자를 위한 기능부터 초보자를 위한 단축키 안내까지 다양한 수준의 기능을 연속적으로 선보이며, 빠른 제품 개발과 사용자 커뮤니티의 기대감을 강조했다. 이 글은 해당 주간에 공개된 기능과 사용법을 간단히 정리한 회고다. ## 6일간 이어진 기능 출시 이벤트 - Figma 팀은 제품 출시 속도에 대한 사용자들의 관심과 기대에 호응해 6일 연속 기능을 공개했다. - 이벤트는 월요일부터 토요일까지 매일 하나의 기능을 소개하는 방식으로 진행됐다. - 주요 대상은 다음처럼 다양했다. - 중첩 인스턴스 교체 같은 파워 유저용 기능 - 키보드 단축키 목록처럼 입문자에게 유용한 기능 - 서로 성격이 다른 기능을 한 주에 묶어 공개함으로써 다양한 사용자에게 새로운 기능을 제공했다. ## 드래그로 속성값을 조절하는 Scrubbable Inputs - 속성 패널의 숫자 값을 직접 입력하는 대신, 마우스로 드래그해 빠르게 변경할 수 있다. - `Option` 키를 누른 상태에서 값을 클릭하고 드래그하면 값이 조절된다. - 커서를 위쪽으로 움직이면 값의 변화 속도를 더 빠르게 할 수 있다. - 반복적으로 크기, 위치, 간격 등의 값을 바꿔야 하는 디자인 탐색 과정에서 특히 유용하다. - 정확한 숫자를 매번 입력하기보다 시각적으로 결과를 확인하며 여러 대안을 빠르게 비교할 수 있다. ## 모서리 반경을 빠르게 조정하는 단축 동작 - 사각형의 모서리 반경을 별도의 입력 과정 없이 직접 조절할 수 있다. - 도형에 마우스를 올린 뒤 모서리 조절 핸들을 클릭하고 드래그하면 원하는 둥근 정도를 설정할 수 있다. - `Alt` 키를 누른 상태에서 드래그하면 네 모서리를 한꺼번에 바꾸는 대신 특정 모서리 하나만 조절할 수 있다. - 따라서 전체적으로 둥근 카드뿐 아니라 한쪽 모서리만 둥근 형태도 빠르게 만들 수 있다. - 디자인 시안을 수정할 때 속성 패널과 캔버스 사이를 오갈 필요가 줄어든다. ## 파워 유저와 초보자를 함께 고려한 기능 구성 - 이번 출시 주간은 하나의 큰 기능에 집중하기보다 작업 속도와 접근성을 높이는 여러 기능을 폭넓게 다뤘다. - 중첩 인스턴스 교체처럼 컴포넌트 기반 작업을 강화하는 기능과 키보드 단축키 안내를 함께 제공했다. - Figma는 기능 자체뿐 아니라 사용자가 기능을 발견하고 익히는 과정도 중요하게 보고 있었다. - 매일 새로운 내용을 공개하는 형식은 사용자들이 다음 출시를 기대하게 만들고 커뮤니티의 참여를 유도했다. 실무에서는 숫자 값을 반복해서 수정할 때 Scrubbable Inputs를 사용하고, 모서리 형태를 조정할 때 드래그와 `Alt` 조합을 활용하면 디자인 탐색 속도를 높일 수 있다. 또한 새로운 기능을 한꺼번에 익히기보다 단축키와 캔버스 직접 조작 기능부터 작업 흐름에 조금씩 적용하는 것이 효과적이다.