RxSwift와 Alamofire을 동시에 사용해 비동기 작업을 효율적으로 관리 할 수 있게되었습니다.
하지만 두가지의 외부 라이브러리를 사용하기에 앱의 크기가 커질 수 있고 추가적인 관리가 필요하게 되는 단점이 될 수도 있습니다. 더해서 UrlSession보다 메모리 오버헤드가 발생할 수 있습니다.

이제 api를 요청하기위해 url과 header에 원하는 쿼리 값을 넣어서 작성하면 요청 받을 수 있습니다.
그렇게 받아온 JSON데이터를 Decodable을 통해 사용할 수 있게 하기위해서 아래와 같이 Codable을 채택한 구조체를 만들어주면 됩니다.

작업을 하던 와중에 API요청이 한 종류만 이루어지면 된다고 생각을 했는데 추후 작업을 하다보니 다른 API도 필요성을 느껴져 구현을 했습니다.
두 가지의 API에서 필요로 하는 데이터가 같고 JSON데이터 구조도 같기에 하나의 구조체로 사용할 수 있을 줄 알았는데 나중에 보니 위도와 경도를 반환하는 값들이 String과 Double타입으로 같이 쓸 수 없게 되었습니다.
그래서 2가지 각각의 구조체로 만들려고 했지만 너무 비효율적이라고 생각해 다른 방법을 찾다보니 제네릭을 활용해 유연한 타입으로 상황에 맞는 값을 받아오면 된다는걸 알았고 그에 맞게 다시 리팩토링을 거쳤습니다.

그래서 실제 어떤 데이터 타입이 들어갈지 미리 알려줌으로써 사용이 가능해졌습니다.
| 타입 명시 |
|---|
![]() |
![]() |
RxSwift를 사용해 이벤트를 받아 방출하게 구현을 하던 중 원하는 동작이 작동하지 않아서 log기록을 확인해가면 어떤 부분이 문제가 있는지 찾아보니 이벤트가 제대로 방출되지 않는걸 찾았습니다.
문제는 구독을 취소해주는 disposed에서 구독 취소가 제대로 동작하지 않아 발생했습니다.
처음에는 disposed(by: )에 들어가는 타입이 같아 의심없이 코드를 작성했지만 위 아래 코드의 차이는 생성이 되고 사라지는 시점에 차이가 있었습니다.
임시로 disposeBag이 생성이 되었다가 곧바로 메모리에서 해제(즉 생성 및 스코프 영역에 문제)가 되어 즉시 구독을 취소하게 된다. 그래서 정상적으로 동작이 되지 않았습니다.

변수에 선언해서 사용한다면 메모리에 올라가 유지가 되어 정상적으로 구독을 관리하게 된다고합니다.
