5주차 5️⃣

[복습을 위한 질문]

  • HTTP Method의 종류는 어떤 것들이 있고 어떤 기능을 하는가?
    -> GET, POST, DELETE, PUT 등등.. 이번에는 GET만 써봤다.

  • HTTP 통신을 위해 iOS에서 어떤 순서로 구현해야하는가?
    -> 겁나 많은걸 해야하는데.. 일단 프레임워크(Alamofire)가 필요하고, 이 프레임워크를 통해 URL과 QueryString으로 Parameter를 줘서 통신했음. Response될때 저장해 놓을 데이터모델(Struct)도 필요하고, Request할때 같이 보내줘야되는 key도 필요함

과제

  • 소셜로그인과 Open API를 활용한 클론코딩 프로그래밍

과정

라이징 테스트 전 마지막 과제였다.

마지막 과제였던만큼 난이도도 높았고, 정말.. 이슈사항이 너무 많았다.

지금까지 있었던 이슈사항 합친거랑 거의 비슷하다고해도 과언이 아닐정도로 이슈사항이 많았다..

그중 가장 큰 이유는 내 맥북이 M1이라서.. 였다.. 아직 호환성이 조금 떨어지나보다..

심지어 소셜 로그인 Api나 공공데이터 포털같은곳에서 제공해주는 오픈 Api들은 국내 한정 Api들이라서 구글에 자료들도 썩 많지 않았다..

그래서 정말 맨땅에 헤딩하면서 했다..

+핑계처럼 들리겠지만.. 2주차부터 발표과제에 학교 축제, 그리고 추석까지 겹쳐서.. 시간이.. 녹녹치 않았다..

이번주 또한 무슨 앱을 만들어야할지 고민이 많았다.

Api를 적당히 활용하면서도 너무 어렵지 않게 만들 수 있는거를 계속 찾았었고, 결국 'KakaoMap'을 만들어보기로 했었다.

하지만.. m1을 쓰고 있던 탓일까.. 계속해서 알 수 없는 오류들이 계속됐고, Daum 맵을 띄우는것까지는 성공했지만, 그 후에 써야되는 서버 통신을 위한 Alamofire 프레임워크 부분에서 계속해서 오류가 났다..

그래서 이 부분에서 계속 헤매다 결국 'NaverMap' 클론코딩으로 방향을 다시 잡았고, 크게 생각했던건 원래
1. 소셜 로그인
2. 네이버 맵 Api
3. 지하철 노선도 Api
4. 공공 데이터 포털 Api(음식점, 병원 등)
이렇게 총 4가지 정도의 Api를 구현해 보는것이었다.

결과적으로는 소셜 로그인과 네이버 맵 Api, 그리고 서울 근처 음식점 오픈 Api 이렇게 총 3가지를 구현했다.

우선 App 내 화면이다.

음식점 부분 사진이 없는 이유는... 추후에 설명하겠다..

사용한 주요 컴포넌트

  • TableView / TableViewCell
  • StackView
  • Label / Button / Image View / Text Field

사실상 이제는 컴포턴트를 논하는게 별로 의미가 없다.. 웬만한 컴포넌트는 거의 다 써봤고 이제는 컴포넌트를 어떻게 더 이쁘고 똑똑하게 구현하느냐..의 문제인것같다.

구현한 기능

  • 네이버로 로그인 기능

    -> 원래는 카카오로 로그인을 구현했으나.. 자꾸만 생기는 오류들 때문에 네이버로 갈아탔다.. 카카오나 네이버나 소셜 로그인 기능을 구현하면서 느낀점은.. 진짜 제일 정확한건 공식 홈페이지에 나와있는 가이드대로 하는것이다.. 물론 구글링을하면 뭔가 쉽게 정리되어 있는 포스팅 글들이 다수 있다.. 근데 정말 최근글 혹은 자기 맥북과 같은 사양의 모델을 대상으로 쓰여진 글이 아니면 중간중간에 크고작은 오류들이 생겼다.
    -> 조금 귀찮더라도 공식 홈페이지 문서를 읽어보는게 best way..
    -> 네이버 홈페이지에서 제공하는 SDK를 다운받아 Podfile에 설치해주고 가이드대로 진행했다. 물론 https://www.ncloud.com/https://developers.naver.com/main/ 에서 맵 Api를 신청하고 개인 key도 받아야되고 Xcode 내부 문서 또한 여러가지 만져야된다. 이거에 대한 자세한 설명은 구글링에 나와있다..
  • CocoaPod으로 FrameWork 사용

    -> 이번에 처음으로 터미널에서 이것저것 설치를 했어야했는데, 바로 이 CocoaPod을 이용해 FrameWork를 설치해야했기 때문이다. 자신의 프로젝트 파일들이 있는 폴더에서 터미널을 열어 Podfile을 설치해주고, 그 파일 내부에서 개발에 필요한 FrameWork를 쓰고 다시 Install 명령어로 설치해주면된다.
    -> 주의해야할점은 맥북 M1 모델을 쓴다면 단순 'pod install' 혹은 'pod update'가 아닌 'arch -x86_64 pod install' 을 해줘야 한다.
    -> architecture가 달라서 발생하는 이슈사항이라고 한다.

  • Alamofire로 Api request / response

    -> CocoaPod으로 설치한 Alamofire로 Api를 호출하고, 그에 대한 응답을 받게 되는데 통신 방식은 GET을 이용했고 Response값들에 대한 데이터모델을 Struct로 만들어 따로 저장해주었다.
    -> 아쉬웠던 점은 여러개의 request를 하고 싶었는데, 뭔가 자꾸 코드가 꼬여 뷰 하나에서 하나의 request밖에 못했다..

  • 네이버맵 Api 이용

    -> 카카오맵에 비해 띄우는게 생각보다 간단했으며, 이것도 역시 위에서 첨부한 사이트에 들어가서 이것저것 신청해야 Api를 쓸 수 있다.
    -> 정말 다 좋았지만.. 네이버가 자체적으로 만들어놓은 기능외에는 아무것도 사용할수가 없다는것.. 물론 나는 네이버 지도를 그대로 클론하려고해서 발생했던 이슈였을수도 있겠지만, NaverMap View 위에서 이것저것 한다는건 쉽지 않았다.. 특히 autolayout잡기가 어려웠다..

  • 네이버맵 SDK에 있는 method 활용해서 위치 핀 설정 및 카메라 이동

    -> 네이버가 네이버맵 SDK내에 자체적으로 만들어놓은 method들이 있는데, 그 method들을 활용해서 위치 마커 설정과 카메라 이동(지도에서 이동) 기능을 구현해봤다.

