← 목록
프로젝트 2026-06-25 6KB 읽기 5분

프로젝트매트릭스 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),
크라우니 드라이버(블롭 base64+dedup), 티어링(드라이버선택), 총사용량, 보안(폴더기준 대상 도출).
  • crowny-aimed/매트릭스파일서버.한선 (:9929) — 파일 API(목록/저장/열기/삭제/분석) + Bearer 인증
+ 본문 byte-누적(한글 멀티바이트) + 정적 UI 서빙.
  • crowny-aimed/public/파일.html — 4탭 UI(나/팀/회사/고객), 업로드/목록/열기(다운로드)/삭제,
kps·티옴타 디자인(Gold #B58A4A).
  • 게이트웨이 pathRoute /matrix → 9929 (gateway.yaml aimed 블록).
  • 시작.sh ensure_server 9929 영속화 + 매트릭스 nav "📁 파일" 링크.

검증 결과

항목결과
나 저장→목록→열기복호(한글)ok, "안녕 크라우니 매트릭스 파일" 왕복
RBAC 보안타인(E999) 열기=차단, 회사 저장(무소속)=권한없음, 나=허용
티어링사용 90%>80% → 구글 드라이버 선택(코드 증명)
메타분석count·bytes(문서속성 DB화)
게이트웨이 경유 한글 저장0.045s (byte fix 후)

VM 함정 (수정)

  1. 파일존재()는 비존재 파일에 -1 반환(0 아님). ==0 체크가 영영 거짓 → 블롭 안 써짐 → !=1로 수정.
  2. 함수반환 긴해시(64자) 다중 concat → -1 센티넬 손상 → _블롭경로 단계별 concat.
  3. 본문 누적을 글자수(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 우선 구축.