Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- list
- escaping
- calendar
- NotificationCenter
- SWIFTUI
- SWIFT
- struct
- Git
- array
- Switch
- IOS
- 글또
- protocol
- viewlifecycle
- Animation
- ScrollView
- self
- PushNotification
- Observer
- http
- Refresh
- singleton
- mvvm
- class
- segue
- uikit
- apns
- error
- 고차함수
- 화면전환
Archives
- Today
- Total
seong_hye, the developer
Swift) Alamofire에 대해 알아보자 본문
📘 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 | O |
성능 | 빠름 (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 | 복잡하고 다양한 케이스 |
프로젝트 규모 | 중 ~ 대형에 적합 | 소형이나 기본 앱에 충분 |
'IOS' 카테고리의 다른 글
Swift) Kingfisher에 대해 알아보기 (0) | 2022.09.20 |
---|---|
Swift) Cocoapods에 대해 알아보자 (0) | 2022.08.02 |
Swift) WidgetKit이란? (0) | 2022.08.02 |
Swift) 문법 정리 - COW(Copy-On-Write) (0) | 2022.08.02 |
Swift) 백그라운드 실행(Background Execution) (0) | 2022.08.02 |
Comments