릴리스 노트만으로는 실제 코드 변경이 안 보이니, 문제 되는 PR들을 직접 열어보겠습니다.
릴리스 노트 자체가 한 줄 요약이라, 제가 확인할 수 있는 건 PR 제목까지입니다(디프는 GitHub 로그인 벽에 막혀 못 가져옵니다). 대신 확인 가능한 건 전부 펼치고, 나머지는 직접 확인할 방법을 드리겠습니다.
## 타임라인 — 0.9.0은 약 16개월 전
< cite index="18-1">0.11.0이 2026년 4월 28일</cite> 기준이고, 릴리스 순서상 0.9.0은 2025년 4월입니다. 사이에 **9개 릴리스, PR 44건**이 쌓였습니다.
| 버전 | 시점 | PR수 | 성격 |
|---|---|---|---|
| 0.9.1 | 25년 5월 | 3 | 버그 |
| 0.9.2 | 25년 5월 | 4 | 버그+기여 |
| 0.9.3 | 25년 5월 | 1 | 핫픽스 |
| 0.9.4 | 26년 2월 | 8 | .NET 10 |
| 0.9.5 | 26년 2월 | 1 | 핫픽스 |
| **0.10.0** | 26년 4월 | **14** | **구조 개편** |
| 0.11.0 | 26년 4월 | 4 | API 정리 |
| 0.11.1 | 26년 8월 | 3 | 렌더 핫픽스 |
| 0.11.2 | 26년 8월 | 6 | 렌더/성능 |
0.9.3(25년 5월) → 0.9.4(26년 2월) 사이 **9개월 공백**이 눈에 띕니다. 그 공백 뒤에 밀린 변경이 한꺼번에 터진 구조라, 0.9.4와 0.10.0 두 지점이 위험 구간입니다.
## 0.10.0을 따로 봐야 하는 이유
44건 중 14건이 여기 몰려 있고, 성격이 다릅니다. 앞뒤 릴리스는 "고쳤다"인데 이건 "바꿨다"입니다.
**렌더링 아키텍처**
< cite index="4-1">datasheet를 pane 단위로 리팩터링(#280) → pane 안정화(#282) → 스크롤 유틸 상대경로 수정(#283)</cite>. 한 릴리스 안에서 리팩터링하고 곧바로 안정화 PR과 경로 수정이 따라붙었습니다. 큰 수술이었다는 뜻이고, < cite index="4-1">0.11.1의 시트 크기 변경 시 렌더(#299), 0.11.2의 파라미터 변경 재렌더(#301)·렌더/dispose(#302)·고정 열 렌더링(#303)</cite>까지 여진이 이어집니다. **0.10.0으로 멈추지 말고 0.11.2까지 가야 하는 이유가 이겁니다.**
**저장소 계층**
< cite index="4-1">MergeableIntervalStore의 방향·동일 데이터 병합 버그(#276), 행/열 정보 저장소 버그 수정 및 회귀 테스트 추가(#278), matrix store 성능 개선 및 벌크 로드(#284), 의존성 그래프 갱신(#277)</cite>. 내부 자료구조가 통째로 손봐졌습니다. 0.9.0에서 대량 데이터로 겪던 미묘한 증상들이 여기서 해결됐을 가능성이 높습니다.
**모델 이동**
< cite index="4-1">freeze 상태가 시트 모델로 편입(#279)</cite> — 고정 행/열 설정 위치가 컴포넌트 파라미터에서 Sheet 쪽으로 옮겨졌을 가능성이 큽니다. 쓰고 있다면 직접 확인 필요.
## 업그레이드 전 코드 검색 목록
프로젝트에서 아래를 grep 해보세요. 걸리는 게 없으면 위험도가 크게 떨어집니다.
1. `ISheetFunction` — < cite index="4-1">FunctionDescriptor 레지스트리로 교체(#285)</cite>. **확정 breaking.** 참조 데이터 검증용 커스텀 함수를 만들었다면 여기가 1순위.
2. `Metadata` / `SetMetadata` — < cite index="4-1">셀 메타데이터 API 정리(#293)</cite>. Dapper 원본 행의 PK를 셀 메타데이터에 심어두는 패턴을 쓴다면 확인 필요.
3. 프로젝트 CSS의 `.sheet-`, `.bds-` 계열 오버라이드 — < cite index="4-1">pane 리팩터링(#280)과 popover UI 전환(#281)</cite>로 DOM이 바뀝니다. MudBlazor 다이얼로그/드로어 안에 넣었다면 z-index와 팝오버 클리핑이 새로 문제될 수 있습니다.
4. `.csproj`의 TargetFramework — < cite index="4-1">0.9.4에서 .NET 10 대응(#266)</cite>.
5. `BeforeAutoFill` — < cite index="4-1">0.9.2에서 CopyFormat 변경이 가능해짐(#227)</cite>. 기능 추가라 안전하지만 동작이 달라질 수 있음.
## 0.9.0에서 겪었을 법한 것 중 이미 고쳐진 것
혹시 우회 코드를 짜뒀다면 걷어낼 수 있습니다.
- < cite index="4-1">개행 등 비표시 문자가 들어간 셀 값에서 에러(#236)</cite> — Oracle CLOB/멀티라인 컬럼에서 바로 터지던 문제.
- < cite index="4-1">행/열 삽입·삭제·정렬 시 메타데이터가 따라가지 않음(#232)</cite>, < cite index="4-1">정렬 시 validator가 따라가지 않음(#234, 그리고 0.11.2 #306에서 재차)</cite> — 두 번에 걸쳐 잡힌 걸 보면 0.9.0 시점엔 정렬 후 검증 규칙이 어긋났을 겁니다.
- < cite index="4-1">readonly일 때 동작이 차단되지 않던 문제(#239)</cite>와 < cite index="4-1">readonly에서 열 필터가 막히던 문제(#250)</cite> — 조회 전용 화면 구현이 훨씬 깔끔해집니다.
- < cite index="4-1">기본 필터가 로드되지 않음(#241)</cite>, < cite index="4-1">머리글 shift 선택 불일치(#265)</cite>, < cite index="4-1">연속 설정된 행/열 데이터의 직렬화 오류(#247)</cite>.
- < cite index="4-1">대량 데이터 행 삽입 성능(#273)</cite>, < cite index="4-1">첫 편집 시 지연을 줄이려 highlight.js를 최초 로드에 당김(#240)</cite> — 후자는 Blazor Server에서 첫 셀 클릭 렉으로 체감됐을 항목입니다.
- 수식 파서: < cite index="4-1">이항식 우변의 단항 연산자(#253)</cite>, < cite index="4-1">#275, #290, #291</cite>. 0.9.0의 formula editor가 갓 나온 기능이라 이후 네 번 다듬어졌습니다.
## 실제 디프 확인 방법
제가 못 가져온 부분은 로컬에서 5분이면 확인됩니다.
```
git clone https://github.com/anmcgrath/BlazorDatasheet.git
cd BlazorDatasheet
git diff 0.9.0..0.11.2 --stat -- src/
git log 0.9.0..0.11.2 --oneline -- src/BlazorDatasheet.Core/Formula/
```
브라우저로는 `compare/0.9.0...0.11.2` 경로가 같은 걸 보여줍니다. 특히 `#285`(함수 레지스트리)와 `#293`(메타데이터)만 파일 단위로 열어보면 마이그레이션 범위가 확정됩니다.
## 권장 경로
한 번에 점프하면 컴파일 에러·스타일 깨짐·렌더 이상이 섞여 원인 분리가 안 됩니다.
1. **0.9.0 → 0.9.5** — API 변경 없음. 수식·정렬·직렬화 버그만 걷힘. 여기서 회귀 테스트 한 번.
2. **→ 0.10.0** — 함수 레지스트리 마이그레이션 + CSS 재조정. 가장 오래 걸리는 단계.
3. **→ 0.11.2** — 메타데이터 API 정리 반영 후, pane 리팩터링 여진 수정분을 한꺼번에 흡수.
.NET 8/9에 머물러 있다면 0.9.4 이후 패키지가 net10 전용 TFM일 수 있으니, 1단계 진입 전에 NuGet 의존성 탭에서 지원 프레임워크부터 확인하세요. 이게 막히면 나머지 계획은 의미가 없습니다.
카테고리 없음