# 프로젝트 : 데이터베이스(Database)

## 개요

Database 페이지는 프로젝트의 데이터베이스 테이블을 생성하고 관리하는 기능을 제공합니다. 테이블 스키마 설계, 인덱스 관리, 권한 설정, 데이터 조회, API 문서 확인 등 데이터베이스 관련 모든 작업을 수행할 수 있습니다.

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

## 주요 기능

### 1. 환경 선택

**표시 정보**:

- 환경별 탭 (dev, staging, production 등)

- 각 환경의 배포 상태 배지 (active, ready, creating, failed)

- 클라우드 제공자 및 리전 정보

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

**동작**:

- 환경 선택 시 해당 환경의 테이블 목록 자동 갱신

- 첫 진입 시 active 상태의 환경 자동 선택

### 2. 테이블 목록

**표시 정보**:

- 테이블명

- 배포 상태 (deployed, deploying, updating, failed)

- 행 수 (1K, 1M 등으로 포맷팅)

- 마지막 수정일

**기능**:

- 테이블 검색 (테이블명으로 필터링)

- 새로고침 버튼

- 테이블 클릭 시 상세 페이지 이동

- 테이블별 액션 메뉴:

    - "테이블 보기": 상세 페이지 이동

    - "테이블 삭제": 삭제 다이얼로그 (아직 구현 중)

### 3. 테이블 생성

**시스템 필드** (자동 생성, 수정 불가):

- `_id`: 고유 식별자 (String, 필수)

- `createdBy`: 생성자 (String, 필수)

- `createdAt`: 생성 시각 (Date, 필수)

- `updatedAt`: 수정 시각 (Date, 필수)

**사용자 정의 필드**:

- 필드명: 문자로 시작, 문자/숫자/언더스코어만 사용

- 타입: String, Number, Boolean, Date, Array, Object, Mixed

- 필수 여부 체크박스

- 여러 필드 추가 가능

**기본 권한** (자동 설정):

- admin: 생성, 읽기, 수정, 삭제 모두 허용

- user: 생성, 읽기, 수정 허용 (삭제 불가)

- self: 읽기, 수정 허용 (생성, 삭제 불가)

- guest: 읽기만 허용

## 하위 페이지

### [tableName] 페이지

테이블 상세 페이지는 다음 탭으로 구성됩니다:

### 1. 데이터 탭

**기능**:

- 테이블 레코드 조회

- 페이지네이션 (10/20/50/100행 선택 가능)

- 컬럼별 정렬 (오름차순/내림차순)

- 셀 데이터 복사 (클릭하여 클립보드 복사)

- 긴 텍스트 자동 축약 (100자 이상)

- 툴팁으로 전체 내용 확인

- 날짜/객체/배열 자동 포맷팅

**빈 상태**:

- "데이터 없음" - 테이블에 레코드가 없을 때

- "데이터 로드 실패" - 에러 발생 시 재시도 버튼 제공

### 2. 스키마 탭

**필드 관리**:

- 현재 스키마 버전 표시 (예: v1, v2)

- 필드 목록 테이블:

    - 필드명

    - 타입 (아이콘과 함께 표시)

    - 필수 여부 (✓ 또는 -)

    - 고유 여부 (✓ 또는 -)

    - 기본값 (설정된 경우만 표시)

**필드 작업** (시스템 필드 제외):

- "필드 추가": 새 필드 정의

- "필드 수정": 기존 필드 변경

- "필드 삭제": 필드 제거 (확인 필요)

**고급 옵션**:

- 불변 필드 설정

- 최소/최대 길이 (문자열)

- 최소/최대값 (숫자)

**버전 관리**:

- "이력" 버튼: 스키마 버전 히스토리 확인

- 이전 버전으로 롤백 기능

- 버전별 생성 시각 및 생성자 표시

**시스템 필드**: _id, createdBy, createdAt, updatedAt는 수정/삭제 불가

### 3. 인덱스 탭

**인덱스 관리**:

- 현재 인덱스 버전 표시

- 인덱스 목록:

    - 인덱스명

    - 포함 필드 (ASC/DESC 표시)

    - 고유 인덱스 여부

    - 희소 인덱스 여부

**인덱스 생성**:

- 인덱스명 입력

- 여러 필드 선택 가능 (복합 인덱스)

- 필드별 정렬 방향 선택

- 고유 인덱스 옵션: 중복 값 방지 (예: 이메일, 주문번호)

- 희소 인덱스 옵션: 필드가 있는 레코드만 인덱싱

**버전 관리**:

- 인덱스 변경 이력 확인

- 이전 버전으로 롤백

**시스템 인덱스**: _id_ 인덱스 및 시스템 필드 인덱스는 삭제 불가

### 4. 권한 탭

**역할별 권한 관리**:

- 제공되는 역할: admin, self, user, guest

- CRUD 권한 설정:

    - 생성 (create)

    - 읽기 (read)

    - 수정 (update)

    - 삭제 (delete)

**기본 권한 설정**:

- **admin**: 모든 권한 (create, read, update, delete)

- **self**: 개발자 테스트용 역할

