VM 서버 자원 스펙 산출 근거 (개발환경 · 최대 자원 적용)
생성일: 2025-09-03 04:47:04
Ⅰ. 산정기준
- 개발환경: 사용자 20명, 동시접속자 10명(50%)
- 구성요소: Mendix 앱(복잡), Docker Compose 기반 5컨테이너
- Mendix 런타임 3개 + 웹/역프록시 1개 + DB(PostgreSQL) 1개
- 오버헤드: Docker(+Compose) 5–10% + VM OS 10–15% → 합산 20%를 계수로 적용
- 기타 자원 사용량: 보안/모니터링/백업 에이전트, 파일시스템 캐시, JVM GC·네이티브 메모리 등 명시적으로 가산
- 여유자원(버퍼): 피크·빌드·배포·로그 증가 대비 +25%
- 스토리지: 기본스토리지(OS, Docker, 시스템 로그)와 추가스토리지(앱 로그, 미디어) 분리
Ⅱ. 산정근거(수치 & 가정)
| 구성 | 개수 | vCPU(컨테이너당) | 메모리(컨테이너당) | 비고 |
| Mendix 앱(JVM) | 3 | 2.0 | 4.0 GB | 최대 시작치(힙 중심), 실측 후 단계 조정 |
| 웹/역프록시 | 1 | 0.5 | 1.0 GB | TLS/압축/리라이트 피크 고려 |
| DB(PostgreSQL) | 1 | 2.0 | 2.0 GB | /dev/shm 512m 설정 권장 |
| 기타 자원 | CPU | 메모리 | 설명 |
| OS/데몬 | 0.5 vCPU | 2.0 GB | 기본 서비스·파일시스템·에이전트 |
| 보안/모니터링/백업 에이전트 | 0.5 vCPU | 1.0 GB | 피크 시 상시 동작 고려 |
| 파일시스템 캐시 | - | 2.0 GB | 컨테이너 레이어/로그 I/O 흡수 |
| JVM GC·네이티브 | - | 1.2 GB | 앱 힙의 10%로 가정 |
Ⅲ. 계산방법(공식 & 단계)
- 컨테이너 합계
CPU = 3×2.0 + 0.5 + 2.0 = 8.50 vCPU
MEM = 3×4.0 + 1.0 + 2.0 = 15.00 GB
- 기타 자원 가산
CPUᵖʳᵉ = 8.50 + 0.50 + 0.50 = 9.50 vCPU
MEMᵖʳᵉ = 15.00 + 2.00 + 1.00 + 2.00 + 1.20 = 21.20 GB
- 오버헤드 적용 (× 1.2)
CPUᵒʰ = 9.50 × 1.2 = 11.40 vCPU
MEMᵒʰ = 21.20 × 1.2 = 25.44 GB
- 버퍼 적용 (× 1.25)
CPUᶠ = 11.40 × 1.25 = 14.25 vCPU
MEMᶠ = 25.44 × 1.25 = 31.80 GB
권장 VM 스펙(개발 · 최대 자원 기준):
CPUᶠ ≈ 14.25 → 16 vCPU
MEMᶠ ≈ 31.80 GB → 32 GB
Ⅳ. 디스크(스토리지) 산정
1) 기본스토리지(OS/Docker/시스템 로그)
| 마운트/볼륨 | 용도 | 초기 크기 | 비고 |
| / | OS/기본 패키지 | 40 GB | RHEL 8 최소 요구 상회 |
| /var/lib/docker | 이미지/레이어/캐시 | 150 GB | 빌드·캐시·업데이트 대비 (최대) |
| /var/log | 시스템/도커 로그 | 40 GB | logrotate 7–14일 |
| 합계 | 230 GB ≈ 230 GB |
2) 추가스토리지(앱 로그/미디어)
로그 산정식: Slogs = (일일 로그량 × 보관일수) × 1.5(여유)
- 일일 앱 로그(피크): 200 MB/시간/앱 × 24시간 × 3앱 = 14.06 GB/일
- 웹/DB 로그(피크): 2.0 GB/일
- 일일 총 로그: 16.06 GB/일
- 보관 14일 × 1.5 여유 → 337.3 GB
미디어 여유 200 GB 포함 → 권장 시작: 537 GB (성장 추세에 따라 확장).
Ⅴ. Docker Compose 리소스 한도(최대 시작치) 예시
version: "3.9"
services:
mendix-app-1:
image: your/mendix:dev
deploy:
resources:
limits: { cpus: "2.0", memory: "4.0g" }
reservations: { cpus: "1.0", memory: "2.0g" }
mendix-app-2: { << 동일 >> }
mendix-app-3: { << 동일 >> }
web:
image: your/reverse-proxy:latest
deploy:
resources:
limits: { cpus: "0.5", memory: "1.0g" }
db:
image: postgres:16
shm_size: "512m"
deploy:
resources:
limits: { cpus: "2.0", memory: "2.0g" }
※ 실제 적용 여부는 엔진/오케스트레이터에 따라 다릅니다. 배포 후 docker stats로 CPU%, 메모리 사용/리밋을 검증하세요.
Ⅵ. 참조 링크(산정근거)
- Mendix Java 메모리 사용: https://docs.mendix.com/refguide/java-memory-usage/
- Mendix 스케일링(수평/수직): https://docs.mendix.com/developerportal/deploy/scale-environment/
- Docker 리소스 제약(메모리/CPU): https://docs.docker.com/engine/containers/resource_constraints/
- Docker Compose deploy.resources: https://docs.docker.com/reference/compose-file/deploy/
- docker stats: https://docs.docker.com/reference/cli/docker/container/stats/
- PostgreSQL & 공유 메모리: https://www.instaclustr.com/blog/postgresql-docker-and-shared-memory/
- RHEL 8 시스템 요구사항: https://docs.redhat.com/.../system-requirements-and-supported-architectures_rhel-installer