[]
SpreadJS Collaboration Add-on은 다중 사용자 실시간 편집 시나리오를 위해 설계되었으며, 대규모 동시 작업을 효율적으로 지원하면서도 원활한 사용자 경험을 보장합니다.
본 보고서는 공신력 있는 테스트 방법론을 기반으로 다양한 고동시성 시나리오에서 SpreadJS Collaboration Server의 성능을 종합적으로 평가하고, 실제 데이터를 통해 제품의 기술적 역량을 제시합니다.
본 성능 테스트 보고서는 특정 구성에서 동시 작업 애드온의 성능을 이해하는 데 도움을 주기 위한 참고 자료입니다. 제시된 데이터는 참고 지표일 뿐이며, 제3자 환경에서의 실제 성능을 의미하지 않습니다.
모든 테스트 데이터는 특정 테스트 환경에서 수동 작업을 통해 수집되었으며, 해당 시나리오의 성능 특성만을 반영합니다.
본 보고서의 권장 구성은 참고용입니다. 실제 적용 여부는 각 비즈니스 시나리오, 기술 아키텍처, 배포 요구 사항에 따라 평가해야 합니다.
용어 | 정의 |
|---|---|
스냅샷(Snapshot) | 특정 시점의 공유 데이터 상태를 저장한 것으로, 동시 작업 중 변경 사항 비교나 복구에 사용됨 |
문서(Document, Doc) | 동시 작업에서 문서는 사용자 간 실시간 변경 사항을 동기화하는 공유 데이터 모델을 의미하며, 모든 참여자에게 일관성을 보장함 |
지연 시간 지표(pXX) | XX 백분위 지연 시간으로, XX%의 요청이 해당 시간 이하로 완료됨을 의미함. 예: p99는 99%의 요청이 해당 시간 내에 완료됨 |
랜덤 지연 시작(Random Delay Startup) | 클라이언트가 [0~6]초 범위의 임의 지연 후 시작하여, 사용자가 점진적으로 참여하는 실제 시나리오를 시뮬레이션 |
연산(Operation, OP) | 편집, 업데이트 등과 같이 모든 참여자에게 동기화되어야 하는 데이터 모델의 원자적 작업 |
submitSnapshotBatchSize | 서버가 데이터베이스에 스냅샷을 기록하기 전까지 누적하는 연산(OP) 수 |
처리량(Throughput) | 초당 처리되는 연산 수(op/s) |
구성 요소 | 사양 |
|---|---|
운영체제 | Ubuntu 20.04 / 22.04 / 24.04 LTS |
데이터베이스 | PostgreSQL v16.9 |
Node.js | v22.18.0 |
서버 A | 2코어 CPU, 4GB RAM |
서버 B/C/D | 4코어 CPU, 8GB RAM |
배포 방식:
동시 작업 서비스와 데이터베이스를 동일 머신 / 분리된 머신에 배포
부하 분산 시나리오에서 Nginx 일관 해싱(Consistent Hashing) 사용
사용자 행동 정의
테스트는 다음과 같은 사용자 동작을 시뮬레이션합니다.
연결 설정(Establish Connection): 서버에 연결
문서 로드(Load Document): 공유 문서 로드
문서 편집(Edit Document): 셀 편집을 통한 문서 수정
연결 해제(Disconnect): 편집 종료 후 서버 연결 해제
시뮬레이션 사용자 유형
역할 | 설명 |
|---|---|
Writer | 공유 문서의 지정된 셀에 특정 문자열을 기록 |
Reader | Writer가 기록한 특정 문자열을 읽음 |
DummyWriter | 동시 사용자 환경을 시뮬레이션하기 위해 임의 문자열을 기록 |
성능 지표
지연 시간(Latency): 쓰기와 읽기 작업 간 시간 차이(ms)
p50: 중앙값 지연 시간
p95: 대부분 사용자에 대한 일반적인 성능
p99: 최악의 경우 성능
처리량(Throughput): 초당 처리된 연산 수(op/s)
테스트 방법론
Node.js를 사용하여 sharedDoc API 호출 방식으로 사용자 행동 시뮬레이션
시나리오별 테스트 시간: 3분
클라이언트 시작 방식: 랜덤 지연 시작
기본 파라미터
파라미터 | 값 |
|---|---|
연산 빈도 | 6초마다 1회(0.16 op/s) |
시트 스냅샷 | 빈 시트 |
submitSnapshotBatchSize | 1 |
성능 임계값
지표 | 양호 | 경고 | 위험 |
|---|---|---|---|
p99 지연 시간 | < 500ms | 500~1000ms | > 1000ms |
처리량 | 선형 확장 | 정체 | 감소 |
CPU 사용률 | < 70% | 70~90% | > 90% |
1. 단일 문서 다중 사용자 동시성
2코어, 4GB 서버
동시 사용자 수 | p50 (ms) | p95 (ms) | p99 (ms) | 처리량 (op/s) |
|---|---|---|---|---|
50 | 8 | 18 | 25 | 9 |
100 | 13 | 31 | 39 | 17 |
200 | 52 | 415 | 613 | 34 |
300 | 82 | 624 | 820 | 48 |
380 | 208 | 1045 | 1564 | 59 |

