# KT Event Marketing - CI/CD Infrastructure

이 디렉토리는 KT Event Marketing 백엔드 서비스의 CI/CD 인프라를 포함합니다.

## 디렉토리 구조

```
.github/
├── README.md                          # 이 파일
├── workflows/
│   └── backend-cicd.yaml             # GitHub Actions 워크플로우
├── kustomize/                         # Kubernetes 매니페스트 관리
│   ├── base/                         # 기본 리소스 정의
│   │   ├── kustomization.yaml
│   │   ├── cm-common.yaml
│   │   ├── secret-common.yaml
│   │   ├── secret-imagepull.yaml
│   │   ├── ingress.yaml
│   │   └── {service}-*.yaml         # 각 서비스별 리소스
│   └── overlays/                     # 환경별 설정
│       ├── dev/
│       │   ├── kustomization.yaml
│       │   └── *-patch.yaml         # 1 replica, 256Mi-1024Mi
│       ├── staging/
│       │   ├── kustomization.yaml
│       │   └── *-patch.yaml         # 2 replicas, 512Mi-2048Mi
│       └── prod/
│           ├── kustomization.yaml
│           └── *-patch.yaml         # 3 replicas, 1024Mi-4096Mi
├── config/
│   ├── deploy_env_vars_dev          # Dev 환경 변수
│   ├── deploy_env_vars_staging      # Staging 환경 변수
│   └── deploy_env_vars_prod         # Prod 환경 변수
└── scripts/
    ├── deploy.sh                     # 수동 배포 스크립트
    ├── generate-patches.sh           # 패치 파일 생성 스크립트
    └── copy-manifests-to-base.py    # 매니페스트 복사 스크립트
```

## 주요 파일 설명

### workflows/backend-cicd.yaml
GitHub Actions 워크플로우 정의 파일입니다.

**트리거**:
- develop 브랜치 push → dev 환경 배포
- main 브랜치 push → prod 환경 배포
- Manual workflow dispatch → 원하는 환경과 서비스 선택

**Jobs**:
1. `detect-changes`: 변경된 서비스 감지
2. `build-and-push`: 서비스 빌드 및 ACR 푸시
3. `deploy`: AKS에 배포
4. `notify`: 배포 결과 알림

### kustomize/base/kustomization.yaml
모든 환경에서 공통으로 사용하는 기본 리소스를 정의합니다.

**포함 리소스**:
- Common ConfigMaps and Secrets
- Ingress
- 7개 서비스의 Deployment, Service, ConfigMap, Secret

### kustomize/overlays/{env}/kustomization.yaml
환경별 설정을 오버라이드합니다.

**주요 차이점**:
- 이미지 태그 (dev/staging/prod)
- Replica 수 (1/2/3)
- 리소스 할당량 (작음/중간/큼)

### scripts/deploy.sh
로컬에서 수동 배포를 위한 스크립트입니다.

**사용법**:
```bash
# 모든 서비스를 dev 환경에 배포
./scripts/deploy.sh dev

# 특정 서비스만 prod 환경에 배포
./scripts/deploy.sh prod user-service
```

## 배포 프로세스

### 자동 배포 (GitHub Actions)

1. **Dev 환경**:
   ```bash
   git checkout develop
   git push origin develop
   ```

2. **Prod 환경**:
   ```bash
   git checkout main
   git merge develop
   git push origin main
   ```

3. **수동 배포**:
   - GitHub Actions UI → Run workflow
   - Environment 선택 (dev/staging/prod)
   - Service 선택 (all 또는 특정 서비스)

### 수동 배포 (로컬)

```bash
# 사전 요구사항: Azure CLI, kubectl, kustomize 설치
# Azure 로그인 필요

# Dev 환경에 모든 서비스 배포
./.github/scripts/deploy.sh dev

# Prod 환경에 user-service만 배포
./.github/scripts/deploy.sh prod user-service
```

## 환경별 설정

| 환경 | 브랜치 | 이미지 태그 | Replicas | CPU Request | Memory Request |
|------|--------|-------------|----------|-------------|----------------|
| Dev | develop | dev | 1 | 256m | 256Mi |
| Staging | manual | staging | 2 | 512m | 512Mi |
| Prod | main | prod | 3 | 1024m | 1024Mi |

## 서비스 목록

1. **user-service** (8081) - 사용자 관리
2. **event-service** (8082) - 이벤트 관리
3. **ai-service** (8083) - AI 기반 콘텐츠 생성
4. **content-service** (8084) - 콘텐츠 관리
5. **distribution-service** (8085) - 경품 배포
6. **participation-service** (8086) - 이벤트 참여
7. **analytics-service** (8087) - 분석 및 통계

## 모니터링

### Pod 상태 확인
```bash
kubectl get pods -n kt-event-marketing
```

### 로그 확인
```bash
# 실시간 로그
kubectl logs -n kt-event-marketing -l app=user-service -f

# 이전 컨테이너 로그
kubectl logs -n kt-event-marketing <pod-name> --previous
```

### 리소스 사용량
```bash
# Pod 리소스
kubectl top pods -n kt-event-marketing

# Node 리소스
kubectl top nodes
```

## 트러블슈팅

상세한 트러블슈팅 가이드는 [deployment/cicd/CICD-GUIDE.md](../../deployment/cicd/CICD-GUIDE.md)를 참조하세요.

**주요 문제 해결**:
- ImagePullBackOff → ACR Secret 확인
- CrashLoopBackOff → 로그 확인 및 환경 변수 검증
- Readiness Probe Failed → Context Path 및 Actuator 경로 확인

## 롤백

```bash
# 이전 버전으로 롤백
kubectl rollout undo deployment/user-service -n kt-event-marketing

# 특정 리비전으로 롤백
kubectl rollout undo deployment/user-service --to-revision=2 -n kt-event-marketing
```

## 참고 자료

- [CI/CD 가이드 (한글)](../../deployment/cicd/CICD-GUIDE.md)
- [GitHub Actions 공식 문서](https://docs.github.com/en/actions)
- [Kustomize 공식 문서](https://kustomize.io/)
- [Azure AKS 공식 문서](https://docs.microsoft.com/en-us/azure/aks/)
