본문 바로가기

spring(스프링)

RestTemplate + kakaoMap Api 사용하기

반응형

오늘은 카카오 오픈 API를 사용해보도록 하겠습니다 

https://developers.kakao.com/docs/latest/ko/local/common

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

이번 글에서는 키워드로 검색하는 것만 사용해보도록 할게요 

추가적인 기능과 query들은 공식 홈페이지 문서에 아주 잘 설명이 되어있습니다 

 


curl -v -X GET "https://dapi.kakao.com/v2/local/search/keyword.json?y=37.514322572335935&x=127.06283102249932&radius=20000" \
  -H "Authorization: KakaoAK ${REST_API_KEY}" \
  --data-urlencode "query=카카오프렌즈"

공식 홈페이지 나와있는 예제입니다 

이걸 바탕으로 spring에서 작성해보겠습니다 

 

첫번째로 KEY를 발급받아야 합니다 상단의 홈페이지에서 키를 발급받아주세요!

public String getAddress(String keyWord) {
        URI uri = UriComponentsBuilder
                .newInstance()
                .scheme("https")
                .host("dapi.kakao.com")
                .path("/v2/local/search/keyword.json")
                .queryParam("query", keyWord)
                .encode()
                .build()
                .toUri();

동적으로 query를 사용하기 위해서 URIBuilder의 구현 객체인 UriComponentsBuilder를 사용하도록 하겠습니다 

encode 내부에 변수를 넣지 않으신다면 defualt는 Utf-8d입니다 

 

이제 요청을 날릴 uri는 생성이 완료됐습니다

이제 카카오에서 발급받은 key값을 헤더에 넣어줘야겠죠 

헤더에 key를 넣어주면서 entity를 만들겠습니다

 

 RequestEntity requestEntity = RequestEntity
                .get(uri)
                .header("Authorization","KakaoAK " + "발급받은 키")
                .build();

이제 요청 작성을 완료했습니다.

여기서 주의할 점은 바로 KakaoAk뒤에 띄어쓰기를 하지 않으시면 에러가 날 겁니다! 

.header("Authorization","KakaoAK " + "발급받은 키")
				     띄어쓰기 한번 안하면 에러

 

이제 restTemplate을 이용해서 요청을 보냅니다 

ResponseEntity<String > result = restTemplate.exchange(requestEntity, String.class);

응답받을 객체는 일단 보기 편하게 String으로 합니다 

 

@Component
public class KakaoMapClient {
    private RestTemplate restTemplate;

    public KakaoMapClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String getAddress(String keyWord) {
        URI uri = UriComponentsBuilder
                .newInstance()
                .scheme("https")
                .host("dapi.kakao.com")
                .path("/v2/local/search/keyword.json") //Xml 선택가능 
                .queryParam("query", keyWord)
                .encode()
                .build()
                .toUri();

        RequestEntity requestEntity = RequestEntity
                .get(uri)
                .header("Authorization","KakaoAK " + "발급받은 키")
                .build();
        ResponseEntity<String > result = restTemplate.exchange(requestEntity, String.class);
        return result.getBody();
    }
}

전체 코드입니다.

카카오에서 응답입니다 공식 홈페이지 예제에서 가지고 왔습니다 

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
  "meta": {
    "same_name": {
      "region": [],
      "keyword": "카카오프렌즈",
      "selected_region": ""
    },
    "pageable_count": 14,
    "total_count": 14,
    "is_end": true
  },
  "documents": [
    {
      "place_name": "카카오프렌즈 코엑스점",
      "distance": "418",
      "place_url": "http://place.map.kakao.com/26338954",
      "category_name": "가정,생활 > 문구,사무용품 > 디자인문구 > 카카오프렌즈",
      "address_name": "서울 강남구 삼성동 159",
      "road_address_name": "서울 강남구 영동대로 513",
      "id": "26338954",
      "phone": "02-6002-1880",
      "category_group_code": "",
      "category_group_name": "",
      "x": "127.05902969025047",
      "y": "37.51207412593136"
    },
    ...
  ]
}

 

이렇게 해서 카카오 맵 오픈 api사용법을 알아봤습니다 

반응형