4코어, 8GB 서버
동시 사용자 수 | p50 (ms) | p95 (ms) | p99 (ms) | 처리량 (op/s) |
|---|---|---|---|---|
50 | 8 | 15 | 21 | 9 |
100 | 12 | 29 | 38 | 19 |
200 | 49 | 390 | 587 | 37 |
300 | 74 | 486 | 692 | 51 |
380 | 157 | 833 | 1248 | 62 |

요약
단일 4코어 8GB 서버는 p99 지연 시간이 700ms 이하인 상태에서 약 300명 동시 사용자를 안정적으로 지원
단일 룸 시나리오에서는 2코어 4GB에서 4코어 8GB로 업그레이드 시 성능 개선 효과가 제한적
2. 다중 문서 동시성
구성: 4코어 8GB 서버, 동시 작업 서비스와 데이터베이스 분리 배포
문서 수 | p50 (ms) | p95 (ms) | p99 (ms) | 처리량 (op/s) |
|---|---|---|---|---|
500 | 8 | 25 | 35 | 159 |
1000 | 9 | 36 | 46 | 318 |
2000 | 16 | 155 | 209 | 647 |
3000 | 21 | 313 | 416 | 974 |
3500 | 105 | 1329 | 1874 | 1090 |

요약
단일 4코어 8GB 서버는 3,000개 동시 문서를 지원 가능
3,500개 문서를 초과하면 지연 시간이 급격히 증가
3. 부하 분산 시나리오
구성: 4코어 8GB 동시 작업 서버 2대 + 4코어 8GB DB 1대 + 4코어 8GB Nginx 1대

룸 수 | p50 (ms) | p95 (ms) | p99 (ms) | 처리량 (op/s) |
|---|---|---|---|---|
500 | 8 | 18 | 24 | 157 |
1000 | 9 | 26 | 36 | 316 |
2000 | 10 | 35 | 48 | 644 |
3000 | 13 | 47 | 61 | 968 |
4000 | 16 | 62 | 84 | 1289 |
5000 | 31 | 157 | 208 | 1587 |
6000 | 107 | 1033 | 1437 | 1790 |

요약
부하 분산 구성 시 약 4,000~5,000개 동시 문서 지원 가능
처리량은 5,000개 문서까지 거의 선형적으로 확장
4. 스냅샷 크기의 영향
구성: 4코어 8GB 서버
참고: 스냅샷이 클수록 지원 가능한 최대 동시 사용자 수가 감소함
스냅샷 유형 | 최대 동시 사용자 수 | p99 지연 시간 (ms) | 처리량 (op/s) |
|---|---|---|---|
빈 시트 | 400 | 372 | 67.6 |
4k 셀 | 300 | 157 | 50.9 |
10k 셀 | 225 | 114 | 38.5 |
요약
빈 시트: 최대 400명 동시 사용자 지원
4k 셀: 수용량 25% 감소
10k 셀: 수용량 44% 감소
5. submitSnapshotBatchSize의 영향
구성: 4코어 8GB 서버, 10k 셀 스냅샷
참고: submitSnapshotBatchSize를 적절히 설정하면 처리량과 동시성 수용 능력을 크게 향상시킬 수 있음
배치 크기 | 최대 동시 사용자 수 | p99 지연 시간 (ms) | 처리량 (op/s) |
|---|---|---|---|
1 | 225 | 114 | 38.5 |
100 | 300 | 138 | 51.0 |
요약
submitSnapshotBatchSize를 1에서 100으로 증가 시:
동시 사용자 수 +33% (225 → 300)
처리량 +32% (38.5 → 51 op/s)
고동시성 환경에서 SpreadJS Collaboration Server의 안정성과 성능을 보장하기 위해 다음과 같은 배포 구성을 권장합니다.
구성 요소 | 권장 사항 |
|---|---|
동시 작업 서비스 | 4코어 이상, 8GB RAM 이상 서버에 배포. 메시지 압축, 충돌 해결, 스냅샷 캐시 성능 향상을 위해 고클럭 CPU와 대용량 메모리 우선 고려 |
데이터베이스 | 고빈도 읽기/쓰기 및 데이터 영속성을 위해 고 I/O 성능 장치(SSD/RAID)에 별도 배포. 동시 작업 서비스와의 자원 경합 방지 |
부하 분산 | Nginx + 일관 해싱을 사용하여 수평 확장성과 엔터프라이즈급 대규모 동시 작업 요구 충족 |
수평 확장 | 더 높은 동시성을 위해 동시 작업 서비스 노드를 추가하여 선형 확장. 단, 데이터베이스·네트워크·Node.js 환경 제약의 영향을 받음 |
아키텍처 다이어그램
