캔버스 그룹 기능의 결함 셋을 잡다 — 다중·중첩 그룹, 레이어, 잘라붙여넣기
그룹을 '하나의 오브젝트'로 바꾼 개선에서 드러난 세 결함을 한 번에 바로잡았다. 시뮬레이션으로 원인을 못 박고 실제 브라우저로 검증했다.
지난번에 캔버스 그룹을 "하나의 오브젝트"로 다루도록 고치면서(명시적 멤버십 + 더블클릭 격리 편집) 기능이 한결 깔끔해졌다. 그런데 실제로 써 보니 그 개선이 세 군데에서 어긋나 있었다. 이번에 한 번에 바로잡았다.
1. 다중·중첩 그룹이 안 됐다
기존 그룹에 다른 노드를 더해 다시 묶으려 하면, 묶이기는커녕 기존 그룹이 사라졌다.
원인은 G(그룹/해제) 토글 판정이었다. "선택한 것 중 그룹이 하나라도 있으면 해제"로 동작하던 탓에, [기존 그룹 + 새 노드]를 고른 채 묶기를 누르면 묶기가 아니라 해제가 실행됐다.
단일 그룹만 선택했을 때만 해제하고, 그 외에는 묶는다로 바꿨다. 이제 그룹을 다른 노드와 함께 다시 묶으면 바깥 그룹 안에 기존 그룹이 중첩된다.
2. 그룹을 만들면 레이어 순서가 안 먹혔다
그룹을 만든 뒤로는 "앞으로/뒤로 보내기"가 먹통이었다. 렌더가 타입별 평면 정렬(아트보드 → 그룹 → 일반 노드)이라 그룹 프레임이 늘 일반 노드 뒤로 밀렸고, 순서를 바꿔도 그 정렬이 덮어썼다. 게다가 그룹을 옮겨도 프레임만 움직이고 멤버는 제자리였다.
z-order를 계층적으로 다시 짰다. 배열 순서가 곧 쌓는 순서이고, 그룹은 프레임을 먼저(=배경) 그린 뒤 그 자손을 이어 그린다. 이제 그룹을 앞/뒤로 보내면 프레임과 멤버가 한 덩어리로 같이 움직이고, 중첩 그룹도 바깥 프레임이 안쪽 뒤에 제대로 깔린다.
3. 잘라내기 / 붙여넣기가 없었다
Ctrl+X가 아예 빠져 있었다. 잘라내기를 넣고, 붙여넣기에 규칙을 하나 더했다 — 그룹 안을 편집(격리)하는 중에 붙여넣으면 그 그룹의 멤버로 들어간다. 그룹 밖 노드를 오려서 그룹 안으로 가져오는 흐름이 자연스러워졌다.
머리로 고치지 않았다
세 결함 모두 핵심 로직을 떼어내 시뮬레이션으로 원인을 먼저 못 박고, 실제 헤드리스 브라우저에서 동작을 확인했다. 새 회귀 테스트 11개 통과, 기존 벡터 기능 테스트 24개도 회귀 없음.
AI로 기능을 빠르게 늘리다 보면 이렇게 기능끼리 부딪히는 결함이 숨는다. 결국 원인을 증거로 못 박는 절차가 가장 빠른 길이었다.