[swift] 서버로부터 파일 다운로드하기

iOS 앱을 개발하다 보면 서버로부터 파일을 다운로드해야 하는 경우가 있습니다. 예를 들어 이미지, 비디오, 문서 등을 다운로드하는 경우, Swift를 사용하여 간단하게 구현할 수 있습니다. 이번 포스트에서는 Swift를 사용하여 서버로부터 파일을 다운로드하는 방법에 대해 알아보겠습니다.

URL 다운로드

Swift의 URLSession을 사용하여 서버로부터 파일을 다운로드할 수 있습니다. 아래는 파일을 다운로드하고 저장하는 간단한 예제 코드입니다.

import Foundation

let fileURL = URL(string: "https://example.com/file.jpg")!

let task = URLSession.shared.downloadTask(with: fileURL) { localURL, urlResponse, error in
    if let localURL = localURL {
        if let data = try? Data(contentsOf: localURL) {
            // 파일 다운로드 완료 후 처리
            // 다운로드한 데이터를 사용하거나 파일로 저장할 수 있음
        }
    }
}

task.resume()

위의 코드에서는 URLSessiondownloadTask(with:) 메서드를 사용하여 파일을 다운로드합니다. 다운로드가 완료되면 클로저에서 파일의 로컬 경로(localURL)와 다른 관련 정보를 받아올 수 있습니다.

다운로드 진행 상황 관리

파일이 크거나 네트워크 상태가 좋지 않을 수록, 다운로드 시간이 오래 걸릴 수 있습니다. 사용자에게 정확한 다운로드 진행 상황을 표시하기 위해 URLSessionDownloadDelegate 프로토콜을 구현하여 다운로드 상태를 추적할 수 있습니다. 다운로드 진행률, 다운로드 완료, 다운로드 실패 등의 상태를 확인할 수 있습니다.

class DownloadManager: NSObject, URLSessionDownloadDelegate {
    private var downloadTask: URLSessionDownloadTask?

    func startDownload() {
        let fileURL = URL(string: "https://example.com/file.jpg")!
        let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
        downloadTask = session.downloadTask(with: fileURL)
        downloadTask?.resume()
    }

    // URLSessionDownloadDelegate 메서드 구현
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
        // 다운로드 진행 상황 업데이트
    }

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        // 다운로드 완료 후 파일 처리
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        if let error = error {
            // 다운로드 실패 처리
        }
    }
}

위의 예제에서는 URLSessionDownloadDelegate를 구현하여 다운로드 상태를 추적합니다. 다운로드 진행률을 업데이트하고, 다운로드 완료 또는 실패시에 적절한 처리를 할 수 있습니다.

마무리

Swift의 URLSession을 사용하여 서버로부터 파일을 다운로드하고 관리하는 방법에 대해 알아보았습니다. 이를 응용하여 사용자 경험을 향상시키는 다양한 기능을 추가할 수 있습니다. 안정적이고 효율적인 다운로드 기능은 iOS 애플리케이션의 핵심 요소 중 하나이므로 신중하게 다뤄져야 합니다.