프로젝트매트릭스 4단계 파일 + 크라우니클라우드 연동 (2026-06-25)
개요
프로젝트매트릭스를 4단계(나/팀/회사/고객) 파일 저장소로 구축. 권한은 ERP RBAC 단독, 저장은 크라우니클라우드 기본 + 용량초과 시 구글드라이브 spill(티어링). 메타DB는 항상 크라우니 보유(문서속성 분석/DB화). 종속성 0에서 시작.
아키텍처 (효율 검증)
[1] 권한 = ERP RBAC 단독 (접근레벨: L4본인/L2팀/L3기능/L1전사). 4페이지=4스코프
[2] 파일저장소 추상 (목록/저장/열기/삭제/메타분석 + 드라이버 dispatch + 티어링)
[3] 드라이버 ①크라우니클라우드(기본, base64 블롭+SHA256 dedup) ②구글(spill·백업, Phase4 stub)
권한 이중화(구글 ACL 동기화) 회피가 효율 핵심. 사용률 임계(80%) 초과 시 구글 spill.무엇을 했나
crowny-aimed/libs/파일저장소.한선— 키스톤: RBAC 4스코프 게이트, 메타DB(파일메타.psv),
crowny-aimed/매트릭스파일서버.한선(:9929) — 파일 API(목록/저장/열기/삭제/분석) + Bearer 인증
crowny-aimed/public/파일.html— 4탭 UI(나/팀/회사/고객), 업로드/목록/열기(다운로드)/삭제,
- 게이트웨이 pathRoute
/matrix → 9929(gateway.yaml aimed 블록). 시작.shensure_server 9929 영속화 + 매트릭스 nav "📁 파일" 링크.
검증 결과
| 항목 | 결과 |
|---|---|
| 나 저장→목록→열기복호(한글) | ok, "안녕 크라우니 매트릭스 파일" 왕복 |
| RBAC 보안 | 타인(E999) 열기=차단, 회사 저장(무소속)=권한없음, 나=허용 |
| 티어링 | 사용 90%>80% → 구글 드라이버 선택(코드 증명) |
| 메타분석 | count·bytes(문서속성 DB화) |
| 게이트웨이 경유 한글 저장 | 0.045s (byte fix 후) |
VM 함정 (수정)
파일존재()는 비존재 파일에 -1 반환(0 아님).==0체크가 영영 거짓 → 블롭 안 써짐 →!=1로 수정.- 함수반환 긴해시(64자) 다중 concat → -1 센티넬 손상 →
_블롭경로단계별 concat. - 본문 누적을 글자수(char)로 Content-Length(byte) 비교 → 한글 page/name에서 5s 과대기+503 →
_바이트수(버퍼).
관련 파일
/Users/ef/crowny-aimed/libs/파일저장소.한선,매트릭스파일서버.한선,public/파일.html/Users/ef/crowny-gateway/gateway.yaml(aimed pathRoutes: /matrix)
UI 확정 (2026-06-25 사용자 지정) — 프로젝트 카드 보드
좌표 그리드(4×4)가 아니라 프로젝트 카드 보드로 확정:
- 개인/팀/고객: 프로젝트별 카드 — 상단 프로젝트 이름 + 하단 서류 이모지(파일=종류별 이모지 📕견적 📐도면 📊분석 🖼️이미지…). 이모지 클릭=열기, "파일 관리"=목록+삭제.
- 회사: 프로젝트 이름만 열거(개요).
- 파일에
프로젝트(메타 필드12) 추가 → 카드 그룹핑 키. 업로드 시 프로젝트 이름 입력. - 고객=공유 폴더 L3(per-arg 제거, 프로젝트별 카드로 그룹). 회사프로젝트목록()=distinct 프로젝트.
- 검증: 개인 업로드 2프로젝트 그룹화·회사 이름열거·게이트웨이 /matrix UI 200·이모지 종류매핑.
실제 프로젝트 시스템 연동 (2026-06-25 추가)
업로드 프로젝트를 자유입력 → 실제 프로젝트(/api/aimed/projects) 연동:
- 업로드 = 프로젝트 드롭다운(스코프별 필터: 개인=내것, 팀=내팀, 회사/고객=전체). 같은 오리진 게이트웨이로 portal(9903)
/api/aimed/projects호출. - 카드 부제 = 프로젝트의
고객 · 단계(projByName 룩업). 회사 탭 = 실제 전체 프로젝트(단계·진척·PM) 열거. - 검증: 실프로젝트 12개 fetch, "LED 미디어월 신관 로비"로 업로드→카드 그룹화, 게이트웨이 종단.
- 함정: 서버 die 시 재컴파일+재기동 필요(파일저장소.한선 변경 후
[ -s toau ]캐시 → rm 후 재컴파일). aimed 워치독+ensure_server 영속.
Phase 4 — 구글드라이브 spill·백업 (2026-06-25 완성)
크라우니클라우드 용량초과/대용량 → 구글드라이브 오프로드 기능 완성:
드라이버선택: 사용률>80% 또는 파일>7MB(base64) → "구글" 티어._구글저장/_구글열기: 바이트를data/저장소/구글미러/에 보관(데이터 손실 0) +구글동기화대기.psv큐 등록.열기가 드라이버별 디스패치.- 경계 어댑터
구글드라이브어댑터.js: 큐를 비우며 회사 Drive로 오프로드. 자격증명 없으면 dry-run, 있으면 실 업로드(GDRIVE_OFFLOAD=1 시 로컬삭제=진짜 오프로드). 메타·권한은 항상 크라우니 단독. - 검증: spill(사용4.5GB)→드라이버=구글→구글미러→디스패치 열기 복원→큐 1건, 일반파일=크라우니, 어댑터 dry-run.
- 실 Drive 활성화(사용자 제공): 회사 서비스계정 JSON + Drive 폴더id →
GOOGLE_APPLICATION_CREDENTIALS=sa.json GDRIVE_FOLDER_ID=폴더id node 구글드라이브어댑터.js.잔여 (다음 단계)
- 실 구글 Drive 자격증명 연결 + 어댑터 주기 실행(데몬/cron). 백업 모드(전 블롭 미러).
- 팀/회사/고객 스코프 실조직 멤버 토큰으로 HTTP 종단 추가 검증(RBAC 로직은 검증됨).
- 기존 프로젝트보드(매트릭스.html)와 깊은 통합(현재 전용 페이지 링크).
- crowny-erp core 전파(동의 업그레이드) — crowny-aimed 우선 구축.