[SwiftUI] - Firebase의 Storage 사용량을 최소화 하기

Ben·2023년 5월 31일
0

iOS

목록 보기
6/11
post-thumbnail

이번 포스트에서는 멋사 iOS 앱 스쿨 최종 플젝을 할 때,
Persona (이하 사용자) 가 프로필 이미지를 업데이트하여 바꿀 경우
Storage에 이미지를 저장하는 과정에서 무료 사용량 한도 이상으로 데이터를 사용해
Storage가 터지는 현상을 방지하고자 내가 해결한 방법에 대해 작성해보려고 한다.

❗ SwiftUI Framework와 MVVM Design Patterm, Firebase 기반으로 작성되었습니다.

Trouble-shooting 💥

위 Image Picker에서

await userInfoStore.uploadPhoto(editImage.pngData())

editImage에 .pngData() 메서드로 설정을 해주었다.
↪ 모든 img가 png 형식으로 Storage에 저장되다보니 데이터가 커지고 Storage의 한도량에 금방 다다랐다.

그래서 img를 PNG화 시키지 않고 JPEG화 하는 방법을 찾아보았더니
jpegData(compressionQuality:) 메서드를 쓰면 된다고 한다.

await userInfoStore.uploadPhoto(editImage.jpegData(compressionQuality: 0.5))

여기서 compressionQuality 인수는 압축 퀄리티를 뜻하며
0.0 ~ 1.0 사이의 값을 받는다

  • compressionQuality: 0.0 (-> 최대 압축 즉, 최저 품질)
  • compressionQuality: 1.0 (-> 최소 압축 즉, 최고 품질)

퀄리티 값은 무난한게 0.5 값으로 줬다.


그리고 혹시 몰라서 pngData() 와 jpegData(compressionQuality: 0.5) 를 사용했을 때 Image Picker의 Byte 용량을 조사해 보았다.

  • pngData()
    28060981 Byte, 11314250 Byte, 7063988 Byte, 11227530 Byte, 24888535 Byte, 18752666 Byte

  • jpegData(compressionQuality: 0.5)
    2051228 Byte, 710070 Byte, 500606 Byte, 1060244 Byte, 835768 Byte, 692560 Byte

압축 퀄리티를 0.5로 잡아도 JPEG로 설정했을 때, 평균적으로 약 93% 감소되었다.
결국 위 해결방법으로 이미지 데이터 사용량을 줄일 수 있었다.

끝ㅌ!

profile
 iOS Developer

0개의 댓글