[iOS CS Study] Alamofire

Oxong·2021년 9월 1일
0

21.08.27
공부한 것을 정리하는 용도의 글이므로 100% 정확하지 않을 수 있습니다.
참고용으로만 봐주시고, 내용이 부족하다고 느끼신다면 다른 글도 보시는 것이 좋습니다.
+ 틀린 부분, 수정해야 할 부분은 언제든지 피드백 주세요. 😊
                                            by. ryalya





Alamofire


iOS에서 서버 통신을 도와주는 Swift 기반 HTTP 라이브러리.

URLSession 을 기반으로 http 통신(GET, POST, DELETE, PATCH, Download)이 가능. → Rest API 통신 지원

네트워킹 작업을 단순화하고 네트워킹을 위한 다양한 메소드와 JSON 파싱, 응답 직렬화(response serialization), 인증(authentication) 등 다양한 기능 제공.

cocoddocs - Alamofire4.5.1


라이브러리 설치 방법


1. git clone

Xcode > source control > clone > https://github.com/Alamofire/Alamofire.git 입력 > master branch 내려받기

Alamofire 프로젝트의 라이브러리를 동적으로 기존 프로젝트에 연결하고 타깃 의존성을 설정해 줘야 한다.

맥 파인더에서 Alamofire 프로젝트를 열고, Alamofire.xcodeproj 파일을 기존 프로젝트에 드래그하여 복사한다.

서브 모듈로 추가된 Alamofire 프로젝트 자체를 기존 프로젝트에 연결하는 과정으로, 실제 파일이 복사되는 것이 아니라 참조 정보만 생성된다.

타깃 의존성을 설정하기 위해 다음과 같은 순서대로 실행한다.

좌측 네비게이터에서 프로젝트 클릭 > Build Phases > Dependencies 하위 항목에 + > Alamofire 추가

기존 프로젝트 최상단에 import Alamofire 를 추가한뒤 컴파일한다.

컴파일시 오류가 뜨지 않는다면 제대로 추가된 것이다.


2. cocoa pods

CocoaPods 는 코코아 프로젝트를 위한 패키지 관리 도구이다. 프로젝트에 필요한 외부 라이브러리를 설치하기 쉽게 도와준다.

파이썬의 pip, node 의 npm 과 비슷한 역할을 한다.

코코아팟은 ruby 언어를 통해 만들어진 관리 도구이다.

라이브러리 주소
https://github.com/Alamofire/Alamofire

터미널에 아래 명령어 입력 후, Password (자신의 Mac 암호)입력.

sudo gem install cocoapods

Xcode를 종료한 후, 할 것.

터미널에서 프로젝트 경로로 이동 후, pod init을 하면 해당 경로에 Pod file이 생성된다.

open -e podfile 명령어 또는 직접 파일을 열어서 아래 설치 코드를 입력 후 저장한다.

pod 'Alamofire', '~> 5.2'

터미널에 아래 명령어를 입력하여 pod을 설치한다.

pod install

오류 없이 진행이 잘 되었다면 프로젝트 경로에 프로젝트명.xcworkspace 파일이 생겨있다.

앞으로는 이 파일을 실행하여 프로젝트를 열어야 한다.



라이브러리 사용


위의 과정을 거쳐서 프로젝트를 열었다면 코드 최상단에 import Alamofire를 추가해본다.

에러 없이 빌드가 된다면 사용할 준비가 완료된 것이다.

Alamofire 는 비동기 기반으로 네트워크 응답을 처리하기 때문에, 응답 메시지를 reponse 메소드의 결과값으로 반환받을 수 없다.

서버에서 응답이 도착했을때 실행될 로직을 클로저 형태로 작성해, reponse 메소드에 넣어주어야 한다(콜백 함수).

따라서 Alamofire는 서버에서 응답이 도착하면 이를 클로저의 매개변수에 담아 호출한다.


주요 함수

Alamofire는 namespace를 AF라고 지정할 수 있다. iOS) Swift에서의 namespace란?

AF.request("호출 URL")

: 파일 전송과 관련없는 기타 HTTP 요청.

Alamofire에는 HTTPMethod라는 열거형 객체가 정의되어 있다.

public enum HTTPMethod: String{
  	case options = "OPTIONS"
  	case get = "GET"
 	case head = "HEAD"
  	case post = "POST"
  	case put = "PUT"
  	case patch = "PATCH"
  	case delete = "DELETE"
  	case connect = "CONNECT"
  	case trace = "TRACE"
  }
<예시>
AF.request("호출 URL") // default가 get → get메소드 사용시 method 지정 필요 X
AF.request("호출 URL", method: .post) // default가 get → method 지정 필요 O.
AF.request("호출 URL", method: .delete)


// 만약 전달해야 할 값이 있을 경우에는 세 번째 매개변수인 parameter를 사용한다.
// 이 변수는 키-값 형식의 Dictionary 타입을 기반으로 한다.

let param: Parameters = [
“name”: “Ryalya”,
“tel”: “010-1234-5678”
]

AF.request(“호출 URL”, method: .post, parameters: param)

HTTP 메세지에 별도의 헤더를 추가하고 싶을 경우에는 headers 매개변수를 사용할 수 있다.

이 매개변수의 타입은 HTTPHeader로, 딕셔너리 형태를 따르기 때문에 키-값 형태로 헤더를 구성하여 매개변수의 인자값으로 넣으면 이를 HTTP 메세지의 헤더로 설정한다.

let headers: HTTPHeaders = [
“Authorization”: “Basic OwfpdjfWPfjsWPDJFW0Ejdow==”,
“Accept”: “application/json”
]
AF.request(“호출 URL”, method: .post, parameters: param, encoding: JSONEncoding.default, headers: headers)

Alamofire는 URL, JSON, PropertyList ParameterEncodig을 지원한다.

ParameterEncoding protocol을 준수하는 범위 내에서 custom이 가능하다.


Response

Alamofire는 서버의 응답 메세지 처리를 지원하기 위해 다음과 같은 응답 처리 메소드를 제공한다.

  • response()
    : 응답 메세지에 특별한 처리를 하지 않음. 기본적인 형태로, URLSession 객체를 사용하는 것과 같음.

  • responseString()
    : 응답 메세지의 본문을 문자열로 처리한 후 반환.

  • responseJSON()
    : 응답 메세지의 본문을 JSON 객체로 변환하여 전달.

  • responseData()
    : 응답 메세지의본문을 바이너리 데이터로 변환하여 전달.

<예시>
AF.request(URL).responseString { response in
  print(response.result)
}


AF.upload

: 스트림, 파일 메소드 등을 통해 파일을 업로드한다.

AF.download

: 파일을 다운로드 하거나, 이미 진행중인 다운로드를 재개한다.






(+ 예제 추가)


Reference

iOS : Alamofire 를 이용한 API 호출
[iOS] Alamofire 소개 및 데모
210120 TIL) Alamofire
Alamofire에 대해
iOS Swift 라이브러리 Alamofire 사용하기
[iOS] URLSession, URLSessionDataTask 톺아보기

0개의 댓글