플러터 개발자로서 처음으로 개발한 나비일기장 앱을 구글 플레이스토어에 배포한 지 이제 2주가 지났다.
그 동안 여러 가지 피드백을 받으며 보완 작업을 해왔지만, 최근 정말 큰 문제에 봉착했다.
바로 파이어베이스 스토리지에서 발생한 용량 문제였다.
앱에서 사용자가 이미지 파일을 업로드하면 원본 그대로 저장이 되는데, 시간이 지날수록 스토리지 용량이 급격히 증가하고 있다는 것을 발견했다.
몇몇 사용자가 올린 이미지들이 고용량의 원본 파일로 업로드되었고, 그 결과 스토리지 용량이 빠르게 차고 있었다.
이 문제를 발견했을 때, 난 학원에서 심화 과정을 학습하지 못한 결과라고 생각하면서 무능함을 느꼈다.
하지만 이런 문제가 발생한 이유는 단순히 학습 부족 때문만이 아니다. 사실, 비용 문제도 연관이 깊다.
사용자가 올린 고용량 이미지가 계속 쌓이게 되면, 이는 비용 지불 문제로 이어질 수 있기 때문에 해결책이 시급했다.
이 문제는 여러 이슈 중에서도 가장 중요한 문제로 다가왔다.
이미지 압축을 통해 용량을 줄여야 한다는 결론에 도달했다.
문제 해결: 이미지 압축 구현
이미지 파일을 압축하여 업로드하는 방법을 찾아야 했다.
그래서 나는 Flutter에서 이미지 압축을 도와주는 라이브러리인 flutter_image_compress를 사용해 이미지 압축 기능을 구현했다.
다음은 내가 작성한 이미지 압축 함수이다.
Future<File> compressImage(File imageFile) async {
final tempDir = await getTemporaryDirectory();
final targetPath = "${tempDir.path}/${DateTime.now().millisecondsSinceEpoch}.jpg";
final compressedImage = await FlutterImageCompress.compressAndGetFile(
imageFile.absolute.path,
targetPath,
quality: 50, // 압축 비율 50%
);
return compressedImage!;
}
위의 코드는 이미지의 압축 비율을 50%로 설정하여 이미지를 압축한 후, 임시 디렉토리에 저장하는 방식이다.
이 함수를 통해 원본 이미지의 용량을 현저하게 줄일 수 있었다.
하지만 이게 끝이 아니었다. 압축된 이미지를 그냥 업로드하는 것도 좋지만, 이미지 크기와 비율을 적절히 조정하여 더 최적화된 이미지를 업로드할 필요가 있었다.
그래서 이미지 자르기 기능도 추가했다.
이를 통해 사용자가 업로드하는 이미지가 너무 크거나 불필요한 부분을 포함하고 있지 않도록 하였다.
이미지 자르기 및 최적화
다음은 이미지 자르기 기능을 추가한 코드이다.
// 이미지 자르기
Future<void> cropImage(String imagePath) async {
const MAX_WIDTH = 810;
const MAX_HEIGHT = 540;
const COMPRESS_QUALITY = 75;
File? croppedImage = await ImageCropper.cropImage(
sourcePath: imagePath, // 이미지 경로
maxWidth: MAX_WIDTH, // 이미지 최대 너비
maxHeight: MAX_HEIGHT, // 이미지 최대 높이
compressQuality: COMPRESS_QUALITY // 이미지 압축 품질
);
if(croppedImage != null) uploadImage(croppedImage.path!);
}
위의 코드에서는 이미지를 최대 크기로 자르고, 압축 품질을 75%로 설정하여, 필요한 부분만 남기고 용량을 줄이는 방식으로 이미지를 최적화했다.
이렇게 자르고 압축된 이미지를 다시 업로드하면, 용량을 크게 줄이면서도 품질을 어느 정도 유지할 수 있다.
더 나은 방향으로 나아가기 위해
이번 경험을 통해 나는 이미지 관리의 중요성을 다시 한 번 깨달았다.
앱 개발에서는 이런 작은 디테일들이 큰 문제로 이어질 수 있기 때문에, 처음부터 효율적인 방법을 찾는 것이 중요하다는 것을 배웠다.
그리고 학습이 부족했던 점도 있지만, 결국에는 직접 문제를 해결하는 방법을 찾을 수 있었다.
이제는 이 문제를 해결할 수 있었으니, 앱의 성능과 비용 절감 측면에서 확실한 개선을 할 수 있었다.
앞으로도 이런 문제를 예방하고 해결하는 방법을 더 많이 배우고, 앱의 완성도를 높여 나갈 것이다.
'50 year old flutter developer challenge' 카테고리의 다른 글
[50살에 플러터 개발 도전기]2024년 12월 4일, 플러터 개발자를 향한 첫 라이브 코딩 면접 (4) | 2024.12.05 |
---|---|
[50살에 플러터 개발 도전기] 파이어스토어 Storage 설치 후 iOS 빌드 안되는 문제 해결하기 (0) | 2024.12.03 |
[50살에 플러터 개발 도전기] 플러터 50대 개발자의 꿈, 그리고 Tester Share의 시작 (1) | 2024.11.24 |
[50살에 플러터 개발 도전기] 50세 개발자의 이야기: 나비일기장 탄생 비화 (2) | 2024.11.22 |
[50살에 플러터 개발 도전기] 50세에 개발자 꿈꾸며, 플러터로 첫걸음을 내딛다 - 100세 인생 나머지 50년을 위한 도전기 (2) | 2024.11.21 |