Alamofire vs URLSession

Eden·2024년 12월 18일

iOS

목록 보기
12/18

1. 코드 비교

Alamofire 사용 예시

Alamofire는 네트워크 통신을 간편하게 처리하도록 설계된 라이브러리다.
이전에 URLSession으로 과제를 진행했었는데, 코드가 적어서 사용해보고 싶었는데 가독성이 좋다고 느끼고 이해하기가 쉬워서 좋았다.

웹에서 Axios를 사용해서 코드의 가독성을 높여주는 편리함 때문에 처음 라이브러리를 적용했던 생각이 났다.

import Alamofire

func fetchMovies(category: MovieCategory, page: Int = 1, completion: @escaping (Result<MovieResponse, Error>) -> Void) {
        let url = "\(baseURL)\(category.rawValue)"
        let parameters: [String: String] = [
            "api_key": apiKey,
            "language": "ko-KR",
            "page": "\(page)"
        ]
        
        AF.request(url, method: .get, parameters: parameters)
            .validate()
            .responseDecodable(of: MovieResponse.self) { response in
                switch response.result {
                case .success(let movieResponse):
                    completion(.success(movieResponse))
                case .failure(let error):
                    completion(.failure(error))
                }
            }
    }
}

URLSession 사용 예시

URLSession은 Swift 기본 네트워킹 API로 직접 구현하면 이렇게 해야한다. 조금 번거롭고 코드가 복잡해진다.

import Foundation

func fetchMoviesURLSession(completion: @escaping (Result<MovieResponse, Error>) -> Void) {
    let urlString = "https://api.themoviedb.org/3/movie/popular?api_key=apiKey&language=ko-KR&page=1"
    guard let url = URL(string: urlString) else { return }
    
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error))
            return
        }
        
        guard let data = data else {
            completion(.failure(NSError(domain: "DataError", code: -1, userInfo: nil)))
            return
        }
        
        do {
            let movieResponse = try JSONDecoder().decode(MovieResponse.self, from: data)
            completion(.success(movieResponse))
        } catch {
            completion(.failure(error))
        }
    }.resume()
}

2. Alamofire vs URLSession 비교

비교 항목AlamofireURLSession
학습 곡선쉬움. 사용이 간편하고 직관적임비교적 복잡. 코드량이 많아짐
코드 간결성매우 간결함 (AF.request 한 줄이면 끝)네트워크 요청, 파싱 코드 직접 작성
추가 기능자동 리트라이, 캐싱, 인코딩, 멀티파트 지원기본 기능 제공 (확장 시 코드 필요)
의존성외부 라이브러리 (Alamofire 설치 필요)내장 라이브러리 (추가 설치 불필요)
에러 핸들링쉽게 구현 가능 (.validate())수동으로 HTTP 상태 코드 처리
커스터마이징커스터마이징 옵션 제공원하는 대로 세밀하게 설정 가능
테스트 및 유지보수단순하고 유지보수 쉬움테스트가 번거롭고 코드가 복잡해짐
성능 및 경량화약간의 오버헤드 (라이브러리 사용)가장 가벼움 (Swift 내장 기능 사용)
커뮤니티 및 지원활발한 커뮤니티와 문서 제공공식 Apple 문서만 참조 가능

3. 언제 무엇을 선택해야 할까?

Alamofire를 사용할 때

  1. 빠르게 구현이 필요할 때 (간단한 네트워크 호출).
  2. HTTP 요청이 많고 다양한 기능이 필요한 경우 (리트라이, 인코딩, 캐싱 등).
  3. 코드 간결성과 유지보수성을 중요시할 때.
  4. 프로젝트에서 외부 라이브러리를 사용하는 것이 허용될 때.

추천 상황

  • RESTful API 호출이 많은 앱
  • 단순한 네트워크 요청 (로그인, 데이터 리스트 등)

URLSession을 사용할 때

  1. 의존성을 줄여야 하는 경우 (외부 라이브러리 금지).
  2. 프로젝트 규모가 작거나 기본 기능만 필요할 때.
  3. 세밀한 커스터마이징이 필요한 경우 (캐시, 설정 등).
  4. 네트워크 요청을 완전히 제어하고 싶을 때.

추천 상황

  • 시스템이나 플랫폼 개발
  • 경량화가 중요한 프로젝트
  • 외부 라이브러리 사용이 금지된 경우
profile
🌐 Frontend &&  iOS && 대학생

0개의 댓글