umm v0.73.0
v0.73.0 — 보던 자리와, 원할 때만 붙잡는 격자
같은 부류 제품들(Heptabase · Obsidian Canvas · Scrintal · Miro · tldraw)의 UX 패턴을
훑고 umm에 없는 것만 골랐습니다. 명령 팔레트(Ctrl+K)와 단축키 안내(?)는 이미
있었고, 여러 개 선택해서 지우는 것도 있었습니다. 없던 것은 둘입니다.
공간 안에서 자리를 잃었습니다
v0.72.0에서 공간을 잃는 문제를 고쳤는데, 공간 안에서 자리를 잃는 문제가 남아
있었습니다.
캔버스는 열 때마다 모든 생각을 한눈에 맞췄습니다. 큰 캔버스의 한 귀퉁이를 파고 있다가
오늘의 리뷰를 잠깐 보고 오면, 다시 멀찍이서 시작해야 했습니다.
이제 마지막으로 보던 위치와 배율로 돌아옵니다. 공간마다 따로 기억하고, 브라우저에
둡니다 — 생각에 대한 사실이 아니라 어디를 보고 있었는가이기 때문입니다.
- 처음 여는 공간은 예전처럼 전체를 맞춥니다
- 되감기 중에는 적용하지 않습니다. 과거는 다른 그림이고, 오늘 두고 온 자리를 물려받을
이유가 없습니다
React Flow에게 맡길 수 없었습니다
defaultViewport 는 캔버스가 마운트될 때 읽힙니다. 그 시점에는 어느 공간인지 아직
모릅니다. fitView 는 생각을 다 재고 나서 맞추는데, 그게 복원 효과보다 늦게 도착해서
조용히 덮어썼습니다.
그래서 여는 시야를 우리가 정합니다 — 기억된 게 있으면 그리로, 없으면 우리가 직접
맞춤을 호출합니다. fitView 속성은 뗐습니다.
시험이 이걸 잡았습니다. 처음 두 번은 제 시험이 틀렸습니다 — 합성 휠 이벤트는 캔버스를
움직이지 않았고, 격자 색은 CSS color 가 아니라 SVG의 커스텀 속성으로 들어갑니다. 화면이
실제로 칠하는 값을 읽도록 고친 뒤에야 진짜 결함이 보였습니다.
격자는 원할 때만
끌어 놓은 생각이 격자에 붙습니다. 기본은 꺼져 있습니다.
umm의 태도는 정리는 나중에. 생각부터 붙입니다. 입니다. 늘 붙잡는 격자는 그 태도와
다툽니다. 그래서 켜고 끄는 것이고, 선택은 기억됩니다 — 정리는 한동안 머무는 모드니까요.
켜져 있을 때만 격자 점이 보입니다. 보이는데 아무것도 안 붙으면 장식이고, 안 보이는데
붙으면 조준할 수 없습니다. 그려지는 간격과 붙는 간격은 같은 상수 하나에서 나옵니다.
확인한 것
✓ 나갔다 오면 저장된 위치·배율로 돌아오고, 새 맞춤이 아님
✓ 화면에 있던 값이 그대로 저장됨
✓ 아무도 안 연 공간은 여전히 생각을 찾아 맞춤 — 화면 안에 들어오는지까지
✓ 격자 끄면 끌어 놓은 자리 그대로, 켜면 20의 배수로 붙음
✓ 켜야만 점이 보임
✓ 선택이 새로 고침을 넘어 남음
| 바꾼 것 | 잡은 것 |
|---|---|
| 시야를 저장하지 않음 | 돌아올 자리가 없음 |
| 저장된 시야를 무시 | 매번 전체 맞춤 |
| 첫 열기의 맞춤을 제거 | 새 공간이 빈 땅을 봄 |
| 격자를 항상 켬 | 안 켰는데 붙잡음 |
| 점을 항상 그림 | 안 붙는 격자가 보임 |
| 선택을 기억하지 않음 | 켤 때마다 다시 켜야 함 |
여섯 개 전부 검출.
하지 않은 것
onlyRenderVisibleElements. React Flow는 지금 화면 밖 노드까지 전부 마운트하고,
그게 주석에 적힌 "2,000개 5.5초"의 출처입니다. 켜면 큰 폭으로 빨라질 가능성이 있습니다.
다만 PNG·PDF 내보내기가 화면 밖 메모를 조용히 빠뜨릴 위험이 있습니다 — 내보내기는
캔버스 DOM을 그대로 그림으로 찍기 때문입니다. 확인하지 않았으므로 켜지 않았습니다.
가능성으로만 적어 둡니다.
전체 검증: go test -p 1 ./internal/... ./cmd/... · go vet · gofmt ·
변형 6종 전부 검출 · vitest 158개 · e2e 128개(실제 바이너리·실제 번들, 2건은 전체
실행 부하에서 flaky — 격리 시 통과) · oxlint(종료 코드) · Prettier · tsc · i18n 1000키 ·
PWA precache
What's Changed
Full Changelog: v0.72.0...v0.73.0