Univer Rust 수식 엔진은 Univer Office SDK에 서버 측 스프레드시트 계산 기능을 제공하며 일괄 처리, 보고서 생성과 Agent 자동화를 지원합니다. 예산, 예측과 업무 규칙을 담은 수식이 수십만, 수백만 개로 늘어나면 계산 능력도 앱의 중요한 기반이 됩니다.
반복 수식, 조건부 집계, 시트 간 예산과 예측 모델을 포함한 통합 문서 10개를 측정했습니다. 세 가지 결과가 처리할 수 있는 업무 규모를 보여 줍니다.
- 약 200만 수식 노드: 12.29초에 네이티브 로드와 전체 계산 완료.
- 시트 54개의 프로젝트 예산: 1.27초.
- 판매 COUNTIFS 조건부 집계: 3.54초.
통합 문서 10개의 실측 성능
Rust는 네이티브 스냅샷 로드와 전체 계산을 포함하며 XLSX 변환은 제외합니다. Excel·LibreOffice는 원본 XLSX 열기와 전체 재계산을 포함합니다.
단위는 초이며 작을수록 빠릅니다. 가로축은 로그 눈금입니다.
전체 결과와 샘플 다운로드
샘플 이름을 클릭하면 원본 XLSX를 다운로드해 업무 모델을 살펴볼 수 있습니다.
| 샘플 | Univer Rust 수식 엔진 네이티브 로드+계산(초) | Excel 열기+전체 재계산(초) | LibreOffice 열기+전체 재계산(초) |
|---|---|---|---|
| 수식 50만 개 | 3.54 | 2.39 | 18.74 |
| 혼합 수식 부하 | 5.08 | 3.11 | 9.72 |
| 예측 모델 · 대규모 | 17.67 | 8.55 | 12.86 |
| 대규모 업무 분석 | 12.29 | 10.80 | 8.99 |
| 판매 COUNTIFS | 3.54 | 19.47 | 320.01 |
| 다중 시트 프로젝트 예산 | 1.27 | 0.73 | 2.96 |
| 집계 수식 | 0.27 | 1.03 | 3.10 |
| 중첩 IF와 근무일 | 1.65 | 3.48 | 2.21 |
| CBAM 계산 모델 | 1.19 | 0.74 | 1.83 |
| 예측 모델 · 소규모 | 13.02 | 5.79 | 7.61 |
업무 모델에 따라 달라지는 계산 특성
이번 부하에서 Univer Rust 수식 엔진은 조건부 카운트, 집계와 근무일 계산에서 좋은 결과를 보였습니다. 수식 수만으로 시간을 결정할 수 없으며 참조 범위, 함수 조합과 의존성도 영향을 줍니다.
예측 모델에서는 Excel과 LibreOffice가 더 빨리 완료해 향후 최적화 방향도 보여 줍니다. 모든 결과를 공개해 개발자가 자신의 업무 부하에 맞게 판단할 수 있도록 했습니다.
Office 앱에 계산 능력 더하기
Univer Rust 수식 엔진은 Office SDK 서버 계산 흐름의 일부입니다. 특정 콘텐츠 리비전을 계산하고 결과를 Snapshot과 함께 저장할 수 있습니다. 프런트엔드는 유효한 결과를 재사용하며 자체 수식 엔진으로 사용자 편집에 계속 반응합니다.
같은 콘텐츠 런타임을 기반으로 백그라운드 보고서, 일괄 처리와 Agent 작업을 구축하고 계산 결과를 다음 업무 단계에 연결할 수 있습니다.
헤드리스 및 서버 계산을 살펴보거나 Office SDK 빠른 시작으로 앱을 구축하세요.
측정 방법과 샘플 상세
Rust는 미리 변환한 네이티브 엔진 JSON을 로드하며 Excel·LibreOffice는 스타일 등 문서 처리를 포함한 XLSX를 엽니다. 지정된 입력 형식별 처리 시간을 측정합니다. 앱 시작, 오프라인 변환과 측정 후 검증은 제외하며 열기 기준 시간은 차감하지 않습니다.
Rust는 샘플마다 워밍업 1회와 정식 측정 5회를 수행하며 매번 독립 프로세스와 새 문서를 사용합니다. Rust 값은 중앙값입니다.
Excel·LibreOffice 대조 기록 환경: Windows 11, Intel Core i7-13700H, RAM 약 32GB. Excel 16.0 build 20527.0, 계산 스레드 20개. LibreOffice 26.8.1.1, CPU 멀티스레드 계산 활성화, OpenCL 가속 미사용. 이번 Rust 측정도 스레드 20개를 사용합니다.
| 엔진 | 측정 범위 | 통계 방식 |
|---|---|---|
| Univer Rust 수식 엔진 | 연속 타이머: 네이티브 파일 읽기 → JSON 역직렬화 → load_snapshot → 최초 의존성 구성 → 강제 전체 계산 → 결과 적용. 오프라인 XLSX 변환 제외. | 샘플마다 워밍업 1회와 정식 측정 5회의 중앙값. 매번 독립 프로세스와 새 문서 사용, 스레드 20개. |
| Excel COM | 새 Workbooks.Open부터 CalculateFullRebuild() 반환까지. 명시적 의존성 재구성과 전체 재계산 포함. | 샘플마다 워밍업 1회, 측정 5회의 중앙값. |
| 헤드리스 LibreOffice / UNO | 원본 XLSX를 새로 여는 시점부터 calculateAll() 반환까지. 열기 단계에서 수행하는 작업 포함. | 5회 중앙값. 판매 COUNTIFS는 성공한 진단 측정 1회. |
Rust 로드 및 계산 구간별 실측
각 열은 독립적인 중앙값이므로 구간 중앙값의 합이 연속 총시간의 중앙값과 같을 필요는 없습니다.
| 샘플 | 네이티브 파일 읽기·역직렬화 ·로드(초) | 의존성 구성·전체 실행 ·결과 적용(초) | 연속 총시간(초) |
|---|---|---|---|
| 수식 50만 개 | 1.27 | 2.25 | 3.54 |
| 혼합 수식 부하 | 0.60 | 4.50 | 5.08 |
| 예측 모델 · 대규모 | 3.65 | 13.94 | 17.67 |
| 대규모 업무 분석 | 2.65 | 9.46 | 12.29 |
| 판매 COUNTIFS | 0.61 | 2.97 | 3.54 |
| 다중 시트 프로젝트 예산 | 0.39 | 0.88 | 1.27 |
| 집계 수식 | 0.09 | 0.18 | 0.27 |
| 중첩 IF와 근무일 | 0.27 | 1.40 | 1.65 |
| CBAM 계산 모델 | 0.09 | 1.08 | 1.19 |
| 예측 모델 · 소규모 | 2.40 | 10.20 | 13.02 |
각 통합 문서의 구성
수식 수는 실행 가능한 수식 노드 기준이며 물리적인 수식 셀 수와 반드시 같지는 않습니다. 데이터 셀은 헤더를 포함한 수식이 아닌 값이 있는 셀입니다. 주요 샘플 9개와 규모 비교용 1개로, 완전히 독립된 수식 계열 10개는 아닙니다.
| 샘플 | 수식 노드 | 데이터 셀 / 시트 | 수식 특성 |
|---|---|---|---|
| 수식 50만 개 | 500,001 | 1,000,047 / 2 | SUM, AVERAGE, IF, XLOOKUP. 대량의 반복 수식. |
| 혼합 수식 부하 | 367,954 | 432,055 / 7 | SUMIF, AVERAGEIFS. 조건부 집계와 날짜·텍스트 혼합. |
| 예측 모델 · 대규모 | 1,463,721 | 1,549,982 / 4 | 중첩 6단계. INDEX, LARGE, OFFSET, MATCH와 배열. |
| 대규모 업무 분석 | 1,992,537 | 113,084 / 31 | 중첩 7단계. 시트 간 참조, 텍스트 처리, 호환성 수식. |
| 판매 COUNTIFS | 349,630 | 299,573 / 2 | IF, AND, COUNTIFS. 행마다 커지는 조건부 카운트 범위. |
| 다중 시트 프로젝트 예산 | 68,576 | 101,378 / 54 | 시트 54개. VLOOKUP, INDIRECT를 사용하는 시트 간 예산. |
| 집계 수식 | 26,951 | 6,841 / 2 | IFERROR, AVERAGE, SUM. 인수 목록이 긴 집계. |
| 중첩 IF와 근무일 | 118,821 | 338 / 1 | IF 중첩 10단계. NETWORKDAYS 근무일 계산. |
| CBAM 계산 모델 | 52,739 | 13,738 / 19 | 중첩 6단계. 조회, 조건부 집계, 동적 참조와 행렬. |
| 예측 모델 · 소규모 | 974,625 | 1,040,507 / 4 | 대규모 예측 모델과 같은 수식 계열의 소규모 버전. |
데이터, 검증과 재현
보고서는 수식 수와 표본값을 검증해 테스트 경로의 계산 완전성을 확인합니다. 모든 제품의 전체 수식 결과가 같다는 뜻은 아닙니다.
재계산 API: Excel CalculateFullRebuild 및 LibreOffice calculateAll.