성능과 확장
WebSpace는 파일을 보여주는 공간을 넘어 정적 웹, 데이터 API와 실시간 서비스를 함께 실행할 수 있습니다. 스키마 파일(.sfn)에 데이터 구조와 권한을 정의하고 같은 인증 체계에서 REST API와 WebSocket을 연결합니다.
5,000개 실시간 연결 검증
동일한 Node WebSocket 클라이언트와 인증·구독 절차로 각 연결이 이벤트 10건을 수신하도록 설정하고 규모별로 3회 측정했습니다.
| 동시 연결 | 전달 이벤트 | 전체 완료 최고 | 전체 완료 평균 | 연결 p95 최고 / 평균 | 전달 p95 최고 / 평균 | 결과 |
|---|---|---|---|---|---|---|
| 100 | 1,000건 | 약 168ms | 약 176ms | 약 143ms / 153ms | 약 19ms / 20ms | 누락 0건 |
| 1,000 | 10,000건 | 약 812ms | 약 952ms | 약 563ms / 679ms | 약 211ms / 220ms | 누락 0건 |
| 5,000 | 50,000건 | 약 2.96초 | 약 3.27초 | 약 1.69초 / 1.86초 | 약 1.08초 / 1.21초 | 누락 0건 |
최고는 3회 중 가장 짧은 결과이고 평균은 산술 평균입니다. 100개에서 5,000개로 연결과 전달량을 50배 늘린 조건에서도 모든 회차의 이벤트 누락은 0건이었습니다.
실제 쓰기를 포함한 몬스터 레이드
실시간 연결만 열어 두는 테스트와 별도로, 여러 사용자가 공동 보스를 공격하는 SQLite3 기반 시나리오를 검증했습니다.
- 1,000개의 인증된 연결이 같은 게임을 구독합니다.
- 서버가 100개의 공격을 판정하고 보스 체력, 공격 기록과 보상을 저장합니다.
- 사용자별 아이템 API를 1,000회 조회합니다.
- 재전송된 공격이 체력이나 보상에 중복 반영되지 않는지 확인합니다.
| 항목 | 결과 |
|---|---|
| 게임 상태 및 아이템 쓰기 | 100건, 오류 0건 |
| 아이템 API 읽기 | 1,000건, 모두 정상 응답 |
| 읽기 완료 시간 | 약 1.91초 |
같은 구조는 실시간 퀴즈, 공동 식물 재배, 협업 보드, 생산 현황판과 참여형 캠페인에도 적용할 수 있습니다. 특정 게임 이름에 묶이지 않고 서버가 상태 변경과 권한을 판정하는 공통 처리기를 사용합니다.
엔진 선택과 확장
| 작업 형태 | 권장 방향 |
|---|---|
| 아이디어 검증, 사내 도구, 단일 서버 | SQLite3로 빠르게 시작 |
| 여러 방·자원·사용자에 쓰기 분산 | PostgreSQL 또는 MySQL/MariaDB |
| 다중 서버, 복제와 전문 운영 도구 | 외부 데이터베이스 사용 |
| WebSocket 이벤트 전달 최적화 | DB 교체보다 방 크기, 메시지와 팬아웃 구조를 먼저 점검 |
외부 DB는 분산 쓰기와 다중 서버 운영에서 이점이 있지만 DB를 바꾸는 것만으로 실시간 전달이 같은 비율로 빨라지지는 않습니다.
결과를 해석할 때
이 수치는 빌드와 개발 작업이 함께 수행되던 단일 로컬 개발 환경의 검증 결과이며 SLA나 전용 장비의 최대 처리량이 아닙니다. 5,000개의 서로 다른 사용자 계정, 인터넷 구간과 운영 프록시를 포함한 결과도 아닙니다.
실제 수용량은 서버 사양, 프록시, 네트워크, 메시지 크기, 한 방의 참여자 수, 읽기·쓰기 비율에 따라 달라집니다. 기본 동시 연결 한도는 안전한 시작값인 1,000개이며, 더 큰 규모는 관리자가 한도를 조정하고 실제 배포 환경에서 부하 테스트한 뒤 공개하세요.
운영 중에는 운영 현황에서 요청, 오류, 응답 시간과 DB 상태를 확인하고 서비스 및 용량에서 연결 한도를 관리할 수 있습니다.
실제 사용자 흐름으로 확인하려면 응용편: 실시간 오목 게임 만들기에서 샘플을 내려받아 직접 한 판 실행해 보세요.