중간중간에 있었던 issue

  • 메인 이슈 => 카카오맵 시뮬레이터, 헤더, 프레임워크..

시간을 제일 많이 까먹었던 이슈사항이다..

아직도 이유는 잘 모르겠지만 카카오로 로그인 기능을 구현하면 CocoaPod에서 문제가 생겨서 framework 설치가 안되고 카카오맵을 구현하면 갑자기 헤더파일에서 문제가 생겼다..

이렇게 해서 생긴 이슈사항들을 찾아보면 대부분이 M1모델이기 때문에.. 당했다고.. 할 수 있다 하하..

결국엔 네이버로 방향을 틀긴했지만 이런 저런 이슈사항들을 직접 맞이해보면서 대처능력..?을 기를수있었던 시간이었다. 그래서 단순히 시간을 '낭비'했다고는 생각하지 않는다.

  • HomeBrew 설치..

NMapsMap(=네이버맵 SDK)이 용량이 커지면서 Git-lfs 를 이용하여 받아야되는데, 이 Git-lfs라는것 또한 직접 설치해줘야한다. 근데 이것을 설치하려면 또 HomeBrew라는 프로그램이 필요한데(진짜 개웃긴다 ㅋㅋ 준비의 준비의 준비 느낌..) 그 이유는 Git-lfs를 그냥 쌩으로 받으려면 이것저것 해줘야하는게 많은데, 그런거를 자동으로 해주는게 HomeBrew인 셈이다..

근데 HomeBrew를 설치하는 과정에서 오류가 났다..

/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The Xcode Command Line Tools will be installed.
Press RETURN to continue or any other key to abort:
==> /usr/bin/sudo /usr/sbin/chown -R ab:admin /usr/local/Homebrew
==> Searching online for the Command Line Tools
==> /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress

라는 오류가 났고.. 이 오류 또한 M1이기 때문에 발생하는 호환성 문제...

해결방법은 직접 터미널에서 아래와 같이 입력해서 HomeBrew 설치에 필요한 일부 부분을 깔아주는 것..

xcode-select --install 

  • 네이버 맵 api 오류

네이버 맵을 구현하는 과정에서..

Undefined symbol: OBJC_CLASS$_NMFMapView

라는 오류가 생겼고 해결까지 꽤 오래걸렸다.. 그냥 아래 링크에서 하라는대로 하고

https://crazybrain.tistory.com/51

만약 M1 노트북이면 마지막에 pod install이 아닌 arch -x86_64 pod install 을 해주면 된다..

솔직히 얘네 말고 이슈사항진짜 훨씬 더 많았는데.. 다 기록하기도 힘들정도로 많았기 때문에 대표적인거 몇개 적었다..

아쉬웠던 점

  • 시간 투자
    -> 뭔가 물리적인 시간 투자를 그렇게 많이 못했던것 같다. 진짜 이번주에 이런저런일들이 많았어서.. 뭔가 시간이 하루이틀만 더 있어도 api 가공도 좀 더 잘했을 것같고, UI는 물론 기능적인 측면에서도 훨씬 나았을텐데.. 많이 아쉽다..

  • 식당 음식 Image 어디로..? 😅
    -> 내가 찾던 Api는 음식점의 위치(위도, 경도)와 대표 메뉴, 그리고 사진까지 담겨있는것이였지만.. 그런 Api를 찾는게 쉽지가 않았다.
    -> 그래서 그냥 각자 다른 Api로 한개는 음식점의 정보만, 그리고 나머지 하나는 음식의 사진을 받아와 그냥 그럴듯하게라도 TableView 구성을 하려고 했는데, 자꾸 한 VC에서 두개의 Alamofire request하는게 안되서 결국 못했다.. ㅠㅠ 너무 아쉽..

  • Api 개수 모자람..
    -> 내가 구현하려고 했던 최소한의 Api 개수를 못채웠다.. 흑흑... 그래도 구현에 앞서 사용했던 Api는 많으니... 이걸로 만족..

  • 전체적으로 미흡한 UI...

이번주 과제를 하면서 느낀점

  1. 이번주 토요일부터 있을 라이징 테스트 진짜 화이팅해서.. 우수수료 한번 해보자..
  2. 서버 연동이 생각보다 너무 어려운것같지는 않으면서도 쉽지는 않구나..
  3. 화이팅!!!!!!!!!!!!!!!!!!

전체코드: https://github.com/shintaewon/NaverMapClone

profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글