pjhcsols / VirtualFitting_System

가상피팅&의류입점 플랫폼
4 stars 0 forks source link

[BE_2] User(storage) & Product(s3) Image 처리 Scheduler 구현 #31

Closed pjhcsols closed 2 months ago

pjhcsols commented 2 months ago

product

로직 요약:

  1. 브랜드 유저가 상품 등록 페이지에서 상품 정보를 입력합니다.
  2. 상품 설명이나 이름을 입력합니다.
  3. 브랜드 유저가 상품 사진을 업로드합니다. 이때, 사진은 멀티파트로 백엔드에 전달됩니다.
  4. 백엔드는 전달받은 사진을 처리하여 S3 스토리지에 저장하고, 해당 이미지에 대한 URL을 생성하여 프론트에 반환합니다.
  5. 프론트는 반환된 URL을 받아서 상품 객체에 저장합니다. 이미지를 교체할 경우, 기존의 이미지 URL을 버리고 새로운 URL로 교체합니다.
  6. 사용자가 상품 등록 버튼을 누르면, 이미지 URL을 포함한 상품 객체를 서버에게 전송하여 저장합니다.

[User Image Scheduler] 수정

변경전: 배치 스케줄러로 사용자 url 전체 삭제 및 로컬 서버에 저장된 이미지 전체 삭제 24시간 기준 기존 코드: userImageStorage의 모든 이미지 데이터를 스토리지에서 제거 후 DB의 User 모든 이미지 Url 초기화

변경후: 사용자 이미지를 관리하는 UserImageScheduler 클래스입니다. 여기에는 스프링의 @scheduled 어노테이션을 사용하여 주기적으로 실행되는 deleteUnusedImages 메서드가 있습니다. 이 메서드는 다음과 같은 주요 기능을 수행합니다: [교차 검증 수행] 디렉토리에 있는 이미지 파일 중에서 데이터베이스에 없는 파일 삭제: 디렉토리에 있는 이미지 파일과 데이터베이스에 저장된 이미지 URL을 비교하여 데이터베이스에 없는 파일을 삭제합니다. 데이터베이스에만 있는 이미지 URL을 null로 변경: 데이터베이스에만 있는 이미지 URL을 찾아 해당 사용자의 이미지 URL을 null로 변경합니다.

[product Image Scheduler] 구현

s3스토리지와 상품 데이터 베이스 비교 후 없는 url s3스토리지에서 일괄 삭제 →00시 기준 주기적으로 실행되는 작업으로, 사용하지 않는 상품 이미지를 데이터베이스와 S3 스토리지에서 삭제하는 기능을 수행합니다. 이를 위해 다음과 같은 로직을 따릅니다: deleteUnusedProductImages() 메서드는 @scheduled 어노테이션에 의해 주기적으로 실행됩니다. 초기 지연 후에 시작하며, 그 이후에는 지정된 시간 간격으로 실행됩니다. 먼저, ProductService와 S3StorageService를 사용하여 데이터베이스에서 모든 상품 이미지 URL과 S3 스토리지에서 모든 이미지 URL을 가져옵니다. 가져온 데이터베이스 URL과 S3 스토리지 URL을 로깅하여 확인합니다. 이후, s3Urls 리스트를 스트림으로 변환하고, filter() 함수를 사용하여 해당 URL이 databaseUrls에 포함되지 않는 경우만을 필터링합니다. 이를 통해 데이터베이스에 없는 URL들만을 포함하는 새로운 리스트 urlsToDelete를 생성합니다. urlsToDelete에 있는 URL들을 사용하여 S3 스토리지에서 이미지를 삭제합니다. 작업이 완료되면 완료 메시지를 로깅합니다. 주기적으로 실행되는 이 작업을 통해 데이터베이스와 S3 스토리지에서 상품 이미지를 효율적으로 관리하고 불필요한 이미지를 삭제할 수 있습니다.

KimGona commented 2 months ago

confirm

kimmokalover commented 2 months ago

confirm

ryunaeun commented 2 months ago

confirm