[TIL] Alamofire

박주하·2025년 7월 7일

Alamofire


  • 서버와 데이터를 주고받을 때 사용하는 도구
  • 앱과 인터넷 사이를 연결해주는 다리 역할을 해주는 네트워크 라이브러리
  • URLSession보다 훨씬 간단하고 직관적
  • Swift Package Manager로 설치 후 import하여 사용 가능
📱 iOS 앱
   ↕️
Alamofire (도우미 라이브러리)
   ↕️
🌐 서버 API (뉴스, 로그인, 정보 요청 등)

왜 필요할까?

  • 앱이 서버와 통신하는 경우
  • 예: 로그인 요청 보내기, 뉴스 목록 가져오기, 이미지 업로드하기 등
    → 이런 작업은 모두 인터넷을 통해 데이터를 보내고 받는 작업임.
  • 이걸 URLSession로 직접 하려면 URL, 요청 형식, 파라미터 인코딩, 에러 처리, 데이터 파싱 등 코드가 매우 길고 복잡해짐.
  • Alamofire는 이 복잡한 걸 쉽게 해주는 도우미 도구 👍

💡 장점

  • 코드 간단: URLSession보다 훨씬 짧고 명확
  • JSON 자동 파싱: 서버 응답을 바로 구조체로 변환 가능
  • 다양한 요청 지원: GET, POST, PUT, DELETE 모두 지원
  • 파일 업로드/다운로드: 이미지 업로드도 쉽게 가능
  • 보안 & 인증 지원: 토큰 인증, HTTPS도 문제없이 지원

URLSession와의 코드 비교

1. URLSession

// 1. 주소 설정
if let url = URL(string: "url주소") {
    
    // 2. 데이터 요청
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        
        // 3. 결과 확인
        if let error = error {
            print("에러 발생: \(error)")
            return
        }
        
        guard let data = data else {
            print("데이터가 없습니다.")
            return
        }
        
        // 4. 받아온 데이터 형태 변환
        if let data = String(data: data, encoding: .utf8) {
            print("\(data)")
        }
    }
    
    // 5. 실제 시작!
    task.resume()
}

2. Alamofire

import <Alamofire

// 이 주소로 데이터 요청 후 응답 확인
AF.request("url주소").responseString { response in
    switch response.result {
    case .success(let data):
        print("\(data)")
    case .failure(let error):
        print("에러 발생: \(error)")
    }
}
  • 훨씬 간단해짐

사용 예

1. 서버에서 JSON 데이터 받기

import Alamofire

AF.request("url주소").response { response in
    if let data = response.data {
        print("서버에서 받은 데이터:", data)
    }
}
  • AF.request() → 서버에 요청 보냄
  • .response → 응답이 오면 실행됨

2. JSON 파싱

struct User: Codable {
    let name: String
    let age: Int
}

AF.request("url주소")
	.validate()
    .responseDecodable(of: User.self) { response in
        switch response.result {
        case .success(let user):
            print("사용자 이름: \(user.name)")
        case .failure(let error):
            print("에러 발생: \(error)")
        }
    }
  • .validate() → 응답 상태코드 체크 (200~299 아닐 경우 오류로 처리)
  • .responseDecodable(of:) → JSON을 자동으로 Swift 객체로 변환해줌

항목.responseDecodable.serializingDecodable
방식클로저 기반 (completion handler)async/await 기반 (비동기 함수)
리턴Void → 응답은 클로저 내부에서 처리DataResponse<T, AFError> 또는 .value로 결과
사용 가능 버전Alamofire 5+Alamofire 5.6+ 이상 (Swift 5.5+ 필요)
비동기 방식❌ 콜백 기반async/await 지원
코드 간결성중첩됨깔끔하고 Swift스럽게 작성 가능

3. POST 요청

let parameters: [String: Any] = [
    "email": "test@example.com",
    "password": "1234"
]

AF.request("url주소",
           method: .post,
           parameters: parameters,
           encoding: JSONEncoding.default)
    .responseJSON { response in
        print("로그인 결과:", response)
    }
  • 데이터를 서버에 보내는 방식
  • 예: 로그인, 회원가입, 글 작성 등

4. 헤더 넣기 (토큰 인증)

let headers: HTTPHeaders = [
    "Authorization": "Bearer abcdef123456"
]

AF.request("url주소", headers: headers)
    .responseJSON { response in
        print("내 프로필:", response)
    }

💡 Alamofire는 복잡하고 번거로운 서버 통신(네트워킹)을 매우 간단하고, 안전하며, 읽기 쉬운 코드로 만들어주는 개발자들의 필수 도구❗️

0개의 댓글