tags: [workspace, team, project, database, slack, architecture]

# Workspace-Team-Project 도메인 모델

**상위 원칙**:
- [0_VALUE Writing Principles](../../../../0_VALUE/02_Governance/writing-principles.md)
- [0_VALUE Coding Principles](../../../../0_VALUE/02_Governance/coding-principles.md)
- [314_infrastructure-ssot-principle.md](./314_infrastructure-ssot-principle.md)

## 1. 목적
- 로빙의 조직 단위 해석에서 `workspace`, `team`, `project`의 의미를 고정합니다.
- 현재 `team` 중심 해석 때문에 발생하는 Slack/DB 용어 혼선을 줄입니다.
- 이후 DB 마이그레이션, 권한 모델, Slack 연동 문서의 상위 해석 기준을 제공합니다.

## 2. 핵심 정의

### 2.1 workspace
- `workspace`는 상위 조직 단위입니다.
- 엔터프라이즈, 회사, 서비스 운영 주체처럼 여러 팀을 포함할 수 있는 최상위 실행 컨텍스트를 뜻합니다.
- Slack 관점에서는 하나 이상의 `slack_workspace`와 연결될 수 있습니다.

### 2.2 team
- `team`은 `workspace` 소속의 실행 조직입니다.
- 팀은 사람과 역할의 운영 단위이며, 프로젝트를 담당합니다.
- 팀은 프로젝트의 하위 계층이 아니라, 프로젝트를 맡는 주체입니다.

### 2.3 project
- `project`는 특정 팀이 담당하는 업무/제품/과업 단위입니다.
- 프로젝트는 별도 조직 계층이 아니라 팀이 책임지는 대상입니다.
- 하나의 팀이 여러 프로젝트를 맡을 수 있고, 하나의 프로젝트는 운영 기준상 하나의 책임 팀을 가집니다.

## 3. 관계 기준
- 기본 관계는 `workspace has many teams`입니다.
- 기본 관계는 `team owns many projects`입니다.
- 따라서 기준 계층은 `workspace > team`이고, `project`는 팀 하위 조직이 아니라 팀이 소유하는 대상입니다.

## 4. Slack 해석 기준
- `slack_workspace`는 Slack API의 실제 워크스페이스 엔터티입니다.
- 로빙 DB의 `workspace`와 Slack의 `slack_workspace`는 1:1로 단정하지 않습니다.
- 기본 해석은 `workspace`가 상위 조직이고, `slack_workspace`는 그 조직이 연결한 외부 협업 공간입니다.
- `slack_channel`은 채널 단위 권한/용도/프로젝트 연결을 표현합니다.
- 채널은 workspace 공용일 수도 있고, 특정 project 전용일 수도 있습니다.

## 5. 적용 예시
- `Company-X`는 `workspace`로 해석합니다.
- `Company-X` 내부에서 실제 실행 조직은 `team`으로 분리합니다.
- `xvaluelab`은 그 팀이 담당하는 `project`로 해석합니다.
- 따라서 기존의 "`Company-X`를 team으로 둔 상태"는 목표 모델 기준으로는 임시/레거시 해석입니다.

## 6. 현재 스키마에 대한 해석
- 현재 `main_db`는 `team` 중심 스키마입니다.
- 예를 들어 `user.team_id`, `robeing.team_id`, `slack_workspace.team_id`, `team_document.team_id`는 현재 구조가 아직 `workspace > team > project` 모델로 정리되지 않았음을 보여줍니다.
- 이 문서는 현재 스키마가 곧 최종 의미라고 선언하지 않습니다.
- 현재 스키마는 운영 중인 레거시 모델이고, 본 문서는 앞으로의 상위 해석 기준입니다.

## 7. 마이그레이션 원칙
- 현재 운영 중인 `team` 의미를 즉시 덮어쓰지 않습니다.
- 먼저 `workspace`와 `project` 해석을 문서와 코드에서 병행 가능 상태로 만듭니다.
- DB 변경은 `기존 team 참조 유지 -> workspace/project 추가 -> 코드 병행 지원 -> 데이터 이관 -> 레거시 해석 제거` 순서로 진행합니다.
- 용어 정리 없이 테이블명만 바꾸는 방식은 금지합니다.

## 8. 검증 기준
- 새 문서, 새 코드, 새 테이블은 `workspace`, `team`, `project`를 서로 바꿔 쓰지 않아야 합니다.
- Slack 연동 문서에서 `Company-X` 같은 상위 조직을 `team`으로 재정의하지 않아야 합니다.
- 추후 DB 마이그레이션 문서는 본 문서의 정의를 직접 참조해야 합니다.

## 관련 문서
- [README.md](./README.md)
- [300_README.md](./300_README.md)
- [database/README.md](./database/README.md)
- [database/tables.md](./database/tables.md)
- [380_authentication_system.md](./380_authentication_system.md)
- [260316_workspace_team_project_계층_재정의_아이디어.md](../../journey/ideas/260316_workspace_team_project_계층_재정의_아이디어.md)
