네이버 지도 API 호출

7과11사이·2023년 9월 28일
0

스파르타코딩클럽

목록 보기
68/90
post-thumbnail

이번 팀 프로젝트에서 네이버 지도를 활용해보기로 했다.
날씨 어플임에도 지도를 활용해서 다양한 기능을 추가해볼 수 있을 것 같았는데,
네이버 지도를 적용하는 방법 자체가 복잡했다.

추가 업데이트
Apple Map Kit을 활용해서 지도를 적용하는 방법이 있다는 것을 알았다! 하나의 객체를 생성해서 바로바로 위치를 확인할 수 있다는 점에서 네이버 지도보다 더 좋은 방법인 것 같다. 하지만 주변 식당 + 리뷰들을 확인할 수 있도록 만들어야 하기 때문에 네이버 지도를 계속해서 시도해봐야겠다는 생각이다.


1. 네이버 지도 설치

공식문서
네이버 지도 자체를 생성하는 과정은 쉽다!
먼저 네이버 지도(네이버 지도 모바일 SDK)를 사용하는 계정으로 클라이언트 ID를 발급 받아야 한다.

이후, Podfile에 네이버 맵을 상징하는 NMapsMap을 선언해야한다.

pod 'NMapsMap'

선언 이후 cocoapods를 설치하면 NMapsMap 프레임워크를 사용할 수 있게 된다!

2. 네이버 지도 적용

override func viewDidLoad() {
	super.viewDidLoad()
    
    let mapView = NMFMapView(frame: view.frame)
    view.addSubview(mapView)
}

위처럼 네이버 지도 객체를 바로 생성할 수 있다.
생성된 지도에 값을 주는 방법은 CLLocationManager을 사용해서 값을 줄 수 있다.
locationManager는 우리가 지도에서 일반적으로 확인할 수 있는 위도, 경도, 접근 권한 등을 다룬다. 해당 매니저를 통해 지도 객체에서 발생하는 이동 값을 확인하여 데이터를 다시 뿌려 줄 수 있다!

다만 한가지 이해 안되는 점이 있다.
locationManager이 위의 데이터 관리를 하는 객체라고 하면 어떤 원리로 locationManager와 mapView가 유기적으로 연결되는지 이해가 되지 않는다.

지도와 manager를 따로 생성해야하며 데이터는 manager에서 확인 -
업데이트는 지도로 해야하는데, 동일한 파일에서 처리를 하는 예시들을 자주 접하다보니 이해가 안되는 부분들이 계속 생겨나는 중이다.


UPDATE

  • 2개의 지도 객체

locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {

위 코드는 이제 사용이 중단된 것 같다.
따라서 대부분 블로그에서 제공하는 네이버 지도 적용 방법은 OLD한 방식!

2개의 지도 객체

더불어 NMFMapViewNMFNaverMapView 2개의 지도 객체/타입이 존재해 보이는데, 이 차이점은 조금씩 정리해봐야겠다.

지금까지 확인했을 때 맵뷰와 네이버 맵뷰의 차이는 커스텀을 어디까지할 수 있는지의 차이점이라고 한다.
공식 문서상에서 MapView는 단순히 화면에 지도를 보여주는 역할만 담당한다고 한다.
반면, NaverMapView는 지도를 보여주면서 필요한 기본적인 UI가 구현되어 있다고 하는데,
한 예로 compass, direction, zoom button, location button이 내제되어 있는 상태로 바로 화면에 보여준다는 차이점이 있었다.

한가지 궁금한 점은, 네이버에서 제공하는 데모 코드는 NMFMapView를 활용하고 있었다.
NaverMapView는 커스텀이 아예 안되는 건지, 맞다면 왜 제한을 걸었는지 궁금해진다.


2개의 매니저 객체

  • CLLocationManager
    ios 표준 위치를 관리하는 매니저인 CLLocationManager는 iOS앱에서 활용되는 위치를 파악하고 관리하는데 사용이 된다고 한다.

  • NMF LocationManager
    네이버 지도를 사용하기 위해 SDK에 포함된 위치 관련 매니저라고 한다.
    이 매니저는 네이버 지도를 통해 위치를 파악하고 지도 위에 표시하는 것에 특화 되어 있다고 하는데, 명확하게 CLLocationManager 그리고 NMFLocationManager을 사용했을 때의 어떤 장점이 있는지는 아직 이해가 되지 않는다. 단, 후자의 경우, iOS 개발자라면 자주 사용하는 매니저는 아닌 것으로 보여진다! Swift 개발에 있어 CLLocationManager을 사용해서 "위치 트래킹" 허용 여부 동의를 파악한 이후 네이버 지도 객체에게 해당 데이터를 넘겨주는 과정을 거치는데, 애플 특유의 보안 특성을 위해 어쩔 수 없는 것으로 보인다.

네이버 지도 위치 업데이트

  • Simulator보다 실기기
    그동안 대부분의 어플은 simulator에서 구동을 했다.
    크게 불편한 점이 없었을 뿐더러, 다양한 기종을 지원하는 시뮬레이터 덕분에 autolayout이 잘 잡혔는지 확인할 수 있었는데, 지도를 지원하는 어플을 해보면서 약간의 문제점을 파악했다.

    지도에서는 현재 위치를 파악할 수 있어야 했다.
    하지만 시뮬레이터로 실행하게 되면 initial 위치를 sanfrancisco가 나오도록 되어 있었다.

    이 위치 하나 때문에 낭비한 시간을 생각하자면 정말 스트레스...이지만!
    실기기로 연결해서 Xcode를 구동해본 결과, 현재 위치가 잘 나왔다!!!
    링크를 참고해보면 예전부터 있었던 문제점인 듯하다! [링크]

0개의 댓글