DOCS/_archive/docs/architecture/auth-server-database-schema.md
happybell80 725ad0876c fix: 문서 파일 실행 권한 제거
- 모든 .md, .html 파일 권한을 644로 정상화
- .gitignore 파일 권한도 644로 수정
- 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음
- deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
2025-08-18 00:37:51 +09:00

127 lines
4.8 KiB
Markdown

# auth-server 데이터베이스 스키마
**날짜**: 2025-07-29
**데이터베이스**: auth_db (PostgreSQL)
**목적**: 멀티테넌트 B2B Slack 봇 인증 관리 시스템
## 개요
auth-server는 개별 사용자 인증보다는 **회사별 Slack 봇 인증 및 관리**에 특화된 시스템입니다. 각 회사마다 고유한 서브도메인을 제공하고, Slack 워크스페이스와 연동하여 로빙 AI 서비스를 제공하는 B2B SaaS 구조입니다.
## 테이블 구조
### 1. companies (회사/조직 관리)
```sql
CREATE TABLE companies (
id uuid PRIMARY KEY,
name varchar(255) NOT NULL,
subdomain varchar(100) NOT NULL UNIQUE,
container_port integer UNIQUE,
status varchar(50),
created_at timestamp without time zone,
updated_at timestamp without time zone
);
```
**필드 설명**:
- `id`: 회사 고유 식별자 (UUID)
- `name`: 회사명
- `subdomain`: 고유 서브도메인 (예: test-company-oauth)
- `container_port`: 할당된 컨테이너 포트 (향후 회사별 전용 인스턴스 지원)
- `status`: 회사 상태 (active, inactive 등)
- `created_at`, `updated_at`: 생성/수정 시간
**인덱스**:
- Primary Key: `id`
- Unique: `subdomain`, `container_port`
### 2. slack_workspaces (Slack 워크스페이스 연동)
```sql
CREATE TABLE slack_workspaces (
id uuid PRIMARY KEY,
company_id uuid NOT NULL REFERENCES companies(id),
team_id varchar(100) NOT NULL UNIQUE,
team_name varchar(255),
bot_token text,
bot_user_id varchar(100),
app_id varchar(100),
scopes json,
is_enterprise_install boolean,
is_active boolean,
installed_at timestamp without time zone,
updated_at timestamp without time zone
);
```
**필드 설명**:
- `id`: 워크스페이스 고유 식별자 (UUID)
- `company_id`: 소속 회사 참조 (FK)
- `team_id`: Slack 팀 고유 ID
- `team_name`: Slack 팀명
- `bot_token`: Slack 봇 액세스 토큰
- `bot_user_id`: 봇 사용자 ID
- `app_id`: Slack 앱 ID
- `scopes`: OAuth 스코프 정보 (JSON)
- `is_enterprise_install`: 엔터프라이즈 설치 여부
- `is_active`: 워크스페이스 활성화 상태
- `installed_at`, `updated_at`: 설치/수정 시간
**인덱스**:
- Primary Key: `id`
- Unique: `team_id`
- Foreign Key: `company_id``companies(id)`
## 현재 데이터 현황
### Companies (2건)
```
name | subdomain | container_port | status
--------------+---------------------+----------------+--------
테스트 회사 | test-company-oauth | | active
테스트 회사2 | test-company-oauth2 | | active
```
### Slack Workspaces (2건)
```
team_name | bot_user_id | is_active | installed_at
---------------+-------------+-----------+----------------------------
GoodGang Labs | U0988K1BLQY | t | 2025-07-26 07:05:39.019511
test | U097FFP4QQ3 | t | 2025-07-26 07:11:36.388755
```
## 아키텍처 특징
### 멀티테넌트 B2B SaaS 구조
- **회사별 격리**: 각 회사마다 고유한 서브도메인 제공
- **전용 리소스**: `container_port` 필드로 회사별 전용 컨테이너 지원 준비
- **Slack 중심**: 각 회사의 Slack 워크스페이스와 1:1 매핑
### 인증 방식
- **사용자 테이블 없음**: 개별 사용자 정보를 DB에 저장하지 않음
- **JWT/세션 기반**: 사용자 인증 정보는 JWT 토큰이나 세션에서 관리
- **OAuth 토큰**: Google/Slack OAuth 토큰은 파일 시스템(`/tokens/`)에 저장
### 확장성 고려사항
- **회사별 스케일링**: `container_port`를 통한 회사별 전용 인스턴스 지원
- **워크스페이스 다중화**: 한 회사가 여러 Slack 워크스페이스 연동 가능 (1:N 관계)
- **봇 토큰 관리**: 각 워크스페이스별로 독립적인 봇 토큰 관리
## 로빙 프로젝트와의 연관성
auth-server는 로빙 AI 에이전트 생태계에서 다음 역할을 수행합니다:
1. **기업 고객 관리**: B2B 고객사별로 독립된 로빙 서비스 제공
2. **Slack 통합**: 기업의 Slack 워크스페이스에서 로빙 봇 서비스 제공
3. **중앙 인증**: 여러 로빙 서비스(rb8001, rb10508, skill_email 등)의 통합 인증
4. **토큰 공유**: OAuth 토큰을 파일 시스템을 통해 다른 서비스와 공유
## 보안 고려사항
- **봇 토큰 보호**: `bot_token` 필드는 민감한 정보로 적절한 암호화 필요
- **서브도메인 검증**: 악의적인 서브도메인 생성 방지 필요
- **워크스페이스 무결성**: 비활성화된 워크스페이스에 대한 접근 제어 필요
---
**최종 업데이트**: 2025-07-29