From 3f30c5d000f195d079af68335dc902fba61fbf72 Mon Sep 17 00:00:00 2001 From: hskwon Date: Fri, 19 Sep 2025 22:12:09 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EB=B0=8F=20?= =?UTF-8?q?=EC=99=84=EC=A0=84=ED=95=9C=20=EB=AC=B8=EC=84=9C=ED=99=94=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### 추가된 문서들: - CHECKPOINT_2025-09-19.md: 완전한 복원 지점 가이드 - DATABASE_SCHEMA_2025-09-19.md: samdb 전체 스키마 보고서 (70개 테이블) - CURRENT_WORKS.md: 작업 현황 및 이동 작업 가이드 ### 주요 내용: - 다른 장소에서 동일한 환경 재현 가능한 가이드 제공 - Git 커밋 기반 정확한 복원 방법 문서화 - Multi-tenant 아키텍처 및 감사 시스템 스키마 분석 - 체계적인 작업 추적 및 프로젝트 관리 방법론 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- CHECKPOINT_2025-09-19.md | 157 +++++++++++++++++ CURRENT_WORKS.md | 95 ++++++++++ DATABASE_SCHEMA_2025-09-19.md | 316 ++++++++++++++++++++++++++++++++++ 3 files changed, 568 insertions(+) create mode 100644 CHECKPOINT_2025-09-19.md create mode 100644 CURRENT_WORKS.md create mode 100644 DATABASE_SCHEMA_2025-09-19.md diff --git a/CHECKPOINT_2025-09-19.md b/CHECKPOINT_2025-09-19.md new file mode 100644 index 0000000..733ec00 --- /dev/null +++ b/CHECKPOINT_2025-09-19.md @@ -0,0 +1,157 @@ +# SAM 프로젝트 체크포인트 + +**생성일시**: 2025-09-19 19:45 KST +**목적**: 새로운 개발 작업 시작 전 안전한 복원 지점 생성 + +## 🎯 현재 상태 요약 + +### Git 저장소 상태 +모든 저장소가 안정된 상태로 정리 완료: +- **API**: 최신 워크플로우 가이드 적용 +- **Frontend**: 최신 화면 개발 상태 +- **Admin/Shared**: 깨끗한 상태 유지 + +### 데이터베이스 상태 +- **마이그레이션**: Batch 11까지 정상 실행 +- **최종 테이블**: `audit_logs` (감사 로그 시스템) +- **상태**: 모든 마이그레이션 정상 적용됨 + +## 📍 정확한 복원 지점 + +### Git 커밋 해시 +```bash +# API 저장소 (/api) +HEAD: 8d7426d - chore: 프로젝트 가이드 파일 추가 +BASE: 785e367 - feat: 통합 감사 로그 도입 및 조회 API/스케줄러 추가 + +# Frontend 저장소 (/front/www) +HEAD: ec18d70 - 화면 생성 - 수주관리 > 수주하기 - 수주관리 > 수주관리리스트 + +# Admin 저장소 (/admin) +HEAD: 0624422 - fix : 빈디렉토리 설정 + +# Shared 저장소 (/shared) +HEAD: 015b3dc - feat : Filament BOARD, TENANT 추가 +``` + +### 데이터베이스 마이그레이션 상태 +```bash +# 실행된 마이그레이션 (Batch 11) +- 2025_08_28_000100_alter_product_components_unify_ref_columns +- 2025_09_05_000001_create_models_table +- 2025_09_05_000002_create_model_versions_table +- 2025_09_05_000003_create_bom_templates_table +- 2025_09_05_000004_create_bom_template_items_table +- 2025_09_10_000002_add_indexes_to_model_versions_table +- 2025_09_11_000100_create_audit_logs_table +``` + +### 파일 상태 +- **CLAUDE.md**: 워크플로우 가이드 포함된 최신 버전 +- **CURRENT_WORKS.md**: 2025-09-19 작업 내용 정리 완료 +- **시스템 파일**: 모든 불필요한 파일 정리됨 (52MB 절약) + +## 🔄 완전 원복 방법 + +### 1단계: 데이터베이스 마이그레이션 롤백 +```bash +cd /api +php artisan migrate:rollback --step=7 # Batch 11 전체 롤백 +php artisan migrate:status # 상태 확인 (Batch 10까지만 남아야 함) +``` + +### 2단계: Git 저장소 리셋 +```bash +# API 저장소 +cd /api +git reset --hard 8d7426d # 현재 HEAD로 리셋 + +# Frontend 저장소 +cd /front/www +git reset --hard ec18d70 # 현재 HEAD로 리셋 + +# Admin 저장소 +cd /admin +git reset --hard 0624422 # 현재 HEAD로 리셋 + +# Shared 저장소 +cd /shared +git reset --hard 015b3dc # 현재 HEAD로 리셋 +``` + +### 3단계: 데이터베이스 마이그레이션 재실행 +```bash +cd /api +php artisan migrate # 모든 마이그레이션 재실행 +``` + +### 4단계: 환경 정리 +```bash +# 임시 파일 정리 +find . -name ".DS_Store" -delete +rm -f .phpunit.result.cache +rm -f storage/logs/laravel.log + +# Docker 서비스 재시작 (필요시) +docker-compose restart +``` + +## ⚠️ 주의사항 + +### 작업 전 확인사항 +1. **Docker 서비스**: MySQL, Redis 등이 정상 작동하는지 확인 +2. **환경 파일**: `.env` 파일이 올바르게 설정되어 있는지 확인 +3. **의존성**: `composer install`, `npm install` 실행 필요 여부 확인 + +### 데이터 손실 방지 +- 중요한 데이터가 있다면 먼저 백업 수행 +- 마이그레이션 롤백 시 데이터 손실 가능성 있음 +- 테스트 환경에서 먼저 검증 후 적용 + +### 복원 후 검증 +```bash +# API 서버 정상 작동 확인 +php artisan serve +curl http://localhost:8000/health + +# 마이그레이션 상태 재확인 +php artisan migrate:status + +# 전체 Git 상태 확인 +git status # 각 저장소에서 실행 +``` + +## 📝 추가 복원 스크립트 + +### 빠른 복원 스크립트 (`restore-checkpoint.sh`) +```bash +#!/bin/bash +echo "🔄 SAM 프로젝트 체크포인트 복원 중..." + +# 데이터베이스 롤백 +cd /Users/hskwon/Works/@KD_SAM/SAM/api +php artisan migrate:rollback --step=7 + +# Git 리셋 +git reset --hard 8d7426d + +cd ../front/www +git reset --hard ec18d70 + +cd ../../admin +git reset --hard 0624422 + +cd ../shared +git reset --hard 015b3dc + +# 마이그레이션 재실행 +cd ../api +php artisan migrate + +echo "✅ 체크포인트 복원 완료!" +``` + +--- +**체크포인트 생성자**: Claude Code +**복원 가능 기간**: 무제한 (Git 히스토리 보존시) +**검증 상태**: ✅ 모든 시스템 정상 작동 확인 \ No newline at end of file diff --git a/CURRENT_WORKS.md b/CURRENT_WORKS.md new file mode 100644 index 0000000..a93238d --- /dev/null +++ b/CURRENT_WORKS.md @@ -0,0 +1,95 @@ +# SAM 프로젝트 작업 현황 + +## 2025-09-19 (목요일) - 프로젝트 리셋 및 환경 정리 + +### 주요 작업 +- **프로젝트 리셋**: `785e367` 커밋으로 전체 프로젝트 롤백 +- **환경 정리**: 불필요한 시스템 파일 및 로그 파일 삭제 (52MB 절약) +- **프로젝트 구조 개선**: CLAUDE.md 파일 관리 체계 구축 + +### 저장소별 작업 내용 + +#### API 저장소 (`/api`) +**수정된 파일:** +- `CLAUDE.md` - 프로젝트 가이드 파일 추가 (최상단에서 복사) + +**작업 내용:** +- Git 리셋: `785e367` (감사 로그 도입) 커밋으로 hard reset +- 데이터베이스 마이그레이션 롤백 후 재실행 (batch 10 → 감사 로그까지) +- 불필요한 Estimate 관련 임시 파일들 삭제 +- 시스템 파일 정리: .DS_Store, PHPUnit 캐시, Laravel 로그 (52MB) 삭제 + +**마이그레이션 상태:** +- 최종 실행된 마이그레이션: `2025_09_11_000100_create_audit_logs_table` +- 현재 batch: 14 + +#### Frontend 저장소 (`/front/www`) +**삭제된 파일:** +- `application/views/kdcom/estimates/` (디렉토리) +- `application/views/kdcom/estimates_list.php` +- `assets/` (디렉토리) + +**작업 내용:** +- 작업 중이던 estimates 관련 뷰 파일들 정리 +- 브랜치 상태: develop (최신 상태 유지) + +#### Admin 저장소 (`/admin`) +**삭제된 파일:** +- `config/filament.php` + +**작업 내용:** +- 추가된 Filament 설정 파일 정리 +- 브랜치 상태: develop (최신 상태 유지) + +#### Shared 저장소 (`/shared`) +**작업 내용:** +- 변경사항 없음 (깨끗한 상태 유지) +- 브랜치 상태: develop (최신 상태) + +### 환경 개선 사항 +1. **파일 정리**: 총 52MB의 불필요한 파일 삭제 + - .DS_Store 파일들 (macOS 시스템 파일) + - PHPUnit 캐시 파일 (3KB) + - Laravel 로그 파일 (52MB) + +2. **프로젝트 관리 체계 구축**: + - CLAUDE.md 파일을 API 서버에도 복사 + - CURRENT_WORKS.md 파일 생성으로 작업 추적 체계 마련 + +### 추가 완료된 작업 +3. **프로젝트 관리 체계 구축**: + - CLAUDE.md 워크플로우 가이드 완성 + - Git 커밋 컨벤션 및 관리 체계 정립 + - 체크포인트 시스템 구축 + +4. **데이터베이스 스키마 점검**: + - samdb 전체 테이블 구조 분석 (70개 테이블, 3.42MB) + - 핵심 테이블 스키마 상세 문서화 + - Multi-tenant 아키텍처 및 감사 시스템 확인 + +5. **문서화 시스템**: + - `CHECKPOINT_2025-09-19.md`: 완전한 복원 지점 생성 + - `DATABASE_SCHEMA_2025-09-19.md`: DB 스키마 상세 보고서 + - `CLAUDE.md`: 프로젝트 워크플로우 가이드 포함 + +### 최종 커밋 상태 +- **API 저장소**: `08f775e` - 프로젝트 워크플로우 가이드 포함 +- **Frontend 저장소**: `ec18d70` - 수주관리 화면 개발 완료 +- **Admin/Shared**: 깨끗한 상태 유지 + +### 최종 상태 +- **모든 저장소**: 깨끗한 상태로 정리 완료 +- **문서화**: 완전한 프로젝트 가이드 및 체크포인트 생성 +- **환경**: 다른 장소에서 동일한 작업 환경 재현 가능 +- **백업**: 안전한 복원 지점 확보 + +### 다른 장소에서 작업 시작 방법 +1. `git pull origin develop` (모든 저장소) +2. Docker 서비스 실행 확인 +3. CLAUDE.md 파일 동기화 확인 +4. `CHECKPOINT_2025-09-19.md` 참조하여 환경 검증 +5. `php artisan migrate:status`로 DB 상태 확인 + +--- +**최종 업데이트**: 2025-09-19 21:45 KST +**상태**: Git Push 준비 완료 \ No newline at end of file diff --git a/DATABASE_SCHEMA_2025-09-19.md b/DATABASE_SCHEMA_2025-09-19.md new file mode 100644 index 0000000..94b805f --- /dev/null +++ b/DATABASE_SCHEMA_2025-09-19.md @@ -0,0 +1,316 @@ +# SAM 데이터베이스 스키마 보고서 + +**점검일시**: 2025-09-19 19:50 KST +**데이터베이스**: samdb (MySQL 8.0.43) +**연결정보**: 127.0.0.1:3306 (samuser) + +## 📊 전체 현황 + +- **총 테이블 수**: 70개 +- **전체 DB 크기**: 3.42 MB +- **연결 상태**: 정상 (1 active connection) +- **엔진**: InnoDB +- **문자셋**: utf8mb4_unicode_ci + +## 🏗️ 핵심 테이블 구조 + +### 1. **Multi-Tenant 기반 구조** + +#### `tenants` (80KB) +```sql +-- 테넌트(회사/조직) 마스터 +- id: bigint (PK, auto_increment) +- company_name: varchar(100) -- 회사명 +- code: varchar(50) UNIQUE -- 테넌트 코드 +- email, phone, address: 연락처 정보 +- business_num: varchar(12) -- 사업자번호 +- corp_reg_no: varchar(13) -- 법인등록번호 +- ceo_name, homepage, fax, logo: 추가 정보 +- admin_memo: text -- 관리자 메모 +- options: json -- 설정 옵션 +- tenant_st_code: varchar(20) -- 상태 코드 +- plan_id, subscription_id: 구독 관련 +- max_users: int -- 최대 사용자 수 +- trial_ends_at, expires_at, last_paid_at: 구독 일정 +- billing_tp_code: varchar(20) DEFAULT 'monthly' +- created_at, updated_at, deleted_at +``` + +#### `users` (48KB) +```sql +-- 사용자 계정 마스터 +- id: bigint (PK, auto_increment) +- user_id: varchar(100) UNIQUE -- 사용자 ID +- phone: varchar(30) +- options: json +- name: varchar(255) +- email: varchar(255) UNIQUE +- email_verified_at: timestamp +- password: varchar(255) +- last_login_at: timestamp +- two_factor_secret, two_factor_recovery_codes: 2FA 관련 +- two_factor_confirmed_at: timestamp +- remember_token: varchar(100) +- current_team_id: bigint +- profile_photo_path: varchar(2048) +- created_at, updated_at, deleted_at +``` + +#### `user_tenants` (48KB) +```sql +-- 사용자-테넌트 매핑 (M:N) +- user_id ↔ tenant_id +- is_active, is_default 플래그 +``` + +### 2. **권한 관리 시스템** + +#### Spatie Permission 기반 +- `permissions` (48KB): 권한 정의 +- `roles` (48KB): 역할 정의 +- `model_has_permissions` (64KB): 모델별 권한 할당 +- `model_has_roles` (48KB): 모델별 역할 할당 +- `role_has_permissions` (32KB): 역할별 권한 매핑 + +#### 확장 권한 시스템 +- `permission_overrides` (64KB): 수동 권한 재정의 +- `departments` (80KB): 부서별 계층 구조 +- `department_user` (16KB): 사용자-부서 매핑 + +### 3. **제품 및 자재 관리** + +#### `products` (432KB) - 가장 큰 테이블 +```sql +-- 제품 카탈로그 마스터 +- id: bigint (PK) +- tenant_id: bigint (테넌트 격리) +- code: varchar(30) -- 제품 코드 (테넌트별 유니크) +- name: varchar(100) +- unit: varchar(10) -- 단위 +- category_id: bigint (FK → categories) +- product_type: varchar(30) DEFAULT 'PRODUCT' +- attributes: json -- 동적 속성 +- description: varchar(255) +- is_sellable: tinyint DEFAULT 1 +- is_purchasable: tinyint DEFAULT 0 +- is_producible: tinyint DEFAULT 1 +- is_active: tinyint DEFAULT 1 +- created_by, updated_by: bigint +- created_at, updated_at, deleted_at +``` + +#### `materials` (336KB) +```sql +-- 자재 마스터 +- id: bigint (PK) +- tenant_id: bigint +- category_id: bigint (nullable) +- name: varchar(100) +- item_name: varchar(255) +- specification: varchar(100) +- material_code: varchar(50) UNIQUE +- unit: varchar(10) +- is_inspection: char(1) DEFAULT 'N' +- search_tag: text +- remarks: text +- attributes, options: json +- created_by, updated_by: bigint +- created_at, updated_at, deleted_at +``` + +#### `categories` (80KB) +```sql +-- 계층형 카테고리 시스템 +- 동적 필드 정의 지원 +- 버전 관리 (category_templates) +``` + +### 4. **BOM 및 설계 관리** + +#### `models` (16KB) +```sql +-- 설계 모델 마스터 +- 제품 설계의 상위 개념 +``` + +#### `model_versions` (16KB) +```sql +-- 모델 버전 관리 +- DRAFT/RELEASED 상태 관리 +- 버전별 BOM 연결 +``` + +#### `bom_templates` (16KB) +```sql +-- BOM 템플릿 +- 모델 버전별 BOM 정의 +``` + +#### `bom_template_items` (16KB) +```sql +-- BOM 아이템 +- 자재/제품 구성 요소 +- 수량, 손실률 등 관리 +``` + +#### `product_components` (80KB) +```sql +-- 제품 구성 요소 +- ref_type: MATERIAL|PRODUCT +- 다형성 관계 지원 +``` + +### 5. **주문 및 견적 관리** + +#### `orders` (80KB) +```sql +-- 주문/견적 마스터 +- 워크플로우 상태 관리 +``` + +#### `order_items` (64KB) +```sql +-- 주문 항목 +- 설계 코드 연결 +``` + +#### `order_item_components` (64KB) +```sql +-- 주문별 소요 자재/제품 +``` + +#### `order_histories` (64KB) +```sql +-- 주문 변경 이력 +``` + +### 6. **감사 로그 시스템** + +#### `audit_logs` (16KB) - 최신 추가 +```sql +-- 통합 감사 로그 +- id: bigint (PK) +- tenant_id: bigint (테넌트 격리) +- target_type: varchar(100) -- 대상 모델 +- target_id: bigint -- 대상 ID +- action: varchar(50) -- 액션 (created, updated, deleted 등) +- before: json -- 변경 전 데이터 +- after: json -- 변경 후 데이터 +- actor_id: bigint -- 수행자 +- ip: varchar(45) -- IP 주소 +- ua: varchar(255) -- User Agent +- created_at: timestamp DEFAULT CURRENT_TIMESTAMP + +-- 최적화된 인덱스 +- ix_audit_tenant_actor_created (tenant_id, actor_id, created_at) +- ix_audit_tenant_target_created (tenant_id, target_type, target_id, created_at) +``` + +### 7. **인벤토리 관리** + +#### `material_receipts` (32KB) +```sql +-- 자재 입고 +- 로트 추적 지원 +``` + +#### `lots` (48KB) +```sql +-- 로트 관리 +``` + +#### `material_inspections` (32KB) +```sql +-- 품질 검사 +``` + +### 8. **시스템 및 설정** + +#### `api_keys` (32KB) +```sql +-- API 키 관리 +- 활성 상태 관리 +``` + +#### `classifications` (48KB) +```sql +-- 코드 테이블 +- 그룹별 코드 관리 +``` + +#### `setting_field_defs` (32KB) +```sql +-- 글로벌 필드 정의 +``` + +#### `tenant_field_settings` (32KB) +```sql +-- 테넌트별 필드 설정 +``` + +### 9. **게시판 시스템** + +#### `boards` (32KB) +```sql +-- 게시판 설정 +``` + +#### `posts` (64KB) +```sql +-- 게시물 +- 동적 필드 지원 +``` + +#### `board_comments` (80KB) +```sql +-- 계층형 댓글 +``` + +## 🔍 데이터베이스 특징 + +### **Multi-Tenant Architecture** +- 모든 주요 테이블에 `tenant_id` 컬럼으로 데이터 격리 +- 테넌트별 코드 유니크 제약 (`tenant_id, code`) +- 글로벌 스키마 + 테넌트별 데이터 패턴 + +### **동적 필드 시스템** +- `attributes`, `options` JSON 컬럼 활용 +- 카테고리별 동적 필드 정의 지원 +- 버전 관리된 템플릿 시스템 + +### **감사 추적** +- 통합 감사 로그 시스템 구현 +- 변경 전후 데이터 JSON 저장 +- 성능 최적화된 인덱스 구조 + +### **BOM 관리** +- 계층적 제품 구성 관리 +- 자재/제품 다형성 참조 +- 설계 버전별 BOM 템플릿 + +### **권한 관리** +- Spatie Permission + 커스텀 확장 +- 부서별 계층 권한 +- 시간 기반 권한 재정의 + +## ⚠️ 주의사항 + +### **데이터 무결성** +- Foreign Key 제약조건 최소화 (성능 고려) +- 애플리케이션 레벨에서 참조 무결성 관리 +- Soft Delete 패턴 적용 (`deleted_at`) + +### **성능 고려사항** +- 대용량 테이블: `products` (432KB), `materials` (336KB) +- JSON 컬럼 활용으로 스키마 유연성 확보 +- 테넌트별 데이터 분리로 쿼리 성능 최적화 + +### **백업 및 복원** +- 테넌트별 데이터 분리 백업 가능 +- 감사 로그 별도 보관 정책 필요 (13개월 보존) +- JSON 데이터 백업시 인코딩 주의 + +--- +**보고서 생성**: Claude Code +**검증 상태**: ✅ 모든 테이블 스키마 정상 확인 +**다음 검토**: 주요 업데이트시 또는 분기별 \ No newline at end of file