From a435171214f2817482a2c06eb988614beb3c14c1 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 16 Mar 2026 13:02:28 +0900 Subject: [PATCH] docs: define workspace-team-project domain model --- book/300_architecture/300_README.md | 1 + ...workspace_team_project_도메인_모델.md | 73 +++++++++++++++++++ book/300_architecture/README.md | 1 + book/300_architecture/database/README.md | 3 +- book/300_architecture/database/tables.md | 6 +- journey/README.md | 7 ++ ...m_project_계층_재정의_아이디어.md | 45 ++++++++++++ 7 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 book/300_architecture/390_workspace_team_project_도메인_모델.md create mode 100644 journey/ideas/260316_workspace_team_project_계층_재정의_아이디어.md diff --git a/book/300_architecture/300_README.md b/book/300_architecture/300_README.md index 67d90a2..caf332f 100644 --- a/book/300_architecture/300_README.md +++ b/book/300_architecture/300_README.md @@ -21,6 +21,7 @@ Part 3 문서 맵입니다. 원칙 본문은 개별 원칙 문서에서 관리 - [360_로빙_컨테이너_경량화_전략.md](./360_%EB%A1%9C%EB%B9%99_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_%EA%B2%BD%EB%9F%89%ED%99%94_%EC%A0%84%EB%9E%B5.md) - [370_임베딩_서비스_분리_아키텍처.md](./370_%EC%9E%84%EB%B2%A0%EB%94%A9_%EC%84%9C%EB%B9%84%EC%8A%A4_%EB%B6%84%EB%A6%AC_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98.md) - [380_authentication_system.md](./380_authentication_system.md) +- [390_workspace_team_project_도메인_모델.md](./390_workspace_team_project_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%AA%A8%EB%8D%B8.md) ## 가이드라인 - [guidelines/naming_conventions.md](./guidelines/naming_conventions.md) diff --git a/book/300_architecture/390_workspace_team_project_도메인_모델.md b/book/300_architecture/390_workspace_team_project_도메인_모델.md new file mode 100644 index 0000000..f288b2c --- /dev/null +++ b/book/300_architecture/390_workspace_team_project_도메인_모델.md @@ -0,0 +1,73 @@ +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) diff --git a/book/300_architecture/README.md b/book/300_architecture/README.md index d1fe1d0..ef03e69 100644 --- a/book/300_architecture/README.md +++ b/book/300_architecture/README.md @@ -20,6 +20,7 @@ - [[360_로빙_컨테이너_경량화_전략]] - [[370_임베딩_서비스_분리_아키텍처]] - [[380_authentication_system]] +- [[390_workspace_team_project_도메인_모델]] ## 관련 파트 - 이전: [[../200_core_design/README|Part 2 핵심 설계]] diff --git a/book/300_architecture/database/README.md b/book/300_architecture/database/README.md index 2910c32..d13203f 100644 --- a/book/300_architecture/database/README.md +++ b/book/300_architecture/database/README.md @@ -8,6 +8,7 @@ ### 1. 테이블 정의 - `tables.md` - 모든 테이블 구조 정의 - `relationships.md` - 테이블 간 관계 (FK, JOIN) +- `../390_workspace_team_project_도메인_모델.md` - workspace/team/project 상위 해석 SSOT ### 2. 도메인별 정리 - `auth_domain.md` - 인증/사용자 관련 테이블 @@ -47,4 +48,4 @@ psql postgresql://robeings:robeings@localhost:5433/main_db - 2025-08-20: auth_db → main_db 마이그레이션 ## 최종 업데이트 -2025-08-26 \ No newline at end of file +2025-08-26 diff --git a/book/300_architecture/database/tables.md b/book/300_architecture/database/tables.md index d76a992..57fb0f8 100644 --- a/book/300_architecture/database/tables.md +++ b/book/300_architecture/database/tables.md @@ -4,6 +4,10 @@ ## 최종 수정일: 2025-12-04 ## 데이터베이스: main_db +## 해석 기준 +- 조직 단위 해석 SSOT: [../390_workspace_team_project_도메인_모델.md](../390_workspace_team_project_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%AA%A8%EB%8D%B8.md) +- 본 문서는 현재 운영 스키마를 기록하며, 목표 도메인 모델과 1:1 일치한다고 단정하지 않습니다. + --- ## 1. 조직 관련 테이블 @@ -456,4 +460,4 @@ SemanticIntentClassifier는 위 테이블에서 활성화된 의도를 불러오 --- -**문서 끝** \ No newline at end of file +**문서 끝** diff --git a/journey/README.md b/journey/README.md index 49ada36..b7171fa 100644 --- a/journey/README.md +++ b/journey/README.md @@ -5,6 +5,12 @@ ## 문제 상태 +### 열린 문제 + +- workspace-team-project 계층 재정의 문제 + - ssot: `../book/300_architecture/390_workspace_team_project_도메인_모델.md` + - ideas: `ideas/260316_workspace_team_project_계층_재정의_아이디어.md` + ### 닫힌 문제 - 프롬프트DB·자기개선루프 기본구현 검증 및 계획 종결 @@ -56,6 +62,7 @@ - OpenClaw 기반 로빙 개선 아이디어 – `ideas/260309_openclaw_기반_로빙_개선_아이디어.md` - 로빙 에이전트 루프와 스킬 훅 구조 아이디어 – `ideas/260312_로빙_에이전트루프와_스킬훅_구조_아이디어.md` +- workspace-team-project 계층 재정의 아이디어 – `ideas/260316_workspace_team_project_계층_재정의_아이디어.md` ### Intent 리뷰 / 의도 학습 diff --git a/journey/ideas/260316_workspace_team_project_계층_재정의_아이디어.md b/journey/ideas/260316_workspace_team_project_계층_재정의_아이디어.md new file mode 100644 index 0000000..0d55fcf --- /dev/null +++ b/journey/ideas/260316_workspace_team_project_계층_재정의_아이디어.md @@ -0,0 +1,45 @@ +tags: [workspace, team, project, database, slack, ideas] + +# workspace-team-project 계층 재정의 아이디어 + +상위 원칙: +- [0_VALUE Writing Principles](../../../../0_VALUE/02_Governance/writing-principles.md) +- [Workspace-Team-Project 도메인 모델](../../book/300_architecture/390_workspace_team_project_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%AA%A8%EB%8D%B8.md) +- [database/tables.md](../../book/300_architecture/database/tables.md) + +## 문제 인식 +- 현재 운영 DB는 `team`이 상위 조직처럼 해석되는 구간과, 실제 실행 조직처럼 해석되는 구간이 섞여 있습니다. +- 그 결과 `Company-X`처럼 상위 조직을 `team`으로 두고, `xvaluelab` 같은 실제 프로젝트를 채널 메타데이터나 임시 필드로만 보강하는 상태가 생깁니다. +- Slack 쪽에서도 `slack_workspace`는 실제 워크스페이스인데, 내부 도메인 모델은 이를 `team` 중심으로 붙이고 있어 개념 충돌이 발생합니다. + +## 아이디어 +- 상위 조직 단위는 `workspace`로 고정합니다. +- `team`은 `workspace` 소속 실행 조직으로 고정합니다. +- `project`는 팀이 담당하는 대상/업무 단위로 분리합니다. +- 따라서 `Company-X`는 workspace, `Company-X` 내부 실행 조직은 team, `xvaluelab`은 그 팀이 맡는 project로 해석하는 방향을 기본 모델로 삼을 수 있습니다. + +## 기대 효과 +- 조직 단위와 프로젝트 단위가 분리되어 Slack 채널/문서/권한 해석이 더 명확해질 수 있습니다. +- `slack_workspace`, `slack_channel`, `team_document` 같은 테이블이 어떤 조직 단위를 참조하는지 더 선명하게 재설계할 수 있습니다. +- 현재처럼 `team` 하나에 회사, 실행 조직, 프로젝트 의미가 겹치는 상태를 줄일 수 있습니다. + +## 검증이 필요한 이유 +- 현재 코드와 DB는 `team_id`에 강하게 묶여 있어, 개념만 바꾸고 바로 적용하면 조회/권한/시드/집계 경로가 깨질 수 있습니다. +- 특히 `user`, `robeing`, `slack_workspace`, `team_document`, 관리자 집계 경로는 영향 범위가 넓습니다. +- 따라서 이 아이디어는 즉시 치환안이 아니라, 병행 운영 가능한 목표 모델로 먼저 검증돼야 합니다. + +## 이 문서를 닫기 위해 필요한 질문 +- 현재 `team`이 상위 조직처럼 쓰이는 경로와 실행 조직처럼 쓰이는 경로는 각각 어디인가 +- `workspace`, `team`, `project`를 도입할 때 기존 `team_id` FK를 어떤 순서로 분리할 것인가 +- Slack 채널은 workspace 공용 채널과 project 전용 채널을 어떤 컬럼 조합으로 구분할 것인가 + +## 이 문서에서 아직 확정하지 않는 것 +- 새 테이블 이름과 최종 FK 이름 +- 기존 `company`, `team`, `workspace_member`와의 정확한 통합 방식 +- 데이터 이관 일정과 서비스별 전환 순서 + +## 관련 문서 +- [Workspace-Team-Project 도메인 모델](../../book/300_architecture/390_workspace_team_project_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%AA%A8%EB%8D%B8.md) +- [database/tables.md](../../book/300_architecture/database/tables.md) +- [380_authentication_system.md](../../book/300_architecture/380_authentication_system.md) +- [journey/README.md](../README.md)