번호 : 008, 작성일자: 2025-03-03

2025.02.24 ~ 2025.03.02

🗺️ 네이버지도 SDK 인증오류


지난 주 금요일 오후 쯤 네이버지도 SDK를 사용하는 서비스들이 지도가 표시되지 않는 이슈가 있었습니다.

일부 서비스는 UIAlertViewController (제목 : ErrorCode 510 , 메시지 : 엔드포인트 연결시간 초과 , 버튼명 : 확인 ) 형식으로 표시가 되거나 되지 않고 있었습니다.

처음에는 Sentry, Alamofire 에서 네트워크 연결 중 Timeout 처리를 하여 자동으로 표시하는 것으로 예상하여 검토해봤지만 Alert가 표시되지 않았습니다.

그래서 네이버지도 SDK에서 발생한다고 생각하여 네이버지도 포럼에서 문의를 드렸습니다.

답변 결과 네이버지도 문서의 인증 실패처리 부분을 참고하면 된다고 했습니다. 자세하게 설명되어 있어 놓쳤지만 510, Timeout 코드에 대한 부분이 없어 놓쳤던 것 같습니다.

다음에는 조금 더 확장성 있게 Timeout으로 네트워크 이슈라는 생각보다 UIAlertController를 어디서 표시했는지 생각해보도록 해야겠습니다.

📍 CoreLocation 프레임워크


iOS에서는 CoreLocation 프레임워크를 사용하여 현재 내 위치를 가지고 올 수 있습니다.

현재 내 위치를 알기 위해 Wi-Fi, Cellular, GPS, Bluetooth(iBeacon), magnetometer(자력계), barometer(기압계) 등 여러가지 구성요소를 사용하여 수집합니다.

CoreLocation프레임워크는 iOS2부터 발표된 프레임워크이기 때문에 정말 많은 업데이트가 있었습니다.

현재 위치 정보에 접근하기 위해서 권한을 요청해야 하는데 이부분에서도 항상 사용, 정확성 제공, 한 번만 허용 등 여러가지 권한 요청 방식이 변경되어와서 변경된 순서대로 확인해봐야 합니다.

권한 요청을 편리하게 사용가능한 CoreLocationUI 프레임워크의 UIKit, SwiftUI의 버튼들도 존재합니다.

또한 비동기처리와 백그라운드 처리등 CLLocationManager를 조금 더 사용하기 편리하도록 래퍼를 한 CLLocationUpdate와 CLMonitor도 iOS 17 이후 생겼습니다.

위치 데이터의 정확성을 높이기 위해 accuracy의 값을 참고하거나 현재 이동하는 방식 즉, Activity Type을 지정하여 위치권한을 요청할 수 있습니다.

CoreLocation 과 관련된 추천 블로그들을 첨부합니다.

⚙️ RIBs 아키텍처 프레임워크


RIBs 아키텍처 프레임워크를 학습하기 위해 Github를 들어가봤는데 RIBs가 크로스플랫폼 아키텍처 프레임워크여서 기존에는 안드로이드, iOS를 포함하여 저장소가 있었지만 RIBs-iOS 로 각 OS 별로 분리되었습니다.

튜토리얼이 WiKi에 잘 정리되어 있어 기대감을 품고 순서대로 확인해보려고 했는데 프로젝트 바뀐 저장소 경로와 버전등이 잘못되어 빌드가 되지 않았습니다. 그래서 일단, 저장소를 fork 하여 빌드가 되도록 경로와 버전, 빌드에러시 해결방법 등을 작성하여 PR을 제출한 후 해당 브랜치에서 튜토리얼을 진행했습니다.

파일이 많아진다는 단점을 생각이 들었는데 파일템플릿이 제공되어 Router, Interactor, Builder를 자동생성해주고 추가로 Viewless 여부로 Viewless RIB도 생성가능했습니다.

가장 신기한 건 View가 없는 RIB을 만들어 어떤 자식 RIB을 붙일 수 있는지에 대한 부분이였습니다. 간단하게 정리겸 진행해야 할 것 같습니다.

RIBs를 학습하게 된다면 SimpleMemo-RIBs 해당 오픈소스와 노수진님의 Fastcampus 강의를 추천합니다.

🙋🏻‍♂️ 기타 사항


  1. 서비스의 사용자 수가 증가하면 Crashlytics 다양한 케이스들이 발견되었습니다.
    1. 네트워크 응답속도에 따른 처리들도 항상 고려해야 합니다.
    2. FSCalendar를 사용할 때 minimumDate, maximumDate의 영역 밖의 날짜를 코드로 select를 하게되면 Crash가 발생합니다.
  2. 화질을 개선해주는 waifu2x라는 오픈소스를 발견했습니다.
  3. 위키독스라는 사이트를 발견했는데 개발자에게 도움이 되는 무료들을 추첨으로 매 주 제공해줘서 필요한 책들을 보는 데 도움이 될 것 같습니다.
  4. 앱스토어 리뷰를 한 번에 정리하기 위해 검색해봤는데 AppFollow라는 서비스도 존재하고 앱스토어에서 스크래퍼를 통해 리뷰데이터를 가져오는 app-store-scraper 도 있습니다.
    from apple_store_scraper import AppStore
    from pprint import pprint
    import json
    
    # sample 앱 리뷰 가져오기
    sample = AppStore(country="kr", app_name="카카오톡", app_id="362057947")
    sample.review()
    
    # datetime 객체를 문자열로 변환하는 함수
    def convert_datetime(obj):
        if isinstance(obj, dict):
            return {key: convert_datetime(value) for key, value in obj.items()}
        elif isinstance(obj, list):
            return [convert_datetime(item) for item in obj]
        elif hasattr(obj, "isoformat"):  # datetime 객체인 경우
            return obj.isoformat()
        else:
            return obj
    
    # JSON으로 변환 가능한 형태로 변환
    reviews_data = {
        "reviews": convert_datetime(sample.reviews),
        "total_reviews": sample.reviews_count
    }
    
    # JSON 파일 저장
    with open("sample_reviews.json", "w", encoding="utf-8") as f:
        json.dump(reviews_data, f, indent=4, ensure_ascii=False)
    
    print("리뷰 데이터를 'sample_reviews.json' 파일로 저장했습니다.")