diff --git a/README.md b/README.md index 9f53598..e58c8f2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,163 @@ # msa-django-nhn -python3 manage.py runserver 0.0.0.0:8900 \ No newline at end of file +NHN Cloud 리소스 관리를 위한 통합 API 서비스입니다. + +## 기술 스택 + +| 분류 | 기술 | +|------|------| +| Framework | Django 4.2.14 | +| API | Django REST Framework 3.16.0 | +| Auth | SimpleJWT 5.5.0 (RS256) | +| Database | MySQL (mysqlclient 2.2.7) | +| Docs | drf-yasg 1.21.10 | +| Server | Gunicorn 20.1.0 | + +## 지원 서비스 + +- **Compute**: 인스턴스, Flavor, Keypair, 이미지 +- **VPC**: VPC, 서브넷, Floating IP, 보안 그룹 +- **NKS**: Kubernetes 클러스터, 노드 그룹 +- **Storage**: Object Storage 컨테이너 +- **DNS Plus**: Zone, 레코드셋, GSLB, Pool, 헬스체크 +- **Load Balancer**: LB, 리스너, 풀, 멤버, L7 정책 + +## API 엔드포인트 + +### Token + +| Method | Endpoint | 설명 | +|--------|----------|------| +| POST | `/api/nhn/token/` | 토큰 생성 | + +### Compute + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET | `/api/nhn/compute/instances/` | 인스턴스 목록 | +| POST | `/api/nhn/compute/instances/create/` | 인스턴스 생성 | +| GET | `/api/nhn/compute/instances//` | 인스턴스 상세 | +| POST | `/api/nhn/compute/instances//action/` | 인스턴스 액션 | +| GET | `/api/nhn/compute/flavors/` | Flavor 목록 | +| GET | `/api/nhn/compute/keypairs/` | Keypair 목록 | +| GET | `/api/nhn/compute/images/` | 이미지 목록 | + +### VPC/Network + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET/POST | `/api/nhn/vpc/` | VPC 목록/생성 | +| GET | `/api/nhn/vpc//` | VPC 상세 | +| GET/POST | `/api/nhn/subnet/` | 서브넷 목록/생성 | +| GET | `/api/nhn/floatingip/` | Floating IP 목록 | +| GET | `/api/nhn/securitygroup/` | 보안 그룹 목록 | + +### NKS (Kubernetes) + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET | `/api/nhn/nks/clusters/` | 클러스터 목록 | +| POST | `/api/nhn/nks/clusters/create/` | 클러스터 생성 | +| GET | `/api/nhn/nks/clusters//` | 클러스터 상세 | +| GET | `/api/nhn/nks/clusters//config/` | kubeconfig | +| GET | `/api/nhn/nks/clusters//nodegroups/` | 노드 그룹 목록 | +| POST | `/api/nhn/nks/clusters//nodegroups/create/` | 노드 그룹 생성 | + +### DNS Plus + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET/POST | `/api/nhn/dns/zones/` | Zone 목록/생성 | +| GET/POST | `/api/nhn/dns/zones//recordsets/` | 레코드셋 | +| GET/POST | `/api/nhn/dns/gslbs/` | GSLB 목록/생성 | +| GET/POST | `/api/nhn/dns/pools/` | Pool 목록/생성 | +| GET/POST | `/api/nhn/dns/health-checks/` | 헬스체크 | + +### Load Balancer + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET/POST | `/api/nhn/lb/loadbalancers/` | LB 목록/생성 | +| GET/POST | `/api/nhn/lb/listeners/` | 리스너 | +| GET/POST | `/api/nhn/lb/pools/` | 풀 | +| GET/POST | `/api/nhn/lb/pools//members/` | 멤버 | +| GET/POST | `/api/nhn/lb/healthmonitors/` | 헬스 모니터 | +| GET/POST | `/api/nhn/lb/l7policies/` | L7 정책 | + +### Async Task + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET | `/api/nhn/tasks/` | 비동기 작업 목록 | +| GET | `/api/nhn/tasks//` | 작업 상세 | + +### API 문서 + +- Swagger UI: `/swagger/` + +## 프로젝트 구조 + +``` +nhn/ +├── views.py # API 뷰 (40개 이상) +├── models.py # AsyncTask 모델 +├── urls.py # URL 라우팅 +├── serializers.py # DRF 직렬화 +├── authentication.py # JWT 인증 +└── packages/ # NHN Cloud API 클라이언트 + ├── base.py # 기본 클래스, 엔드포인트 + ├── token.py # Token API + ├── compute.py # Compute API + ├── vpc.py # VPC API + ├── nks.py # NKS API + ├── storage.py # Storage API + ├── dnsplus.py # DNS Plus API + └── loadbalancer.py # LB API +``` + +## 환경 변수 + +```env +# Django +DEBUG=1 +SECRET_KEY=your-secret-key +ISTIO_JWT=1 + +# Database +SQL_ENGINE=django.db.backends.mysql +SQL_HOST=localhost +SQL_USER=user +SQL_PASSWORD=password +SQL_DATABASE=msa-nhn +SQL_PORT=3306 +``` + +## 요청 헤더 + +NHN Cloud API 호출 시 다음 헤더가 필요합니다: + +| 헤더 | 설명 | +|------|------| +| X-NHN-Token | NHN Cloud API 토큰 | +| X-NHN-Region | 리전 (kr1, kr2, jp1) | +| X-NHN-Tenant-ID | 테넌트 ID | +| X-NHN-Appkey | DNS Plus Appkey (DNS API용) | + +## 실행 방법 + +### 개발 서버 + +```bash +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +python3 manage.py migrate +python3 manage.py runserver 0.0.0.0:8900 +``` + +### Docker + +```bash +docker build -t msa-django-nhn . +docker run -p 8000:8000 --env-file .env.dev msa-django-nhn +``` diff --git a/version b/version index 6183501..ba00537 100644 --- a/version +++ b/version @@ -1 +1 @@ -v0.0.9 \ No newline at end of file +v0.0.10 \ No newline at end of file