- **user**: 생성, 읽기, 수정 권한

- **guest**: 읽기 권한만

**작업 흐름**:

1. 체크박스로 권한 변경

2. 변경 사항 경고 메시지 표시

3. "저장" 버튼으로 적용 또는 "재설정" 버튼으로 취소

4. 저장 완료 토스트 메시지

※ Beta 버전에서는 역할 추가/삭제 기능은 제공되지 않습니다.

### 5. API 탭

**API 문서**:

- 기본 URL 표시 및 복사 기능

- 인증 정보:

    - Authorization: Bearer 토큰

    - X-Project-Id: 프로젝트 ID

    - X-Environment: 환경명

**엔드포인트 정보**:

- HTTP 메서드 (GET, POST, PUT, DELETE)

- 경로

- 요약 설명

- 파라미터 목록 (이름, 위치, 타입, 필수 여부)

- 요청 본문 스키마

- 응답 상태 코드 및 예제

**코드 예제**:

- cURL 명령어 (복사 가능)

- JavaScript fetch 코드 (복사 가능)

- 실제 프로젝트 ID와 환경이 포함된 실행 가능 예제

## 사용 방법

### 테이블 생성하기

1. Database 페이지에서 환경 선택

2. "테이블 생성" 버튼 클릭

3. 테이블명 입력 (소문자, 숫자, 언더스코어만)

4. 시스템 필드 확인 (자동 생성됨)

5. 사용자 정의 필드 추가:

- "필드 추가" 버튼 클릭

- 필드명, 타입 선택

- 필수 여부 체크

6. "테이블 생성" 버튼으로 완료

### 스키마 관리하기

1. 테이블 클릭하여 상세 페이지 진입

2. "스키마" 탭 선택

3. 필드 추가/수정/삭제:

- 시스템 필드는 수정 불가

- 사용자 정의 필드만 관리 가능

4. 변경 사항은 자동으로 새 버전 생성

5. "이력" 버튼으로 이전 버전 확인 및 롤백 가능

### 인덱스 추가하기

1. 테이블 상세 페이지 > "인덱스" 탭

2. "인덱스 추가" 버튼 클릭

3. 인덱스명 입력

4. 필드 선택 및 정렬 방향 지정

- 여러 필드 추가 가능 (복합 인덱스)

- ASC (오름차순) 또는 DESC (내림차순)

5. 옵션 설정:

- 고유: 중복 값 방지

- 희소: 필드가 있는 레코드만 인덱싱

6. "인덱스 생성" 버튼으로 완료

### 권한 설정하기

1. 테이블 상세 페이지 > "권한" 탭

2. 역할별로 체크박스 변경

- 생성, 읽기, 수정, 삭제 권한

3. 변경 경고 메시지 확인

4. "저장" 버튼으로 적용

5. "재설정"으로 변경 취소 가능

### API 문서 확인하기

1. 테이블 상세 페이지 > "API" 탭

2. 기본 URL 및 인증 정보 확인

3. 사용할 엔드포인트 클릭하여 펼치기

4. 탭 이동:

- 파라미터: 요청 파라미터 확인

- 요청 본문: POST/PUT 요청 스키마

- 응답: 상태 코드별 응답 예제

- 예제: cURL 및 JavaScript 코드

5. 복사 버튼으로 코드 복사하여 사용

### 데이터 조회하기

1. 테이블 상세 페이지 > "데이터" 탭

2. 테이블 헤더 클릭하여 정렬

3. 페이지네이션으로 행 수 조절 (10/20/50/100)

4. 셀 클릭하여 데이터 복사

5. 셀에 마우스 오버하여 전체 내용 확인

6. "새로고침" 버튼으로 최신 데이터 로드

## 기술 참고사항

### 데이터 타입

지원하는 필드 타입:

- **String**: 문자열

- **Number**: 숫자 (double)

- **Boolean**: 참/거짓

- **Date**: 날짜 및 시각

- **Array**: 배열

- **Object**: 객체

- **Mixed**: 혼합 타입

### 스키마 버전 관리

- 스키마 변경 시 자동으로 새 버전 생성

- 현재 버전은 `isActive: true` 필드로 식별

- 롤백 시 선택한 버전을 기반으로 새 버전 생성

- 버전 번호는 자동 증가

### 인덱스 성능 최적화

- **단일 인덱스**: 하나의 필드로 자주 검색할 때

- **복합 인덱스**: 여러 필드를 함께 검색할 때 (예: 이름 + 날짜)

- **고유 인덱스**: 중복 방지가 필요한 필드 (예: 이메일)

- **희소 인덱스**: 선택적 필드의 저장 공간 절약

### 권한 모델

- 역할 기반 접근 제어 (RBAC)

- 테이블별로 독립적인 권한 설정

- CRUD 작업별 세분화된 권한 제어

- 변경 사항은 명시적 저장 필요

### API 인증

모든 API 요청에 다음 헤더 필요:

```
Authorization: Bearer <YOUR_TOKEN>
X-Project-Id: <PROJECT_ID>
X-Environment: <ENVIRONMENT>
```

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