Skip to content

스타일 아키텍처 리팩토링 및 레이아웃 노드(Stack, Group) 구현#17

Merged
y-minion merged 12 commits intodevelopfrom
feat/canvas-rendering
Feb 4, 2026
Merged

스타일 아키텍처 리팩토링 및 레이아웃 노드(Stack, Group) 구현#17
y-minion merged 12 commits intodevelopfrom
feat/canvas-rendering

Conversation

@y-minion
Copy link
Copy Markdown
Contributor

@y-minion y-minion commented Feb 4, 2026

📝 개요 (Summary)

이 PR은 프로젝트의 확장성과 유지보수성을 높이기 위해 스타일 데이터 구조를 전면 리팩토링하고, 이를 기반으로 Stack 및 Group 노드 시스템을 구현한 내용을 담고 있습니다. 기존의 중첩된 스타일 구조를 평탄화(Flatten)하여 코드 복잡도를 줄였으며, Framer/Figma와 유사한 레이아웃 동작을 지원하기 위한 기반을 마련했습니다.

🛠 주요 변경 사항 (Changes)

1. 스타일 아키텍처 단순화

  • 스타일 구조 평탄화: 기존의 root, layout, text 등으로 중첩되어 있던 스타일 객체를 표준 CSS 속성 구조로 통합했습니다.
  • 불필요한 추상화 제거: 복잡도를 높이던 applyStyles.ts 및 레거시 스타일 처리 로직을 제거하고, processNodeStyles 유틸리티를 간소화했습니다.
  • DB 스키마 마이그레이션: db.json의 모든 노드 데이터를 새로운 평탄화된 스타일 구조에 맞게 마이그레이션 했습니다.

2. 노드 시스템 개선 및 신규 노드 추가

  • Stack 노드 구현 : Flex/Grid 레이아웃을 지원하는 Stack 노드를 추가했습니다.
  • 외부 노드를 드래그하여 Stack 내부에 추가하는 액션을 구현하여 직관적인 레이아웃 구성이 가능하도록 구현 완료할 예정입니다.
  • Group 노드 추가 : 여러 노드를 논리적으로 묶어 관리할 수 있는 Group 노드를 구현했습니다.
  • 레거시 제거: 복잡하고 유연하지 못했던 Hero 컴포넌트 및 타입을 제거하고, Atomic한 노드 조합으로 대체하도록 변경했습니다.

3. 컴포넌트 및 인터랙션 최적화

  • Props 단순화: 모든 노드 컴포넌트가 개별적인 props 대신 통합된 Node 객체 하나만 받도록 인터페이스를 통일하여 데이터 흐름을 명확하게 했습니다 (NodeComponentProps).
  • 계층적 선택 및 버그 수정: 캔버스 내 노드 선택 로직을 개선하고, 중첩된 노드 선택 시의 UX를 개선했습니다.

🤔 변경 이유 (Why)

  • Figma/Framer 스타일의 UX 지원: 기존의 제한적인 컴포넌트 방식(Hero 등)으로는 자유도 높은 웹 빌더를 구현하기 어려워, Stack(Flex/Grid) 기반의 유연한 레이아웃 시스템으로 전환이 필요했습니다.
  • 개발 생산성 향상: 스타일 데이터 구조가 복잡하여 기능 추가 시마다 발생하던 오버헤드를 줄이기 위해 데이터 구조를 직관적으로 변경했습니다.

기존의 selectedNode에서 selectedDepthPath로 상태 변경 완료
동일 depth에 있는 노드가 아닌 container노드와 같이 깊이가 있는 노드 트리에서 하위의 노드를 클릭하려면 순차적으로 상위 노드 부터 클릭하도록 강제하는 기능 구현 완료.
깊은 depth의 노드를 선택하려면 반드시 상위의 부모,조상 노드를 클릭한 path(내역)가 있어야한다.
canvas위젯 하위의 노드를 선택할때마다 clearNode가 발생하던 버그 해결.
이벤트 위임을 통해 근접한 상위 노드의 datase을 통해 canvas일 경우에만 clearNode가 실행되도록 수정 완료
단순히 그루핑만 할 수 있는 노드 초기 구현
기존 노드 렌더러 구조와 일치하지 않아서 수정
기존에 중복되던 노드 렌더러의 props 타입 구조를 수정함.
복잡하게 스타일의 카테고리를 나누던 레거시 제거.
기존 스타일 카테고리로직을 단순하게 수정하면서 관련된 카테고리 평탄화 로직 제거. 레이아웃 속성 필터링만 진행. 추후 Stack노드를 구현 할 예정에 따라서 기존의 Hero노드 제거 완료. DB 목데이터 마이그레이션 완료.
기존에 규칙과 일치하지 않던 노드 렌더러 컴포넌트 이름 수정.
Nodes타입에 불필요하게 남아있던 Hero타입 제거 완료.
stack노드 렌더러 추가구현.
이때 stack노드의 다양한 상황에 알맞게 반응할 수 있도록 에디터 노드 래퍼 수정.
stack외부의 노드를 stack자식으로 변경하는 액션 구현 완료. 이때 새롭게 들어오는 노드의 style.position속성은 relative로 부여한다. 그리고 언제나 마지막 노드로 배치하도록 한다.
@y-minion y-minion self-assigned this Feb 4, 2026
style객체 평탄화 과정에서 발생한 타입 불일치 문제 수정 완료.
@y-minion y-minion merged commit 17a7115 into develop Feb 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant