Self Project(ICN-APP) 일기 #3

최우혁·2021년 1월 25일
0

ICN_APP

목록 보기
3/7
post-thumbnail

Kakao Map API 적용하기

어떤 기능을 넣어보면 좋을까, 어떤 백엔드 기술을 나는 구현해볼까 생각하던 중에 지도를 한번 구현해보자 싶었다.

내가 생각해본 목록은 이렇다.
1. Kakao Map API - 1일 30만회까지 무료 (유료가 될 일이 거의 없을 것 같다)
2. Google Map API - 일단 기본적으로 유료에 무료로 제공해주는 크레딧이 짜다..
3. Naver Map API - 이 친구도 유료...
4. T Map API - 좀 생소하다...

그래서 1번 카카오 맵을 사용하게 되었다!!

그래서 카카오 개발자(https://developers.kakao.com) 여기에 개발자 등록을 하고 내 앱까지 등록을 하였다!

그런데 (출처 : https://apis.map.kakao.com)

Flutter를 지원하지 않는다...!!!!😳😳😳😳

일단 다양한 백엔드 기술을 사용해보는게 내 목적이기에 클라이언트는 주된 목적이 아니었다.
근데 최근 들어 배보다 배꼽이 더 커지는 경우가 많아서, flutter에 sdk를 지원하는 Google Maps로 옮길까 고민도 했다...

하지만 pub.dev에 가보니 카카오 지도 flutter 버전이 있기에 어떻게든 되겠지 하며 도전!!!
(https://pub.dev/packages/flutter_kakao_map) <-근데 버전이 0.0.4잖아..?

아무튼! 먼저 로컬 API가 제대로 동작하는지 알아보기 위해 지도 관련 프로젝트를 생성했다.

내가 생각하는 흐름은 이런 식이다.

그래서 kakao 로컬 API를 통해 원하는 주소의 위도 경도 값을 받아오는걸 테스트해봤다.
나는 여기서 RestTemplate의 구현체 중 하나인 Feign Client를 이용했다.

Feign Client

내가 알기론 주로 MSA 형식으로 작성된 여러 서비스가 서로 데이터를 주고 받을 때 사용한다.
그렇기에 지금 내 SpringBoot 서버가 Kakao 로컬 API 서버에서 데이터를 받을 때도 사용하기로 했다.

이 서비스 또한 Eureka Client가 될 것이므로 Eureka-client와 오늘의 주인공 Feign을 넣었다.

그리고 Controller부터 작성하기로 했다.

먼저 나는 /find?addr=마포구 이런 꼴로 테스트를 할 것이므로

@GetMapping(value = "/find")
    public String find(@RequestParam("addr") String addr){
    }

이런식으로 메소드를 작성할 것이다.

그리고 나서 Kakao 로컬 API로 어떻게 보내나 작성 예시를 봤더니,

curl -v -X GET "https://dapi.kakao.com/v2/local/search/address.json" \
--data-urlencode "query=전북 삼성동 100" \
-H "Authorization: KakaoAK {REST_API_KEY}"

(출처는 https://developers.kakao.com/docs/latest/ko/local/dev-guide)

음,-H는 헤더같고....나머지는 파라미터 같으니...

이렇게 Feign Client를 작성했다.
Kakao 로컬 API로부터 받을 결과는 json 형태이기에 produces에 json을 넣어줬다.

그리고 앞서 작성했던 RestController에 해당 FeignClient를 주입받아서 사용하면 된다!

@RestController
public class Service {
    @Autowired
    private MapApi mapApi;
    @GetMapping(value = "/find")
    public String find(@RequestParam("addr") String addr){
        return mapApi.find("KakaoAK [개인 API Key]",addr);
    }
}

잊지 않고 Eureka Client로 등록한다.

Postman Test

제대로 동작하는지 Postman을 이용해 Test를 해봤다.

마포구를 검색했더니 마포구에 해당하는 주소들이 성공적으로 나오는 것을 볼 수 있다!

Feign Client를 annotation으로 설정하고, 간단하게 적어주니 성공적으로 실행이 됨을 알 수 있었다.
구현해보면서 느낀 점은 Feign Client에 작성되는 메소드는 호출되는 Service 관점인 것 같다는 것이다.
내가 만든 MapAPI에서 작성되지만, 사실 MapAPI 관점이 아니라 호출되는 Kakao 로컬 API 관점인 것 같다.

@FeignClient(name="nothing",url = "https://dapi.kakao.com") #호출되는 API 주소
public interface MapApi {

    @RequestMapping(method = RequestMethod.GET,value = "/v2/local/search/address.json",produces = "application/json")
    #아무리 봐도 호출하는 MapAPI관점이 아니라, 호출되는 KaKao 로컬 API의 RequestMapping이다.
    
    String find(@RequestHeader("Authorization") String header,
                     @RequestParam(name="query") String query);
}

그래서 FeignClient의 메소드를 작성하면서 호출되는 서비스의 관점에서 작성하다보니 수월하게 작성할 수 있었다.
자연스럽게 이해하기에는 기존에 익힌 지식들과 너무 달라서 나름대로 생각해낸 요령이다😂

profile
백엔드 주니어입니다🙌

0개의 댓글