팀이 사설 네트워크에서 OpenCode로 PR 리뷰를 하고 싶지만 '4GB VPS로 충분한가'에서 막혀 있습니다——3대의 Linux VPS(4/8/16GB)에서 동일한 opencode serve + PR 리뷰 워크로드를 실행해 피크 메모리, swap, E2E 시간을 측정했습니다. **결론: API 전용 경량 리뷰는 4GB 간신히 가능; 팀 일상은 8GB가 최소; 다중 저장소 병행 + MCP는 16GB.**
지난주 12명 규모 백엔드 팀에서 상담 요청이 왔습니다. 사내 네트워크에서 OpenCode로 PR Code Review를 도입하고 싶다는 것——GitHub Copilot 클라우드 리뷰는 쓰지 않고, 코드 diff가 프라이빗 네트워크 밖으로 나가면 안 됩니다. 인프라 담당자가 4GB·8GB·16GB VPS 견적 3장을 내밀며 "어느 사양을 사야 하냐"고 물었습니다.
이건 "OpenCode가 뭔가"의 문제가 아니라, 셀프호스팅 리뷰 서버가 실제로 얼마나 많은 리소스를 소비하는가의 문제입니다. 동일 스펙 Linux VPS 3대(Ubuntu 22.04, 2 vCPU, 메모리만 다름)에서 같은 opencode serve + PR 리뷰 워크로드를 실행해 피크 메모리, swap 횟수, E2E 시간을 측정했습니다. 결론부터:
- 4GB: 개인 시험 / 단일 저장소 경량 리뷰——동작하지만 swap 빈번
- 8GB: 소규모 팀 일상 리뷰의 최소 가용선
- 16GB: 다중 저장소 병행 + MCP + 장시간 세션——프로덕션 권장 기본
로컬 배포에서 실제로 돌아가는 것
opencode serve는 가벼운 웹 서비스로 보이기 쉽습니다——프로세스 자체는 작습니다(유휴 시 RSS 약 150–250MB). 하지만 OpenCode가 Code Review를 수행하면 에이전트가 서버에서 일련의 로컬 작업을 실행합니다:
| 작업 | 전형적 메모리 영향 |
|---|---|
대규모 저장소 git clone / git diff |
200MB–1GB(저장소 크기 의존) |
| LSP 언어 서버(TypeScript, Go 등) | 300MB–800MB/인스턴스 |
npm test / pytest 자식 프로세스 |
500MB–2GB |
| MCP 서버(filesystem, github 등) | 100MB–500MB/인스턴스 |
| SQLite 세션 DB(장기 누적) | 최대 1–2GB(#16729) |
서버 선정은 opencode serve --port 4096 단독이 아니라 리뷰 작업이 기동하는 자식 프로세스 피크를 봐야 합니다.
두 가지 배포 모드
OpenCode는 두 가지 셀프호스팅 진입점을 제공합니다(공식 문서):
opencode serve(헤드리스 API 서버)
OPENCODE_SERVER_PASSWORD=your-secret opencode serve \
--hostname 0.0.0.0 \
--port 4096
- OpenAPI 3.1 엔드포인트 노출(
/doc에서 Swagger 확인) - TUI 클라이언트는
opencode attach http://host:4096로 연결 - CI webhook 트리거, 팀 통합 리뷰 게이트웨이에 적합
opencode web(브라우저 UI)
OPENCODE_SERVER_PASSWORD=your-secret opencode web \
--hostname 0.0.0.0 \
--port 4096
- 브라우저 UI 자동 실행
- 엔지니어가 PR diff를 수동 붙여넣기 리뷰
- 프로덕션: Nginx/Caddy 리버스 프록시 + HTTPS 권장
보안 최소선: OPENCODE_SERVER_PASSWORD 필수 설정; 인증과 방화벽 없이 0.0.0.0을 공개하지 말 것.
테스트 환경
| 항목 | 사양 |
|---|---|
| VPS | Ubuntu 22.04 × 3, 2 vCPU, SSD 40GB, 메모리 4/8/16GB |
| OpenCode | 2026.7, Anthropic Claude Sonnet API 연결 |
| 테스트 저장소 | ① TypeScript monorepo(pnpm, 약 120 패키지) ② Go 마이크로서비스(Docker Compose 포함) |
| 리뷰 작업 | PR 시뮬레이션: 에이전트 diff 읽기 → lint 실행 → 단위 테스트 → Critical/Warning/Suggestion 출력 |
| 샘플링 | 시나리오당 3회 중앙값; free -m + /proc/PID/status로 피크 기록 |
3단계 메모리 횡단 비교
시나리오 S1: 단일 저장소 경량 PR(3파일 변경, 테스트 없음)
| 구성 | 피크 메모리 | Swap | 리뷰 시간 |
|---|---|---|---|
| 4GB | 2.1 GB | 경미(~80MB) | 38s |
| 8GB | 2.1 GB | 없음 | 36s |
| 16GB | 2.1 GB | 없음 | 35s |
4GB는 간신히 가능——이미 swap 징후.
시나리오 S2: 중규모 PR + lint + 단위 테스트
| 구성 | 피크 메모리 | Swap | 리뷰 시간 |
|---|---|---|---|
| 4GB | 3.8 GB | 심각(~1.2GB) | 2m 48s |
| 8GB | 3.6 GB | 없음 | 1m 12s |
| 16GB | 3.6 GB | 없음 | 1m 08s |
4GB는 소요 시간 2배——8GB가 분수령.
시나리오 S3: 2저장소 병행 리뷰 + MCP filesystem
| 구성 | 피크 메모리 | Swap | 리뷰 시간 |
|---|---|---|---|
| 4GB | OOM Kill | — | 실패 |
| 8GB | 7.2 GB | 빈번(~2GB) | 4m 15s |
| 16GB | 6.8 GB | 없음 | 2m 02s |
8GB는 동작하지만 버벅임; 16GB가 쾌적 구간.
시나리오 S4: 장시간 세션(48시간 연속, 20+ 리뷰)
| 구성 | 프로세스 RSS | SQLite DB | 시스템 swap |
|---|---|---|---|
| 4GB | 1.4 GB | 890 MB | 지속 2GB+ |
| 8GB | 1.1 GB | 1.2 GB | 1.15 GB(#16729과 일치) |
| 16GB | 980 MB | 1.2 GB | 없음 |
장기 운용 후 DB 팽창은 공통 과제. opencode.json에서 retention 활성화:
{
"retention": {
"days": 30
}
}
4GB: 감수할 수 있는 경우
적합:
- 개인 개발자가 자신의 작은 PR을 가끔 리뷰
- 클라우드 API만, 로컬 테스트 없음
- 리뷰가 2–3배 느려지는 것, 가끔 OOM 재시작 허용
부적합:
- 팀 공유 리뷰 서버
- MCP나 병행 리뷰 필요
- 24/7 상시 서비스
절약 팁: 4GB VPS 온디맨드 기동——PR webhook 수신 시 systemctl start opencode, 리뷰 완료 후 종료. 24/7 16GB보다 저렴하지만 콜드 스타트 15–30초.
8GB: 소규모 팀 최소선
8GB는 대부분 팀에 대한 시작 권장:
opencode serve+ LSP 1개 + 단일 저장소 전체 리뷰 플로우 동시 실행 가능- 피크 보통 5–7GB, OS용 1–2GB 여유
- VPS 월 $12–24(Hetzner, Vultr, DigitalOcean 동급)
주의사항:
- 병행 리뷰 세션 1–2개로 제한
- 주 1회 서비스 재시작 + DB
VACUUM OPENCODE_DIAGNOSTICS=1로 메모리 추세 모니터링
16GB: 프로덕션 기본
다음 시나리오는 16GB 직행:
- 3명 이상 팀이 하나의 리뷰 게이트웨이 공유
- 2+ 저장소 병행 리뷰
- MCP 활성(GitHub, Jira, filesystem)
npm test/docker compose로 PR 검증 필요- 24/7 상시, 빈번한 유지보수 회피
16GB VPS 월 $24–48——파트타임 인간 리뷰어보다 수 자릿수 저렴.
메모리 외에 볼 것
| 차원 | 권장 |
|---|---|
| CPU | 2 vCPU 최소; 병행 리뷰는 4 vCPU |
| 디스크 | SSD 40GB+; SQLite DB와 git clone이 공간 소비 |
| 네트워크 | 모델 API로 HTTPS 아웃바운드; 인바운드는 프라이빗 IP로 제한 |
| OS | Ubuntu 22.04 LTS 또는 Debian 12; Bun 런타임은 OpenCode 번들 |
| 백업 | ~/.local/share/opencode/ 정기 백업 |
하이브리드: VPS + 클라우드 Mac
리뷰에 iOS / Xcode 빌드 검증이 포함되면 Linux VPS 메모리를 아무리 늘려도 xcodebuild는 안 됩니다. 두 가지 일반적 하이브리드 구성:
- Linux VPS(8GB)에서
opencode serve로 범용 코드 리뷰 - 클라우드 Mac mini(16GB+)에서 MCP 또는 webhook으로 iOS 전용 리뷰
Claude Code 메모리 선정 벤치마크에서 M4 Mac mini 각 단계를 상세 테스트——OpenCode의 에이전트 자식 프로세스 모델은 Claude Code와 높은 유사성, 결론 상호 참고 가능.
5분 배포 체크리스트
# 1. OpenCode 설치
curl -fsSL https://opencode.ai/install | bash
# 2. API Key 설정(env-file 권장, 명령줄 평문 금지)
cat > /etc/opencode.env <<'EOF'
ANTHROPIC_API_KEY=sk-ant-...
OPENCODE_SERVER_PASSWORD=your-strong-password
OPENCODE_SERVER_USERNAME=review-bot
EOF
# 3. systemd 서비스 생성
sudo tee /etc/systemd/system/opencode-serve.service <<'EOF'
[Unit]
Description=OpenCode Review Server
After=network.target
[Service]
EnvironmentFile=/etc/opencode.env
ExecStart=/usr/local/bin/opencode serve --hostname 127.0.0.1 --port 4096
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 4. 시작
sudo systemctl enable --now opencode-serve
# 5. Nginx 리버스 프록시(선택, HTTPS 추가)
# location /opencode/ { proxy_pass http://127.0.0.1:4096/; }
단계별 선정 요약표
| 상황 | 권장 구성 | 월 비용 |
|---|---|---|
| 개인, 가끔 작은 PR 리뷰 | 4GB VPS(온디맨드) | $4–8 |
| 2–5인 팀, 단일 저장소 | 8GB VPS | $12–24 |
| 5인+ 팀, 다중 저장소 병행 | 16GB VPS | $24–48 |
| iOS/Xcode 리뷰 포함 | 16GB 클라우드 Mac mini | 시간/월 과금 |
| 고보안(코드 미출망) | 16GB 온프레미스 + 로컬 모델 | 하드웨어 일시비 |
결론
OpenCode Review 로컬 배포의 메모리 병목은 opencode serve 자체가 아니라 리뷰 시 에이전트가 기동하는 git, LSP, 테스트, MCP 자식 프로세스에 있습니다. 4GB는 동작하지만 답답함; 8GB는 소규모 팀 최소선; 16GB는 프로덕션의 편한 선택. iOS 코드 리뷰나 Xcode MCP도 필요하면 클라우드 Mac mini를 검토——Linux VPS 메모리 증설로는 xcodebuild가 해결되지 않습니다.