250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 티스토리챌린지
    • 뉴스앱
    • 오블완

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    카카오 주소검색 API 사용법: 법정동 및 행정동 정보 조회하기
    개발/GIS

    카카오 주소검색 API 사용법: 법정동 및 행정동 정보 조회하기

    2024. 7. 24. 11:25
    728x90
    반응형

    카카오 주소검색 API를 사용하여 입력된 주소에 대한 법정동 정보와 행정동 정보를 조회할 수 있습니다.

    다음은 각 단계별로 설명한 내용입니다.

     

    1. RestClient 생성

    val restClient = RestClient.builder()
                .defaultStatusHandler(HttpStatusCode::is4xxClientError) { req, res ->
                    logger.info { "KakaoAPI getAddressToLegalCode RestClient 생성에 실패하였습니다. statusCode : ${res.statusCode}" }
                }.build()

     

    API 호출은 RestClient를 사용했습니다. 

    • RestClient 객체를 생성합니다.
    • 클라이언트 에러(4xx)가 발생했을 때 로그를 남기도록 기본 상태 핸들러를 설정합니다.

     

    2. API 요청

    var resultStr = restClient.get()
                .uri { uriBuilder ->
                    uriBuilder.scheme("https")
                        .host("dapi.kakao.com")
                        .path("/v2/local/search/address.json")
                        .queryParam("query", address)
                        .build()
                }
                .headers { headers ->
                    headers.set("Authorization", "KakaoAK ${key}")
                }
                .retrieve()
                .onStatus(HttpStatusCode::is5xxServerError) { req, res ->
                    logger.info { "GeocoderAPI coordsToAddress API 호출이 실패하였습니다. statusCode : ${res.statusCode}" }
                }
                .body(String::class.java)

    GET 요청을 설정합니다.

    • uriBuilder를 사용하여 URI를 구성합니다.
      • https 스키마를 사용하고, dapi.kakao.com 호스트에 /v2/local/search/address.json 경로로 접근합니다.
      • 주소를 쿼리 파라미터로 추가합니다.
    • 헤더에 인증 키를 설정합니다.
    • 서버 에러(5xx)가 발생했을 때 로그를 남기도록 상태 핸들러를 설정합니다.
    • 응답 본문을 문자열로 받습니다.

     

    3. 응답 처리 및 JSON 파싱

    val result = JsonParser.parseString(resultStr) as JsonObject
    val documents = result.getAsJsonArray("documents")
    val address = documents.get(0).asJsonObject.getAsJsonObject("address")
    
    val bCode = address.get("b_code").asString //법정동코드
    val hCode = address.get("h_code").asString //행정동코드
    • resultStr 응답 문자열을 JsonObject로 파싱합니다.
    • documents 배열을 추출합니다.
    • 첫 번째 document 객체에서 address 객체를 추출합니다.
    • address 객체에서 법정동, 행정동 값을 추출합니다.
    • address 객체에는 아래와 같이 값이 담겨 있습니다.

     

    4. 전체코드

    전체코드는 아래와 같습니다.

    private val logger = KotlinLogging.logger {}
    
    object KakaoAPI {
        fun getLegalCode(address: String): Unit {
            val restClient = RestClient.builder()
                .defaultStatusHandler(HttpStatusCode::is4xxClientError) { req, res ->
                    logger.info { "KakaoAPI getAddressToLegalCode RestClient 생성에 실패하였습니다. statusCode : ${res.statusCode}" }
                }.build()
    
            val key = "REST API 키값"
    
            var resultStr = restClient.get()
                .uri { uriBuilder ->
                    uriBuilder.scheme("https")
                        .host("dapi.kakao.com")
                        .path("/v2/local/search/address.json")
                        .queryParam("query", address)
                        .build()
                }
                .headers { headers ->
                    headers.set("Authorization", "KakaoAK ${key}")
                }
                .retrieve()
                .onStatus(HttpStatusCode::is5xxServerError) { req, res ->
                    logger.info { "GeocoderAPI coordsToAddress API 호출이 실패하였습니다. statusCode : ${res.statusCode}" }
                }
                .body(String::class.java)
    
            val result = JsonParser.parseString(resultStr) as JsonObject
            val documents = result.getAsJsonArray("documents")
            val address = documents.get(0).asJsonObject.getAsJsonObject("address")
    
            val bCode = address.get("b_code").asString //법정동
            val hCode = address.get("h_code").asString //행정동
        }
    }

     

    참고자료

    카카오 주소검색

     

    728x90
    반응형
    저작자표시

    '개발 > GIS' 카테고리의 다른 글

    vworld Geocoder 2.0 vs 카카오 API: 좌표 변환 결과 비교  (0) 2024.08.09
    지번주소와 도로명주소 차이점, 법정동과 행정동의 이해  (3) 2024.07.24
      '개발/GIS' 카테고리의 다른 글
      • vworld Geocoder 2.0 vs 카카오 API: 좌표 변환 결과 비교
      • 지번주소와 도로명주소 차이점, 법정동과 행정동의 이해
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바