โœ๏ธ TIL

[ TIL ] ํ .. ๋‚ด์ผ์€ ๋” ์—ด์‹ฌํžˆ ํ•˜๊ธฐ๋‹ค..? / 24๋…„ 5์›” 1์ผ / URLSession๊ณผ Alamofire

EarthSea 2024. 5. 2. 00:44

 

์˜ค๋Š˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ( ํ•œ.. ํ•œ๋ฌธ์ œ.. )

๋ธ”๊พธ๋ฅผ ์กฐ๊ธˆํ•˜๊ณ  ( ์•„๋‹ˆ.. ๋งŽ์ดํ•˜๊ณ .. )

๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ( ์ •๋ฆฌ๋Š” ์•ˆํ•˜๊ณ .. )

๋‚ด์ผ๊นŒ์ง€ ์ œ์ถœํ•ด์•ผํ•˜๋Š” Github ๊ณผ์ œ๋ฅผ ์—ด์‹ฌํžˆ ํ–ˆ์–ด์š”!

 

 

์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์˜ค๋ฅ˜

ํ .. ์•„๊นŒ๊นŒ์ง€๋Š” ๋ถ„๋ช…ํžˆ ๋˜์—ˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์˜ค๋ฅ˜๊ฐ€ ๋– ์„œ

์–ด๋–ค ํ”„๋กœ์ ํŠธ์ด๋“  ๋‹ค ์ผœ์ง€์งˆ ์•Š๋”๋ผ๊ตฌ์š”!

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜•์„ฑํ•˜๋Š”๋ฐ๋„ ์ €๋ ‡๊ฒŒ ๋– ์„œ ์ธํ„ฐ๋„ท์—๋„ ์ณ๋ณด๊ณ , ๊น”๋ผ์„œ 17.4 ๋„ ๋‹ค์‹œ ๊น”์•˜๋Š”๋ฐ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜์˜€์–ด์š”!

 

 

ํ .. ์ปดํ“จํ„ฐ๋ฅผ ํ•œ๋ฒˆ ๊ป๋‹ค๊ฐ€ ์ผœ๋ด์•ผ๊ฒ ๋‹ค ํ•˜๊ณ ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ๊ป๋‹ค๊ฐ€ ํ‚ค๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค~ ^_^

๋ฌด์Šจ ์˜ค๋ฅ˜์ธ์ง€๋Š” ์•„์ง๋„ ๋ชจ๋ฅด๊ฒ ์–ด์š”ใ… 

 

URLSession๊ณผ Alamofire

์˜ค๋Š˜ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ URLSession๊ณผ Alamofire ๋ณต์Šต ๊ฒธ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‹ค ๊ตฌํ˜„ํ•ด๋ณด์•˜์–ด์š”!

 

 

Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ํ”„๋กœ์ ํŠธ -> Package Depedencies -> Package ์—์„œ ์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊นƒํ—™ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋‹ค์šด๋ฐ›์œผ๋ฉด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค!

 

 

 

URLSession

// ์œ ์ € ํ”„๋กœํ•„
func fetchUserProfile(userName: String, completion: @escaping (Result<GithubUser, Error>) -> Void) {
    guard let url = URL(string: url+"\(userName)") else {
        completion(.failure(NSError(domain: "URL ๋ณ€ํ™˜ ์‹คํŒจ", code: 401)))
        return
    }
    
    var request = URLRequest(url: url)
    
    URLSession.shared.dataTask(with: request) { data, response, error in
        if let error {
            completion(.failure(error))
            return
        }
        
        guard let safeData = data else {
            completion(.failure(NSError(domain: "data๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ", code: 402)))
            return
        }
        
        do {
            let user = try JSONDecoder().decode(GithubUser.self, from: safeData)
            completion(.success(user))
        } catch {
            completion(.failure(error))
        }
    }.resume()
}
// ๋ ˆํฌ์ง€ํ† ๋ฆฌ
func fetchUserRepository(userName: String, page: Int, completion: @escaping (Result<[GitRepository], Error>) -> Void) {
    guard let url = URL(string: url+"\(userName)?page=\(page)") else {
        completion(.failure(NSError.self as! Error))
        return
    }
    
    var request = URLRequest(url: url)
    
    URLSession.shared.dataTask(with: request) { data, response, error in
        if let error {
            completion(.failure(error))
            return
        }
        
        guard let safeData = data else {
            completion(.failure(NSError.self as! Error))
            return
        }
        
        do {
            let user = try JSONDecoder().decode([GitRepository].self, from: safeData)
            completion(.success(user))
        } catch {
            completion(.failure(error))
        }
        
    }.resume()
}

 

 

Alamofire

// ์œ ์ € ํ”„๋กœํ•„
func fetchUserProfile(userName: String, completion: @escaping (Result<GithubUser, Error>) -> Void) {
    let url = url + "\(userName)"
    
    AF.request(url).responseDecodable(of: GithubUser.self) { response in
        switch response.result {
        case .success(let user):
            completion(.success(user))
        case .failure(let error):
            completion(.failure(error))
        }
    }
}

// ๋ ˆํฌ์ง€ํ† ๋ฆฌ
func fetchUserRepository(userName: String, page: Int, completion: @escaping (Result<[GitRepository], Error>) -> Void) {
    let url = url + "\(userName)?page=\(page)"
    
    AF.request(url).responseDecodable(of: [GitRepository].self) { response in
        switch response.result {
        case .success(let repositories):
            completion(.success(repositories))
        case .failure(let error):
            completion(.failure(error))
        }
    }
}

 

URLSession์œผ๋กœ ํ†ต์‹ ํ•˜๋‹ค๊ฐ€ Alamofire๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋‹ˆ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค! ์•„์ง ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด URLSession ๋ณด๋‹ค๋Š” ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์ด๋ฒˆ ์ฃผ์ฐจ์— ๋‚˜์˜จ ๊ณผ์ œ Alamofire๋ฅผ ์ด์šฉํ•ด์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ง„ํ–‰ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค!!