[swift] Swift에서 Firebase Storage를 사용한 파일 업로드 및 다운로드 구현

Firebase는 개발자들이 클라우드에서 파일을 업로드, 다운로드, 저장할 수 있는 Firebase Storage 기능을 제공합니다. 이 기능을 활용하여 Swift에서 파일 업로드와 다운로드를 어떻게 구현할 수 있는지 알아보겠습니다.

Firebase 프로젝트 설정

Firebase Storage를 사용하기 위해서는 먼저 Firebase 프로젝트에 Storage를 활성화해야 합니다. Firebase 콘솔에서 프로젝트를 선택한 후, “Storage” 탭으로 이동하여 Storage를 활성화하세요.

Firebase SDK 설치

Swift에서 Firebase Storage를 사용하기 위해서는 Firebase SDK를 프로젝트에 추가해야 합니다. CocoaPods를 사용하여 Firebase SDK를 설치하는 방법은 다음과 같습니다.

  1. Podfile 파일을 프로젝트 폴더에 생성합니다.
  2. 아래의 코드를 Podfile 파일에 추가합니다.
platform :ios, '13.0'

target 'YourProjectName' do
  use_frameworks!
  pod 'Firebase/Storage'
end
  1. 터미널을 열고 프로젝트 폴더로 이동한 후, 아래의 명령어를 실행하여 Firebase SDK를 설치합니다.
$ pod install

파일 업로드

Firebase Storage를 사용하여 파일을 업로드하는 방법은 간단합니다. 먼저 Firebase SDK를 초기화해야 합니다. 초기화는 앱의 AppDelegate에서 수행하는 것이 좋습니다. 아래의 코드를 참고하세요.

import UIKit
import Firebase
import FirebaseStorage

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        // 필요한 경우 다른 Firebase 모듈도 초기화할 수 있습니다.
        return true
    }
    
}

파일을 업로드하려면 다음과 같은 코드를 사용합니다.

import FirebaseStorage

let storage = Storage.storage()
let storageRef = storage.reference()

// 업로드할 파일의 참조 경로 생성
let fileRef = storageRef.child("images/example.jpg")

// 업로드할 파일의 로컬 경로 생성
let localFile = Bundle.main.url(forResource: "example", withExtension: "jpg")!

// 파일 업로드
let metadata = StorageMetadata()
metadata.contentType = "image/jpeg"

let uploadTask = fileRef.putFile(from: localFile, metadata: metadata) { (metadata, error) in
    guard let metadata = metadata else {
        // 업로드 실패
        print("Error uploading file:", error?.localizedDescription)
        return
    }
    
    // 업로드 성공
    print("File uploaded. Download URL:", metadata.downloadURL()?.absoluteString)
}

// 업로드 진행률 모니터링
uploadTask.observe(.progress) { snapshot in
    let percentComplete = Double(snapshot.progress!.completedUnitCount) / Double(snapshot.progress!.totalUnitCount) * 100
    print("Upload progress: \(percentComplete)%")
}

파일 다운로드

Firebase Storage에서 파일을 다운로드하는 방법도 간단합니다. 다음과 같은 코드를 사용하세요.

import FirebaseStorage

let storage = Storage.storage()
let storageRef = storage.reference()

// 다운로드할 파일의 참조 경로 생성
let fileRef = storageRef.child("images/example.jpg")

// 임시 파일로 다운로드
let tempFile = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("example.jpg")

fileRef.write(toFile: tempFile) { (url, error) in
    if let url = url {
        // 다운로드 성공
        print("File downloaded to:", url.path)
    } else {
        // 다운로드 실패
        print("Error downloading file:", error?.localizedDescription)
    }
}

결론

이제 Firebase Storage를 사용하여 Swift에서 파일 업로드와 다운로드를 구현하는 방법을 알아보았습니다. Firebase SDK를 프로젝트에 추가하고, 적절한 메소드와 경로를 사용하여 코드를 작성하면 Firebase Storage를 통해 파일을 쉽게 업로드하고 다운로드할 수 있습니다. Firebase 공식 문서를 참고하여 더 다양한 기능을 활용해보세요.

참고 자료