[Spring] 카카오 지도 API를 통해 정보 가져오기

    https://developers.kakao.com/docs/latest/ko/local/dev-guide#search-by-keyword

     

    Kakao Developers

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

    developers.kakao.com

     

    스프링부트에서 카카오 지도 API를 통해서 주소 또는 키워드를 입력하면 관련된 주소 정보를 가져오도록 해보자! 자세한 내용은 위의 링크에서 확인하면 된다.

     

    1 ) 주소 검색하기

     

    주소를 지도 위에 정확하게 표시하기 위해 해당 주소의 좌표 정보를 제공하는 API이다.

    주소에 해당하는 지번 주소, 도로명 주소, 좌표, 우편번호, 빌딩명 등의 다양한 정보를 함께 제공한다.

    이 API는 지번 주소, 도로명 주소 모두 지원한다고 한다.

     

    먼저 포스트맨으로 테스트 해보자!

    GET 요청을 위해서는 다음과 같은 정보가 필요하다

    • query = {찾고자하는 주소정보}
    • 헤더 
      • Key : Authorization
      • Value : KakaoAK {나의 REST_API_KEY}

    query는 필수적인 파라미터이며, analyze_type, page, size을 요청 파라미터로 제공할 수 있다.

    응답에 대한 파라미터 정보들은 카카오 디벨로퍼 개발가이드에 제공되어있다.

    https://dapi.kakao.com/v2/local/search/address.json?query={주소정보}

     

     

     

    2 ) 스프링부트 연동하기

     

    먼저 카카오 디벨로퍼 사이트에서 내 애플리케이션 생성 후 승인키를 발급 받아야 한다.

    그 후 [내 애플리케이션] > [앱 설정] > [플랫폼] 에서 Web 선택 후 사이트 도메인을 임의로 설정해준다. (ex. http://localhost:8080)

     

    위의 과정 이후 컨트롤러에 다음과 같이 작성해주었다.

    public class AddressController {
    
        @RequestMapping(value = "/map", method = RequestMethod.GET, produces="application/json;charset=UTF-8")
        public String getKakaoApiFromAddress(@RequestParam("address") String roadFullAddr) {
            String apiKey = "{나의 REST_API_KEY}";
            String apiUrl = "https://dapi.kakao.com/v2/local/search/address.json";
            String jsonString = null;
    
            try {
                // 1. URL 인코딩 - URL로 사용할 수 없는 문자를 '%XX'의 형태로 변환 
                // ex) 파라미터 address를 한글로 사용하기 떄문에 인코딩을 해주자
                roadFullAddr = URLEncoder.encode(roadFullAddr, "UTF-8");
    
                // 2. 요청 url을 만들기 
                String addr = apiUrl + "?query=" + roadFullAddr;
    
                // 3. URL 객체 생성
                URL url = new URL(addr);
                
                // 4. URL Connection 객체 생성
                URLConnection conn = url.openConnection();
                
                // 5. 헤더값 설정해주기
                conn.setRequestProperty("Authorization", "KakaoAK " + apiKey);
    
                // 6. StringBuffer에 값을 넣고 String 형태로 변환하고 jsonString을 return
                BufferedReader rd = null;
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                
                
                StringBuffer docJson = new StringBuffer();
                String line;
    
                while ((line=rd.readLine()) != null) {
                    docJson.append(line);
                }
    
                jsonString = docJson.toString();
                rd.close();
    
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return jsonString;
        }

     

    테스트를 해보면 정보를 잘 가져오는 것을 확인할 수 있다.

     

     

    이 포스팅에서는 주소 검색 API만 구현되었다. 하지만 아래와 같이 다양한 API를 제공한다.

    위의 코드와 방법은 동일하나, 해당 api가 제공하는 apiURL만 수정해주면 된다.

    // 예시
    String apiUrl = "https://dapi.kakao.com/v2/local/search/keyword.json";

     

     

     

    3) 참고자료

    https://velog.io/@dsunni/Spring-%EC%A3%BC%EC%86%8C-%EC%9C%84%EB%8F%84%EA%B2%BD%EB%8F%84-%EC%B2%98%EB%A6%AC

     

    [Spring] 주소, 위도/경도 처리

    ✈️🗺️ SSGSO Project - 숙소 생성시 주소, 위도/경도 처리의 기록

    velog.io

     

    댓글