[Swift] - Alamofire 사용법
Alamofire란?
먼저 Alamofire이 무엇인지 알아보자.
Alamofire는 Swift를 기반으로 한 네트워킹 및 HTTP 클라이언트 라이브러리이다.
Apple에서 기본적으로 제공하는 URLSession도 있지만 Alamofire이 더 간편한게 네트워킹 작업을 수행할 수 있도록 설계되어 있다.
Alamofire의 주요 기능은 다음과 같다.
- HTTP 요청 및 응답 관리
- JSON 데이터 처리
- 파일 업로드 및 다운로드
- 인증 및 보안 기능
- 백그라운드에서의 네트워킹 작업 지원
Alamofire에서는 많은 편의기능을 제공하여 코드의 가독성과 유지 보수성을 향상시킬 수 있다. 하지만 만약 URLSession을 사용한다면 위의 기능들을 직접 구현해야 하므로, 보다 많은 작업이 개발자에게 직접적으로 요구된다.
Alamofire 설치
Alamofire을 사용하기 위해서는 라이브러리를 다운받아야 한다.
CocoaPod을 사용하여 Alamofire을 다운받아보자.
만약 CocoaPod을 설치하지 않았다면 참고하길 바란다.
[swift] CocoaPod 설치와 사용법
iOS 및 macOS 애플리케이션에서 사용할 수 있는 라이브러리 및 코드 모듈을 공유하기 위한 패키지 관리 도구이다. CocoaPod 사용법에 대해 배워보자. CocoaPod CocoaPod이란? CocoaPod은 개발에서 사용하는
steelbeartaeng2.tistory.com
Alamofire 설치 방법으로는 깃헙을 참고하면 된다.
GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift
Elegant HTTP Networking in Swift. Contribute to Alamofire/Alamofire development by creating an account on GitHub.
github.com
Alamofire를 이용하여 API 호출
Alamofire를 사용하기 전 다음 개념들을 이해하고 넘어가자.
1️⃣ HTTPMethod
: HTTP 요청의 메서드를 나타내는 열거형이다. 각각의 메서드는 서버에게 클라이언트가 수행하고자 하는 동작을 알려준다.
public struct HTTPMethod: RawRepresentable, Equatable, Hashable {
public static let connect = HTTPMethod(rawValue: "CONNECT")
public static let delete = HTTPMethod(rawValue: "DELETE")
public static let get = HTTPMethod(rawValue: "GET")
public static let head = HTTPMethod(rawValue: "HEAD")
public static let options = HTTPMethod(rawValue: "OPTIONS")
public static let patch = HTTPMethod(rawValue: "PATCH")
public static let post = HTTPMethod(rawValue: "POST")
public static let put = HTTPMethod(rawValue: "PUT")
public static let query = HTTPMethod(rawValue: "QUERY")
public static let trace = HTTPMethod(rawValue: "TRACE")
public let rawValue: String
public init(rawValue: String) {
self.rawValue = rawValue
}
}
- GET: resource에서 데이터 요청, 주로 데이터 가져오는 데 사용
- POST: resource에 새로운 데이터 제출, 주로 데이터 넘겨주는 회원가입 같은 작업에 사용
- PUT: resource의 내용 업데이트, 주로 resource의 전체 내용을 업데이트하는 데 사용
- DELETE: resource 삭제, 주로 데이터나 resource를 제거하는 데 사용
- PATCH: resource의 일부를 수정
2️⃣ URL
: 웹 상의 자원을 식별하기 위한 주소
let url = "https://api.example.com"
3️⃣ Parameters
: HTTP 요청의 일부로 서버에게 전달되는 데이터이다. 보통 query string이나 request body에 포함된다.
예를 들어, 로그인 요청을 보낼 때 사용자 이름과 비밀번호를 Parameters로 전달할 수 있다.
4️⃣ URLRequest
: URL 요청에 대한 모든 정보를 캡슐화하는 객체이다.
이 객체는 HTTP 요청에 필요한 모든 세부 정보( url, httpmethod, parameter 등)를 설정하고 관리하는 데 사용된다.
HTTP 요청을 생성할 때 사용되며, 주로 서버에 요청을 보내고 응답을 받는 데 사용된다.
✏️ 사용 예시
GET 요청을 보내고 응답을 확인하는 간단한 예시를 확인해보자.
import Alamofire
// GET 요청을 보낼 URL
let url = "https://api.example.com"
// Alamofire를 사용하여 GET 요청 보내기
AF.request(url, method: .get).responseJSON { response in
// 응답 확인
debugPrint(response)
}
POST 요청 보내는 건 method를 변경해주면 된다. 다른 method들도 다음과 같이 변경하여 요청보내면 된다.
POST는 데이터를 paramters에 담아 요청 보내야 하므로, login이라는 body 값을 넘겨준다.
struct Login: Encodable {
let email: String
let password: String
}
let login = Login(email: "test@test.test", password: "testPassword")
// Alamofire를 사용하여 POST 요청 보내기
AF.request("https://httpbin.org/post",
method: .post,
parameters: login,
{ response in
debugPrint(response)
}
JSONSerialization
만약 위와 같이 받은 데이터를 파싱하지 않고 그대로 print하면 데이터가 제대로 출력되지 않을 것이다.
그 이유는 서버로부터 받은 응답 데이터가 주로 JSON 형식으로 제공되기 때문이다.
이러한 JSON 데이터를 Swift에서 사용하기 위해서는 문자열이나 데이터 형태로 받은 이후에 JSONSerialization을 사용하여 파싱해야 한다.
JSONSerialization.jsonObject(with:options:)
: Foundation 프레임워크에서 제공하는 메서드로, JSON 데이터를 파싱하여 Swift의 딕셔너리나 배열과 같은 데이터 구조로 변환한다.
위의 코드를 JSONSerialization을 적용해서 파싱해보자.
import Alamofire
let url = "https://api.example.com"
// Alamofire를 사용하여 GET 요청 보내기
AF.request(url, method: .get).responseJSON { response in
if let data = response.data {
// JSON 데이터를 파싱하여 원하는 작업 수행
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("응답 데이터: \(json)")
} catch {
print("JSON 파싱 에러: \(error)")
}
}
}
그럼 응답데이터가 잘 나오는 것을 확인할 수 있을 것이다.