# 프로젝트 : 환경(Environments)

## 개요

Environments 페이지는 프로젝트의 환경(dev, staging, production 등)을 관리하고 각 환경의 배포 상태를 확인할 수 있는 페이지입니다. 각 환경은 독립적인 데이터베이스 클러스터와 리전을 가지며, 환경별로 다른 설정과 데이터를 유지할 수 있습니다.

**경로**: `/org/{orgSlug}/project/{projectSlug}/environments`

## 주요 기능

### 1. 환경 목록 조회

**표시 정보**:

- 환경 이름

- 환경 타입 배지 (개발, 스테이징, 프로덕션, 커스텀)

- 배포 상태 배지 (생성 중, 준비됨, 활성, 실패, 삭제 중)

- 클라우드 제공자 (AWS, GCP, Azure)

- 리전 정보

- 클러스터 정보 (staging/prod 환경에만 표시)

- 생성일

- 에러 메시지 (배포 실패 시)

**환경 분류**:

- **프로덕션 환경**: 별도 섹션으로 상단에 표시

- **기타 환경**: 그리드 형태로 표시 (최대 3열)

### 2. 환경 생성 (현재 비활성화)

현재 Beta에서는 dev 환경 1개만 사용 가능하며, 환경 생성 기능은 비활성화되어 있습니다.

**생성 대화상자 필드**:

- **환경 이름**: 1-50자, 소문자와 숫자만 사용 가능

    - 예: dev, staging, production, qa1, preview-feature

- **환경 타입**:

    - **개발**: 공유 클러스터 사용 (즉시 생성)

    - **스테이징**: 전용 클러스터 사용 (2-5분 프로비저닝)

    - **프로덕션**: 전용 클러스터 사용 (2-5분 프로비저닝)

    - **커스텀**: 사용자 정의 타입

### 3. 환경 삭제 (현재 비활성화)

각 환경 카드의 우측 상단 메뉴를 통해 삭제할 수 있으나, 현재는 비활성화되어 있습니다.

**삭제 확인 대화상자**:

- 환경 이름 표시

- "이 작업은 취소할 수 없으며, 모든 데이터가 영구적으로 삭제됩니다" 경고

- 확인/취소 버튼

### 4. 배포 상태 표시

**상태 타입**:

- **생성 중**: 환경 프로비저닝 중 (파란색, 시계 아이콘)

- **준비됨**: 프로비저닝 완료, 사용 가능 (하늘색, 체크 아이콘)

- **활성**: 정상 작동 중 (녹색, 체크 아이콘)

- **실패**: 배포 실패 (빨간색, X 아이콘)

- **삭제 중**: 환경 삭제 중 (회색, 시계 아이콘)

### 5. 클러스터 정보 표시

**staging/prod 환경에만 표시**:

- 클러스터 이름

- 클러스터 타입 (FLEX_SHARED, FLEX, REPLICASET, SHARDED, GEOSHARDED)

**dev 환경**: 공유 클러스터를 사용하므로 클러스터 정보가 표시되지 않습니다.

## 환경 유형

### 1. 개발 (dev)

- **용도**: 개발 및 테스트

- **클러스터**: 공유 클러스터 사용

- **프로비저닝**: 즉시 생성

- **배지 색상**: 파란색

### 2. 스테이징 (staging)

- **용도**: 프로덕션 배포 전 최종 테스트

- **클러스터**: 전용 클러스터 사용

- **프로비저닝**: 2-5분 소요

- **배지 색상**: 주황색

### 3. 프로덕션 (prod)

- **용도**: 실제 서비스 운영

- **클러스터**: 전용 클러스터 사용

- **프로비저닝**: 2-5분 소요

- **배지 색상**: 녹색

- **특징**: 별도 섹션으로 상단에 표시

### 4. 커스텀 (custom)

- **용도**: 사용자 정의 환경

- **클러스터**: 설정에 따라 다름

- **배지 색상**: 보라색

## 사용 방법

### 환경 목록 확인하기

1. 프로젝트 선택 후 좌측 메뉴에서 "환경 관리" 클릭

2. 환경 목록에서 각 환경의 상태 확인

3. 배포 상태 배지를 통해 현재 상태 파악

4. 클러스터 정보를 통해 인프라 구성 확인

## 현재 제약사항

※ 현재 Beta에서는 dev 환경 1개만 사용 가능합니다.

### 클러스터 표시 규칙

- **dev 환경**: 공유 클러스터 사용으로 클러스터 정보 표시 안 함

- **staging/prod 환경**: 전용 클러스터 정보 표시

- 경고 아이콘과 함께 상세 오류 내용 제공

## 기술 정보

### API 엔드포인트

- **목록 조회**: `GET /projects/{projectId}/environments`

- **생성**: `POST /projects/{projectId}/environments/{environment}`

- **조회**: `GET /projects/{projectId}/environments/{environment}`

- **수정**: `PUT /projects/{projectId}/environments/{environment}`

- **삭제**: `DELETE /projects/{projectId}/environments/{environment}`

### 데이터 구조

```
interface EnvironmentDTO {
  id: string
  projectId: string
  environment: string
  environmentType: 'dev' | 'prod' | 'staging' | 'custom'
  isCustom: boolean
  cloud: 'aws' | 'gcp' | 'azu'
  region: string
  deployment: {
    status: 'creating' | 'ready' | 'active' | 'failed' | 'deleting'
    createdAt?: string
    readyAt?: string
    activeAt?: string
    failedAt?: string
    errorMessage?: string
    estimatedReadyTime?: number
  }
  clusterAssignment?: {
    clusterName: string
    clusterType: string
    region: string
    cloud: string
    // ... 기타 클러스터 정보
  }
  createdAt: string
  updatedAt: string
}
```

### 상태 관리

- **TanStack Query** 사용

- 자동 캐싱 및 재검증

- 낙관적 업데이트 적용

- 에러 자동 처리

- 환경 목록 조회

- 배포 상태 확인

- 클러스터 정보 확인

For the site tree, see the [root Markdown](https://slashpage.com/bkend.md).
