[TIL] API 도전기[1]

7과11사이·2023년 10월 5일
0

스파르타코딩클럽

목록 보기
72/90
post-thumbnail

이전 팀 프로젝트 (유튜브 구현)을 시도했을 때 흥미를 느꼈던 API 호출.
예전부터 주변 개발자 친구들은 API 호출을 해야 다양한 무언가를 만들 수 있다는 이야기를 들었었다. 그래서인지 기대를 가장 많이 했던 도전 중 하나였다.

당시 처참히 실패를 했기에 심기일전하고 이번 프로젝트에서 한번 더 도전해보고자 했다. 이번에는 네이버 지도!!


네이버의 다양한 API

네이버에 다양한 기능이 있는만큼, API 또한 광범위했다.
한가지 놀란 점은, 네이버에서 다루고 있는 대부분의 기능들이 한 기업에서 다루고 있지 않다는 점이었다. 네이버 지도, 검색 등 기타 모두 다른 기능들이 서로 다른 API를 가지고 있었으며 담당하는 기업들이 모두 달랐다.

네이버 산하에 있는 각각의 기업에서 담당하는 분야가 모두 다른데,
그렇기에 네이버 API는 이해하기 정말 어려웠다. 지금도 자세히 모르는 느낌이랄까. API 사용을 위해 어떤 기업의 어떤 서비스를 참고해야하는지 파악해야하는 점을 이해하는데 시간을 오래 쏟아야 했다.

추가로 알게된 사실은 네이버 developer과 네이버 클라우드에서 제공하는 API가 비슷해보이더라도 실제로는 다르다는 점이었다. 더불어 제공하는 API 공식문서 또한 서로 완전히 다르다는 점이었다.


아래는 내가 가졌던 초기 계획 내용이다!

초기 계획

  • 지도에 검색 기능 구현
  • 내 위치에 마커 표시
  • 내 위치 기반, 맛집 검색 구현
  • 날씨 상황 (온도, 기상 상황)에 맞춤 음식 추천

위처럼 네이버 지도를 조금은 활용해보고 싶었다.
특히 관심있던 부분은 좌표를 활용하여 주소 인근 식당 추천이었다.
한가지 간과한 점은 네이버 지도에서 해당 기능/기술을 지원하는지를 확인하지 않았던 점이다.


API 데이터 호출

데이터를 호출하면서 API에 대한 이해도가 높지 않다는 점을 깨닿게 됐다.
프로젝트 파일과 블로그를 참고해도 이해가 안되는 부분이 많았는데,
가장 골치 아팠던 부분은 포스트맨에서는 보여지지만 Swift에서는 안되는 상황이었다.

가장 크게 2가지의 에러로 나뉘었는데,
1. ClientID, SecretKey부터 BaseURL까지 파라미터에 필요한 요소들을 모두 다 넣었음에도 400대의 문제가 발생하고 있었다는 점
2. 위 이슈를 해결하고 디버깅을 해도 200대의 응답을 받았지만, 실질적인 Item값이 하나도 없는 상황.

첫번째 이슈

400대 오류가 발생하고 있던 문제는 생각보다 쉬웠다 -
보통 400번대는 API 요청 자체가 발생하지 않고 있기 때문!
데이터 모델/구조를 JSON 형식에 맞게 재수정하면서 결과값을 받을 수 있었다.

이전 유튜브 프로젝트에서는 데이터 구조를 도움받아가며 만들었기에 완벽하게 이해하고 있지 않았다는 걸 깨닳았다.

모델을 구성할 때 유의해야하는 점은 놓치고 있는 키워드가 있는지, items를 item으로 정리했는지, 타입이 맞는지 재차 확인해야한다는 점을 이해했다!
이전 프로젝트와 이어 분명 제대로 넣었다 생각했지만, 반복해서 문제가 발생했다는 점이 가장 아쉬웠던 부분이다.

두 번째 이슈

이 문제 때문에 4일을 낭비했다...
혼자 해결할 수 없는 문제라 생각해서 여기저기 찾아가며 질문을 했지만 모두 문제를 찾지 못했다.
데이터는 올바르게 가지고 오고 있었지만, 결과값을 확인했을 때 값이 없는 상황이었는데, 어디서 잘못된건지 이해할 수 없었다.

나중에 찾아보니 optional 값 때문에 발생하고 있다는 점을 알게 됐는데, 아래와 같았다.

가장 먼저 API를 활용해서 주변 지역 맛집을 검색해보고자 했다.
1. reverse geocode 방식으로 좌표를 주소로 변환해주는 API를 실행
2. 지도 위에 온도 및 기상 상황에 따라 추천되는 음식 카테고리
3. 소비자가 원하는 음식 클릭
4. 해당 음식 이름을 활용, 첫 API 호출에서 얻은 지역 정보과 조합하여 '검색 API'에서 query를 실행
5. 결과값을 지도에 출력, 테이블 뷰를 매장 이름, 주소를 뿌리는 방식

여기서 문제점은 주소를 찾아내는 API와 식당 검색 API가 연결되어 있었다는 점이었다. 파라미터 값으로 선택한 음식 값이 들어가도록 설정했는데, 값이 있을수도, 없을수도 있기에 만들어둔 optional이 스노우볼링을 시작했던 것이다.

올바른 호출을 해서 값을 얻어왔지만,
파라미터 값이 optional이었기에 명확한 검색이 안되는 것으로 이해했다.

0개의 댓글