-
Notifications
You must be signed in to change notification settings - Fork 0
app: object storage foundation 후속 설계 및 자산 메타데이터 통합 #756
Copy link
Copy link
Open
Labels
Description
배경
- 현재 PR feat(app): add shared object storage foundation #752 는
ObjectStoragePort공통 계약과MinIO/Tencent COS/Blobadapter,ObjectStorageRegistry, blob backing store까지의 foundation만 추가합니다. - 이번 PR에서는 adapter correctness와 회귀 테스트에 집중했고, 상위 자산 메타데이터 모델은 의도적으로 분리했습니다.
storage_uri의 backend alias는 이번 PR에서minio/tencent-cos/blob같은 논리 이름으로 단순화했습니다.- 다음 단계는 이 foundation 위에 실제 서비스 자산 모델과 serving 정책을 올리는 작업입니다.
이번 PR에서 의도적으로 제외한 항목
meetpienamecard 내부 이미지의 persistedimageUrl/data:image제거deskpienote/file attachment 통합
목표
- object storage foundation 위에 올라갈 공통 자산 모델을 정한다.
- public/private asset serving 정책을 명확히 한다.
meetpie를 1차 마이그레이션 대상으로 삼아 실제 사용처를 붙인다.
설계 방향
1. StorageUri는 internal locator로 유지
- DB에는 public URL이 아니라 storage locator만 저장한다.
- 예시:
s3://minio/deck-dev/workspaces/{workspaceId}/files/{fileId}s3://tencent-cos/deck-prod-1250000000/workspaces/{workspaceId}/files/{fileId}blob://blob/{objectId}
- 클라이언트에는 raw
storage_uri를 노출하지 않는다. - 다운로드/미리보기는
assetId기반 resolver endpoint나 presigned redirect로 처리한다.
2. StoredAsset는 app이 소유
common에는 계약만 둔다.StorageUriObjectStoragePort- download/open 모델
app은 구현과 공통 자산 메타데이터를 소유한다.meetpie,deskpie는stored_asset_id만 참조하도록 붙인다.
1차 후보 필드
idstorage_uriaccess_level(PUBLIC,PRIVATE)original_filenamecontent_typecontent_lengthstored_lengthchecksum_sha256media_typewidth,heightattributes jsonbcreated_at,created_by
3. 접근 정책은 PRIVATE 기본, PUBLIC 예외
- 기본값은
PRIVATE - bucket/object는 private-first로 운영
PUBLIC은 명시적 publish 자산만 허용- 1차 후보:
meetpie og_image
- 1차 후보:
- private asset은 앱에서 권한 체크 후 stream 또는 short-lived signed URL 발급
- public asset은 public endpoint 또는 public redirect로 제공
4. 1차 적용 대상은 meetpie og_image
- 현재
MyNamecardEntity.ogImage는 DBbytea저장이다. - 1차는
og_image_asset_id로 바꾸고, 응답은 기존처럼 public OG endpoint를 유지한다. - 이 단계에서 object storage +
StoredAsset의 end-to-end를 검증한다.
5. 후속 적용 대상
meetpienamecard 내부 이미지- persisted model에는
assetId만 두고, 렌더 URL은 서버/세션에서 해석
- persisted model에는
deskpienote/file attachment- attachment/link 모델은 서비스별 요구가 정리된 뒤 별도 도입
작업 단위 제안
-
StoredAssetmigration / entity / repository 추가 - asset public/private serving contract 추가
-
meetpieog_image_asset_id전환 -
namecard내부 이미지의 persistedimageUrl/data:image제거 설계 -
deskpienote/file attachment 후속 스펙 작성
완료 기준
app이 공통 자산 메타데이터를 소유한다.meetpie og_image가 object storage +StoredAsset를 실제 사용한다.- raw
storage_uri를 FE로 직접 노출하지 않는다. - public/private asset serving 정책이 문서와 코드에 일치한다.
Reactions are currently unavailable