Alamofire 활용하여 내 Github 만들기 (1)

오늘은 챌린지과제인 Alamofire를 활용한 네트워킹 과정을 통해 내 github를 가져와 앱 만들기를 시작했다.

 

URLSession 보다 손쉽다고 여기저기서 얘기를 들어서 그런가.. 오히려 URLSession 보다 적용이 어렵다.. 오늘 많은 시간을 넣었지만 데이터 연동에 성공하지 못했다..

 

데이터만 연결되면 금방 만들 것 같은데.. 어렵다..


Alamofire 설치하기

먼저 Alamofire를 사용하려면 내 프로젝트에 깔아야 사용이 가능하니 일단 먼저 깔아보자. 원래는 홈브루를 깔아 설치하는 방법을 사용 했는데

 

이것보다 더 쉬운 방법인 SPM 을 사용해 손쉽게 적용시켜주었다.

먼저 프로젝트를 선택하고 여기서 상단의 Package Dependencies 를 눌러 들어가면 이렇게 넣을 수 있는 곳이 등장한다.

플러스를 눌러 해당하는 라이브러리의 깃허브 주소를 넣어주면 쉽게 넣을 수 있다.


Github API 가져오기

그 이후 깃허브 API 의 내 아이디를 넣어 접속하면 이렇게 API 정보를 받을 수 있다.

{
  "login": "",
  "id": ,
  "node_id": "",
  "avatar_url": "h",
  "gravatar_id": "",
  "url": "",
	등 등 등
}

이 정보를 바탕으로 데이터 모델링을 동일한 이름으로 잡아준다.

struct GithubUser: Decodable {
    let login: String
    let name: String
    let avatarUrl: String
    let bio: String
    
    enum CodingKeys: String, CodingKey {
        case login
        case name
        case avatarUrl = "avater_url"
        case bio
    }
}

Decodable 프로토콜을 적용해 받아주고 변경할 이름이 있을 경우 CodingKeys 열거형을 가져와 이름을 임의로 변경해 줄 수 있다.

여기는 이전 WishList 를 만들면서 경험해 봐서 익숙해 금방 할 수 있었다.


Alamofire GET요청 함수

이제 Alamofire 를 통해 위에서 확인했던 API 데이터를 받아올 수 있도록 GET 요청 함수를 구현해보자!

 

먼저 새로운 파일을 하나 만들어 NetworkingManager 를 만들어 데이터 요청하는 함수를 구현한다.

final class NetworkingManager {
    let url = "<https://api.github.com/users/SijongKim93>"
    
    func fetchUser(userName: String, completion: @escaping ((Result<githubuser, error="">) -> Void)) {
        let url = "\\(self.url)\\(userName)"
        
        AF.request(url).responseDecodable(of: GithubUser.self) { response in
            switch response.result {
            case .success(let user):
                completion(.success(user))
            case .failure(let error):
                completion(.failure(error))
                
            }
        }
    }
}
</githubuser,>

어제 배운 Result 타입으로 코드를 간결하게 구현할 수 있다는 점이 배우니 보이기 시작하는 것 같다.

 

하지만 아직 내가 구현할 정도로 익숙하지 않으니 여러번 보며 이해할 수 있도록 노력하자.

 

URLSession 보다는 조금 더 간결하고 깔끔하게 구현할 수 있는 것 같지만 아직 처음이라 그런지 생소해서 데이터 받아오는데 아직 성공하지 못했다..

 

일단 데이터를 받아올 수 있는 함수를 구현했으니, 데이터를 받을 컴포넌트들이 있는 VC로 이동하자


GET 받은 데이터 연결하기

VC로 넘어왔으니 제일 먼저 해야할 건 역시 NetworkingManager 를 가져와서 변수에 담아주는 일이다.

let networkingManager = NetworkingManager()

그 이후 일단 데이터가 정상적으로 받아지고 있는지 확인해보자

networkingManager.fetchUser() { result in
    switch result {
    case .success(_):
        print("AA")
    case .failure(let error):
        print(error.localizedDescription)
    }
}

이렇게 넣어 데이터가 정상적으로 받아지고 있는지 확인해보니..

후.. 속상하다.. 오늘은 여기까지 해야할 것 같다.

 

내일은 정상적으로 데이터 연동도 되고 끝까지 다 해결해서 기쁜 마음으로 블로그를 쓸 수 있기를 기원한다..!