1. 프로비저닝 속도의 혁신: 스냅샷과 사전 준비된 풀
초기 구축 단계에서 cloud-init을 사용한 방식은 약 5분 이상의 시간이 소요되어 사용자 경험을 저해했습니다. 이를 해결하기 위해 두 가지 핵심 전략을 도입했습니다.
- Hetzner 스냅샷 활용: Ubuntu 24.04 환경에 Docker, OpenClaw 이미지, Playwright 브라우저 등을 미리 설치한 상태로 스냅샷을 생성했습니다. 이를 통해 신규 인스턴스 생성 시 설치 시간을 60초 이내로 단축했습니다.
- Prewarmed VPS Pool: 사용자의 요청이 있기 전, 백그라운드 작업(
PrewarmReplenishJob)을 통해 미리 부팅된 VPS 인스턴스들을 풀(Pool) 형태로 유지합니다. 사용자가 생성을 클릭하면 이미 준비된 서버를 즉시 할당하여 실제 체감 대기 시간을 15~20초 수준으로 줄였습니다.
2. 철저한 4계층 보안 모델
사용자가 루트 권한으로 컨테이너 내에서 임의의 코드를 실행할 수 있는 환경이므로, 다중 보안 계층을 설계했습니다.
- Hetzner Cloud Firewall: 네트워크 수준에서 프로덕션 서버의 IP만 접근을 허용하도록 제어합니다.
- Host iptables: 스냅샷에 내장된 규칙을 통해 SMTP, IRC 등 스팸 및 봇넷 공격에 악용될 수 있는 아웃바운드 포트를 차단합니다.
- fail2ban 및 Key-Only SSH: 비밀번호 인증을 비활성화하고 공개키 기반 인증만 허용하며, 무차별 대입 공격을 방어합니다.
- Docker Daemon Hardening:
no-new-privileges설정과 로그 로테이션, 파일 디스크립터 제한 등을 통해 컨테이너 탈출 및 자원 고갈 공격을 방지합니다.
3. 사용자 변경 사항 보존을 위한 Container Commit
Docker 컨테이너는 재시작 시 내부 데이터가 유실되는 특성이 있습니다. ClawHosters는 이를 해결하기 위해 CommitContainerService를 구현했습니다.
- 상태 저장: 사용자가 패키지를 설치하거나 시스템을 변경한 후, 인스턴스를 재배포하기 직전에
docker commit명령을 실행하여 현재 상태를 새로운 이미지로 저장합니다. - 영속성 유지: 다음 배포 시 기본 이미지 대신 해당 사용자 전용 이미지를 사용하여 컨테이너를 구동함으로써, 사용자의 커스터마이징 내역이 그대로 유지되도록 설계했습니다.
4. Traefik과 Redis를 활용한 동적 라우팅
수많은 서브도메인을 실시간으로 관리하기 위해 설정 파일 수정이나 리로드 없이 동작하는 인프라를 구축했습니다.
- 실시간 라우팅: Traefik이 Redis를 감시하도록 설정하여, 신규 인스턴스가 생성될 때 Redis에 라우팅 정보를 기록하면 즉시 트래픽이 해당 VPS로 전달됩니다.
- 인증 및 프록시: 각 인스턴스별로 HTTP Basic Auth를 적용하고, 메인 서버의 Traefik이 각 고객의 VPS로 트래픽을 안전하게 프록시합니다. 이는 설정의 유연성과 확장성을 동시에 확보한 핵심 설계입니다.