![[TeamProject] Troubleshooting_AED API](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUtJrk%2FbtsJT4Evp8y%2FvyxbRhK1Mg34eHypknOsNK%2Fimg.jpg)
[TeamProject] Troubleshooting_AED APIProject/Team Project2024. 10. 4. 11:41
Table of Contents
문제상황
- AED API의 요청 변수에 위도 경도 값이 존재 하지 않아서
반경 데이터를 가져오는데 문제가 발생함
문제 해결
해결방안 논의
- 1안 : 공공데이터 포털에 요청변수 추가 요청하기
- 2안 : 앱 최초 실행 시 모든 데이터를 받아서 UserDefaults에 저장해서 위경도 값 필터링 해서 가져오기
논의 과정
[ETC] : AED데이터 관련 · Issue #56 · Kim-Dong-Hyeon/Duriso
어떤 문제인가요? aed api 요청변수에 위경도 값을 지정해주는 요청변수가 없다보니 전체 데이터를 받아와서 거기서 가시성 조율을 하기에는 데이터가 너무 많은데 어떻게 하면 좋을까요? 생각한
github.com
- github issue로 등록하여 논의 및 스크럼 시간 논의 통해 1안 신청, 2안으로 진행 한 후 api 수정요청이 반영된 후 api호출로 변경 하기로 함
해결과정
- 재난안전 공공데이터 공유 플랫폼 문의(9월 11일)
- API 전체 데이터 UserDefaults에 저장하기
- UserDefaults에서 AED 데이터를 로드하고, 데이터가 있으면 로드된 데이터를 반환, 데이터가 없을 경우, 네트워크 요청을 통해 전체 범위의 AED 데이터를 가져와 UserDefaults에 저장한 후, 데이터를 반환하도록 구현함
- UserDefaults 사용한 코드
- UserDefaults에서 AED 데이터를 로드하고, 데이터가 있으면 로드된 데이터를 반환, 데이터가 없을 경우, 네트워크 요청을 통해 전체 범위의 AED 데이터를 가져와 UserDefaults에 저장한 후, 데이터를 반환하도록 구현함
// MARK: - 전체 AED 데이터 요청 및 UserDefaults에 저장
func fetchAllAeds() -> Observable<AedResponse> {
// UserDefaults에서 데이터 로드
if let storedAeds = loadAeds() {
return Observable.just(storedAeds)
}
// 전역 범위로 데이터 요청
let boundingBox = (startLat: -90.0, endLat: 90.0, startLot: -180.0, endLot: 180.0)
return Observable.create { observer in
self.aedNetworkManager.fetchAllAeds(boundingBox: boundingBox)
.subscribe(onNext: { response in
// UserDefaults에 저장
if let data = try? JSONEncoder().encode(response) {
UserDefaults.standard.set(data, forKey: "AedData")
print("전체 AED 데이터가 UserDefaults에 저장되었습니다.")
}
observer.onNext(response)
observer.onCompleted()
}, onError: { error in
observer.onError(error)
})
.disposed(by: self.disposeBag)
return Disposables.create()
}
}
// MARK: - UserDefaults에서 AED 데이터 로드
func loadAeds() -> AedResponse? {
if let data = UserDefaults.standard.data(forKey: "AedData"),
let aedResponse = try? JSONDecoder().decode(AedResponse.self, from: data) {
return aedResponse
}
return nil
}
- 이 과정에서 RxSwift의 Observable을 사용해 비동기적으로 데이터를 처리하고, 네트워크 요청 및 에러 처리 또한 RxSwift로 관리하고 있습니다.
- RxSwift로 관리한 이유
- 사용자가 지도 위치를 변동하여 정보를 요청 할 때마다 데이터 요청이 발생하고, 이를 여러 번 처리하거나, 요청 후 UI 업데이트를 수행해야 해서, RxSwift를 사용해 복잡한 흐름을 하나의 데이터 스트림으로 처리해 코드의 가독성과 유지보수성을 향상시켰습니다
- UserDefaults로 처리중 데이터 용량 크기 문제 발생..
- UserDefaults 디버깅 로그
CFPrefsPlistSource<0x600003004a20>
(Domain: com.donghyeon.Duriso, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null),
Contents Need Refresh: Yes): Attempting to store >= 4194304 bytes of data in CFPreferences/NSUserDefaults on this platform is invalid. This is a bug in Duriso or a library it uses.
Description of keys being set:
autoLogin: boolean value
Description of keys already present:
AedData: data value, size: 8080715
VersionOfLastRun: string value, approximate encoded size: 1
autoLogin: boolean value
- 오프라인 맵의 AED 데이터 사용 위해 작업해둔 FireBase, CoreData 활용하여 구현 하도록 변경 예정
- 재난안전 공공데이터 플랫폼 문의 반영 됨!!
- 9월 27일 빠른시일 내에 반영할 수 있도록 하겠다는 답변 받음
- 9월 27일 빠른시일 내에 반영할 수 있도록 하겠다는 답변 받음
- 반영 된 요청 변수
결과 및 프로젝트 반영 / 차선책
ver 1.0.0 에는 UserDefaults로 배포
- 데이터 용량에러 로그 발생했지만 데이터 불러오는 것에서는 문제 없는 것 확인 완료
- 추후 배포시 변경된 요청변수로 api 요청 위해 수정중
728x90
'Project > Team Project' 카테고리의 다른 글
[TeamProject] Troubleshooting_POI show/hide (0) | 2024.09.09 |
---|---|
[TeamProject] CodeBase 카카오맵 _ 기초부터 차근차근 (1) | 2024.09.06 |
[TeamProject] troubleshooting_kakaomap관련 (4) | 2024.09.03 |
on / off 토글 버튼 만들기 (0) | 2024.08.28 |
[ TeamProject ] 프로젝트 준비 _ 카카오맵 api 공부하기! (8) | 2024.08.25 |
@JJOOEE :: JJOOEE’s Developer Journey
iOS Junior Developer를 위해 공부 또 공부
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!