seong_hye, the developer

Swift) Alamofire에 대해 알아보자 본문

IOS

Swift) Alamofire에 대해 알아보자

seong_hye 2022. 8. 2.

📘 Alamofire

Swift에서 가장 널리 쓰이는 HTTP 네트워킹 라이브러리

복잡한 URLSession 코드를 간단하게 만들고,

REST API 요청/응답처리, 파일 업로드/ 다운로드, JSON 파싱, 인증 등을 쉽게 처리할 수 있음

 

Alamofire = Swift의 간편하고 강력한 HTTP 통신 라이브러리


🔹 주요 기능

기능 설명
HTTP 요청 GET, POST, PUT, DELETE 등 API 요청
JSON 처리 자동으로 JSON -> Swift 객체로 파싱 가능
인증/헤더 처리 토큰, 커스텀 헤더 쉽게 추가 가능
파라미터 인코딩  URL, JSON, multipart 등 지원
파일 업로드/ 다운로드 Progress 추적 가능
오류 처리 상태코드, 네트워크 실패 등 깔끔하게 관리
오쳥 시간 측정, 리트라이 고급 요청 관리 가능

🔹설치 방법

- XCode > File > Add Packages Dependences ...

URL : https://github.com/Alamofire/Alamofire

 

- CocoaPods 사용해 라이브러리 받을 경우

pod 'Alamofire'

🔹 기본 사용 예제

✅ GET 요청

import Alamofire

AF.request("https://api.github.com/users")
	.responseJSON { response in
		// 값 받아서 행할 행동
    }

 

✅ POST 요청

let params : [String: Any] = ["id" : id, "password" : password ]

AF.request("https://api.github.com/users",
		method: .post,
        parameters: params,
        encoding: JSONEncoding.default)
    .responseJSON { response in
    	//행할 행동
    }

🔍 .responseJSON() vs .response() vs .responseDecodable()의 차이

- .responseJSON()은 응답 Data를 자동으로 JSON으로 파싱해줌

- .response()는 가장 낮은 수준의 응답 (Data, Response, Error)를 그대로 제공함

- .responseDecodable()은 응답 Data를 모델에 맞춰 매핑해줌

항목 response() responseJSON() responseDecodable()
응답 데이터 Data?, URLResopnse?, Error? Any 타입 (JSON 파싱된 객체) Codable 객체
파싱 여부 직접 해야 함 내부에서 JSONSerialization 사용 Decodable로 자동 디코딩
타입 안전성 X X
성능 빠름 (raw 처리) 중간 가장 효율적 (타입 매핑)
사용 난이도 중간 ~ 높음 낮음 가장 쉬움
권장 이미지, 파일 등 비구조 데이터 단순 JSON 확인용 실제 모델 바인딩 시 최적

 

➡️ 사용 예제

📌 response() : 가장 낮은 레벨

AF.request(url)
	.response { response in
    	if let data = response.data {
        	// data 관련 내용 정리
        }
    }

- 수동 파싱 필요 (JSONSerialization)

- 바이너리나 이미지 등 처리에 유용

 

📌 responseJSON() : 간단한 JSON 처리용

AF.request(url)
	.responseJSON { response in
    	switch response.result {
        case .success(let value):
        	// 성공 시 코드
        case .failure(let error):
        	// 실패 시 코드
        }
    }

- 내부적으로 JSONSerialization 사용

- 결과는 Any 타입 (딕셔너리, 배열 등)


📌 responseDecodable() : 모델 매핑 최적

struct Login: Decodable {
	let id: String
    let password: String
}

AF.request(url)
	.requestDecodable(of: Login.self) { response in
    	switch response.result {
        case .success(let user):
        	// 성공 시 코드
        case .failure(let error):
        	// 실패 시 코드
        }
    }

- Codable 모델과 자동 매핑

-타입 안전하며 유지보수 쉬움

 

➡️ 사용하는 경우

상황 추천 메서드
파일 다운로드, 이미지 등 response()
단순 JOSN 확인/디버깅 responseJSON()
서버 응답을 Swift 객체로 사용  responseDecodable() (가장 일반적)

 


🔹 Alamofire vs URL Session

항목 Alamofire URLSession (기본)
코드 간결성 매우 간단 복잡함
JSON 처리 자동화 수동 파싱 필요
요청 구성 유연 (헤더, 인코딩 등) 제한적
에러 처리 명확한 enum 복잡하고 다양한 케이스
프로젝트 규모 중 ~ 대형에 적합 소형이나 기본 앱에 충분

Comments