SoftBank Hackathon 2026 · team camellia · One Action, Infinite Clouds.
각 구성원의 주 담당 도메인을 기준으로 정리했습니다. 설계·리뷰·통합 작업은 팀 전체가 함께 수행했습니다.
| Contributor | Primary Domain | Key Contributions |
|---|---|---|
![]() 이정 TEAM LEAD @Pionia5375 |
Product · System Architecture · Control Plane | 제품·시스템 설계와 기술 의사결정, 규칙·AI 분석기와 IR, Fastify API, PostgreSQL Job Queue, 배포 상태 머신·오케스트레이션 |
![]() 조서현 @csh1668 |
Cloud Infrastructure · Platform Operations | AWS 배포 프로필과 플랫폼 인프라, Terraform 상태·캐시·롤아웃 최적화, 플랫폼 배포·운영 관측 |
![]() 안우진 @awj1052 |
Authentication · API Security | 운영 환경 API Key 검증, Session·Bearer 인증, 인증 실패 시 차단하는 보안 정책 |
![]() 신은영 @gpffh20 |
Build · Provisioning · Deployment Engine | IR Adapter, Docker Buildx·ECR 이미지 파이프라인, Terraform ECS 프로비저닝, Cloudflare·Agent Job 연동 |
![]() 김민성 @minseong99 |
Frontend · Product UX | React Web Console, 프로젝트·배포·환경 전환 UX, 실시간 진행 상태와 결과 화면, 한국어·일본어 지원 |
![]() 김민서 @kmsdevdata-sketch |
Verification · On-Prem Runtime · Failover | 후보 Endpoint·최종 URL 검증, On-Prem Agent와 Compose·Tunnel 실행, 복구·정리 정책, 장애 감지·AWS Failover |
사용자가 자신의 앱을 본인의 클라우드, 온프레미스 등의 다양한 환경에 배포하고, 그 사이를 자유롭게 전환하는 배포 시스템
API 서버는 배포 상태를 저장하고 PostgreSQL 기반 Job Queue에 작업을 등록하며, Worker가 각 단계를 순차적으로 실행합니다.
배포 프로필은 애플리케이션의 실행 특성과 배포 환경의 차이를 처리하기 위한 인프라 구성 템플릿입니다. 상시 실행 웹 서비스, 서버리스 웹, 정적 사이트, 온프레미스 배포를 지원하며, 공통 배포 명세(IR)를 각 환경에 필요한 인프라와 실행 설정으로 구체화합니다. 사용자는 환경별 구성 방식을 직접 다루지 않고도 동일한 흐름으로 배포하고 결과를 검증할 수 있습니다.
Auto-Deployment-System/
│
├── apps/
│ ├── web/ # React 기반 사용자 콘솔
│ │ ├── 배포 요청 및 프로젝트 관리
│ │ ├── AWS·On-Prem 환경 선택 및 전환
│ │ └── 배포 진행 상태·검증 결과 표시
│ │
│ ├── api/ # Fastify API 서버
│ │ ├── 배포·프로젝트·환경 API
│ │ ├── 상태 저장 및 Job 생성
│ │ └── On-Prem Agent 인증·통신
│ │
│ ├── worker/ # 비동기 배포 오케스트레이터
│ │ ├── Analyze
│ │ ├── Build
│ │ ├── Provision
│ │ ├── Deploy
│ │ ├── Verify
│ │ ├── Origin 전환·복구
│ │ └── On-Prem 장애 감지·Failover
│ │
│ ├── onprem-agent/ # 사용자 로컬 환경의 배포 에이전트
│ │ ├── Job polling·Heartbeat
│ │ ├── ECR 이미지 Pull
│ │ ├── Docker Compose 실행
│ │ ├── 로컬 헬스체크
│ │ └── Cloudflare Named Tunnel 실행
│ │
│ └── samples/ # 배포·마이그레이션 검증용 예제 앱
│
├── packages/
│ ├── analyzer/ # 규칙 기반 분석 및 AI 보강
│ ├── ir-schema/ # 환경 중립 IR 타입·검증 규칙
│ ├── profile-matcher/ # IR과 배포 프로필 매칭
│ ├── profiles/ # ECS·Lambda·Static·On-Prem 프로필
│ ├── adapters/ # IR → 환경별 배포 계획 변환
│ ├── build-handler/ # 컨테이너 이미지 빌드 처리
│ ├── aws-registry/ # ECR 저장소·이미지 관리
│ ├── cloudflare/ # DNS·CNAME·Tunnel 제어
│ ├── db/ # PostgreSQL 스키마·마이그레이션
│ ├── contracts/ # API·Job 공유 타입과 Zod 계약
│ └── storage/ # 소스 및 배포 산출물 저장
│
├── infra/
│ ├── terraform/ # 사용자 AWS 인프라 프로비저닝
│ │ ├── VPC
│ │ ├── ECS Fargate
│ │ ├── Lambda
│ │ ├── S3
│ │ ├── ALB
│ │ └── RDS
│ │
│ └── platform/ # Camellia 플랫폼 자체 배포 구성
│
├── tests/
│ └── e2e/ # 전체 배포 흐름 종단 테스트
│
├── docs/
│ └── design/ # 시스템·기능 설계 문서
│
└── tools/
└── diag/ # 배포 환경 진단 도구
로컬 개발 환경 실행 방법 펼쳐보기
- Node.js 20.19+ 또는 22.12+
- pnpm 9.12+
- Docker Desktop
git clone https://github.com/2026-Softbank-hackerton/Auto-Deployment-System.git
cd Auto-Deployment-System
pnpm installmkdir -p credentials storagecredentials/local.env 파일을 생성합니다.
DATABASE_URL=postgres://camellia:camellia@localhost:5433/camellia
PORT=3000
STORAGE_ROOT_DIR=/absolute/path/to/Auto-Deployment-System/storage
SECRET_MASTER_KEY=<base64-encoded-32-byte-key>
NODE_ENV=development
LOG_LEVEL=info마스터 키는 다음 명령으로 생성합니다.
openssl rand -base64 32환경변수를 현재 셸에 적용합니다.
set -a
source credentials/local.env
set +a동일한
SECRET_MASTER_KEY를 계속 사용해야 저장된 Secret을 다시 복호화할 수 있습니다.
pnpm db:up
pnpm db:migratepnpm devAPI 서버는 http://localhost:3000에서 실행됩니다.
새 터미널에서 실행합니다.
pnpm --filter camellia-web dev브라우저에서 http://localhost:5173으로 접속합니다.
| 기능 | 요구사항 |
|---|---|
| AWS 배포 | 콘솔에 등록한 AWS 자격 증명, Terraform |
| 이미지 빌드 | Docker·BuildKit 실행 환경 |
| 고정 URL·환경 전환 | Cloudflare Token·Zone·Account |
| On-Prem 배포 | Camellia Agent와 Docker |
| AI 분석 보강 | Anthropic API Key |
Camellia는 개별 모듈 테스트뿐 아니라 실서비스 API와 실제 AWS·On-Prem 런타임을 사용해 전체 배포 흐름을 검증했습니다.
| Area | Verified Scenarios |
|---|---|
| Source Analysis & IR | Node.js, FastAPI, PostgreSQL, Multi-Service, Static Site 분석과 유효한 IR 생성 |
| API & State Machine | 프로젝트·환경·시크릿·배포 API 계약, 승인과 상태 전이, IR 버전 충돌 처리 |
| Build & Provisioning | 이미지 빌드·digest 고정, ECR Push/Pull, Terraform 기반 AWS 리소스 생성 |
| On-Prem Agent | 등록 토큰, Agent 인증, Heartbeat, Job Claim·Lease, 취소와 재시작 복구 |
| Verification | 후보 Endpoint 헬스체크, 최종 공개 URL 검증, Verify Job 멱등성 |
| Environment Switching | AWS → On-Prem, On-Prem → AWS 전환과 동일 이미지 digest 확인 |
| Failure Recovery | 검증 실패 시 기존 Origin 유지, 환경 락 해제와 후보 배포 정리 |
| Concurrency | AWS·On-Prem 혼합 동시 배포, 동일 프로젝트 중복 배포 차단 |
| Performance | 신규·재배포 시간, API 응답시간, Queue 대기와 전체 배포 완료시간 |
2026-10-02 · 실서비스 API와 실제 AWS/On-Prem 환경에서 측정
| Result | Measurement |
|---|---|
| 테스트 시나리오 | 13종 |
| 반복 실행 | 35회 |
| 실제 배포 | 61건 |
| 예상 결과 일치 | 60 / 61건 |
| 공개 Health Check | 20 / 20 성공 · P95 144ms |
| AWS 동일 이미지 재배포 | 중앙값 20.32초 |
| On-Prem 동일 이미지 재배포 | 중앙값 19.91초 |
| 혼합 환경 5건 동시 요청 | 10 / 10 성공 |
| AWS ↔ On-Prem 전환 | 6 / 6 성공 |
| 검증 실패·기존 서비스 유지 | 3 / 3 성공 |
| 전환 과정에서 확인된 digest | 1개 · 동일 이미지 재사용 |
| 테스트 종료 후 잔여 환경 락 | 0개 |
동일 프로젝트에 동시에 들어온 배포 요청은 한 건만 접수하고 나머지는 409 Conflict로 차단했으며, 작업 완료 후 모든 환경 락이 정상적으로 해제되는 것을 확인했습니다.
검증에 실패한 후보 배포 3건은 모두 실패로 판정되었고, 기존 서비스는 HTTP 200 상태로 유지되었습니다.
Known Limitation
On-Prem 동시 배포는 6건 중 5건이 성공했습니다. 실패한 1건은 Agent 실행 이후 검증 단계에서 발생한 DNS 조회 오류였으며, 애플리케이션 실행이나 환경 락 누수 문제는 아니었습니다.
| Document | Description |
|---|---|
| Architecture Decisions | 주요 기술 선택과 트레이드오프, 변경 이력 |
| IR Specification | 환경 중립 IR 구조와 컴포넌트 간 계약 |
| On-Prem & Cloudflare API | Agent Job, Named Tunnel과 Origin 전환 흐름 |
| Platform Deployment | Camellia 플랫폼 자체 배포와 운영 구성 |
| Performance Test Design | 성능·동시성·복원력 테스트 설계와 판정 기준 |
| Full Test Report | 시나리오별 실제 측정값과 상세 분석 |
| Frontend Design Specification | Web Console 디자인과 상태 표현 기준 |






